소스 검색

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.
MHSanaei 22 시간 전
부모
커밋
1259c20e5f
1개의 변경된 파일5개의 추가작업 그리고 0개의 파일을 삭제
  1. 5 0
      internal/web/service/tgbot/tgbot_report.go

+ 5 - 0
internal/web/service/tgbot/tgbot_report.go

@@ -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)) {