mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-11 07:46:37 +08:00
fix(telegram): 区分'不在群'与'查不了',修复在群却被拒注册/绑定
getChatMember 失败(Bot不在群/频道非管理员/群ID失效/代理超时)此前被 吞成 false,导致已在群用户收到'不在绑定群组'误导提示。 - telegramChatMembership 返回三态(是/否/查不了) - telegramUserBindDecision 据此返回 allowed/denied/unverifiable - 四个拦截点(start绑定/register/redeem注册/hideadult)在'查不了' 时改提示管理员检查Bot权限与群ID,不再误导用户 - syncgroupm 仅在'查实非成员'时判定可清理,查不了保守跳过防误删 - getChatMember 超时 8s->15s,缓解代理回退预算耗尽
This commit is contained in:
@@ -596,14 +596,16 @@ func (s *TelegramBotService) cmdMgoSyncGroup(ctx context.Context, channel *model
|
||||
if user == nil || UserIsProtectedAccount(ctx, s.repo, user) {
|
||||
continue
|
||||
}
|
||||
member := false
|
||||
// 仅当所有绑定群组/频道都「查实不是成员」时才判定为可清理;
|
||||
// getChatMember 出错(membershipUnknown)时保守跳过,避免误删。
|
||||
confirmedNo := true
|
||||
for _, chatID := range chatIDs {
|
||||
if s.telegramUserIsChatMember(ctx, channel, chatID, int(binding.TelegramUserID)) {
|
||||
member = true
|
||||
if s.telegramChatMembership(ctx, channel, chatID, int(binding.TelegramUserID)) != membershipNo {
|
||||
confirmedNo = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if !member {
|
||||
if confirmedNo {
|
||||
stale = append(stale, staleBinding{User: *user, Binding: binding})
|
||||
}
|
||||
}
|
||||
@@ -634,7 +636,7 @@ func (s *TelegramBotService) telegramMembershipChatIDs(channel *model.NotifyChan
|
||||
cfg := s.telegramChannelConfig(channel)
|
||||
seen := map[string]struct{}{}
|
||||
var out []string
|
||||
for _, key := range []string{"group_chat_id", "channel_chat_id"} {
|
||||
for _, key := range []string{"group_chat_id", "channel_chat_id", "command_chat_id"} {
|
||||
value := strings.TrimSpace(cfg[key])
|
||||
if value == "" {
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user