fix(tgbot): dedupe exhausted-client report by email (#5453)

A client linked to N inbounds has one ClientStats row per inbound, all
sharing the same email. getExhausted appended every row, so the admin
expiration/traffic report listed the same user once per inbound (N info
blocks and N buttons), which Telegram split into multiple messages.

Track seen emails and report each client once.
This commit is contained in:
MHSanaei
2026-06-20 21:39:55 +02:00
parent 2bb29468d8
commit 1259c20e5f
@@ -206,6 +206,7 @@ func (t *Tgbot) getExhausted(chatId int64) {
logger.Warning("Unable to load Inbounds", err)
}
seenClients := make(map[string]bool)
for _, inbound := range inbounds {
if inbound.Enable {
if (inbound.ExpiryTime > 0 && (inbound.ExpiryTime-now < exDiff)) ||
@@ -214,6 +215,10 @@ func (t *Tgbot) getExhausted(chatId int64) {
}
if len(inbound.ClientStats) > 0 {
for _, client := range inbound.ClientStats {
if seenClients[client.Email] {
continue
}
seenClients[client.Email] = true
if client.Enable {
if (client.ExpiryTime > 0 && (client.ExpiryTime-now < exDiff)) ||
(client.Total > 0 && (client.Total-(client.Up+client.Down) < trDiff)) {