Python实现Telegram群组仅管理员可执行/addtoken命令遇ID匹配问题
问题原因与修复方案
你的代码逻辑存在漏洞:遍历管理员列表时,只要第一个管理员ID和发送者ID不匹配,就直接判定为非管理员并终止循环,但发送者可能是列表里的其他管理员,这会导致误判。另外,ChannelParticipantsAdmins会包含机器人自身,也需要排除这个干扰项。
修复后的代码
@BOT.on(events.NewMessage(pattern='/addtoken')) async def addToken(event): is_admin = False bot_id = (await BOT.get_me()).id # 遍历所有管理员,验证发送者是否在管理员列表内 async for user in BOT.iter_participants(event.chat_id, filter=ChannelParticipantsAdmins): if user.id == event.sender_id and user.id != bot_id: is_admin = True break # 根据验证结果返回对应响应 if is_admin: await event.respond("请发送你想添加到这个群组的代币合约地址。", parse_mode='HTML') else: await event.respond("你不是这个群组的管理员。", parse_mode='HTML') raise events.StopPropagation
关键修改说明
- 先初始化
is_admin标记,遍历完所有管理员后再统一判断,避免提前终止循环导致误判 - 加入机器人ID过滤,排除机器人自身对验证逻辑的干扰
- 调整响应逻辑,确保只有在确认发送者是管理员时才返回正常提示,否则返回权限不足提示
内容的提问来源于stack exchange,提问作者Bartu Bozkurt
相关产品推荐
相关产品推荐

