You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:01:05