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

discord.py特定用户发送!bypass消息时代码未执行问题求助

排查Discord机器人!bypass逻辑未触发的原因

核心问题:计数频道逻辑中的提前终止

在ID为1177012537410203678的计数频道处理块中,存在一段try-except代码:

try:
    msg_int = int(message.content)
except: return

当目标用户在该频道发送!bypass时,message.content是字符串无法转换为整数,触发异常后直接执行return,导致后续的!bypass判断代码完全不会被执行。这是导致逻辑未触发的最直接原因。

其他潜在排查点

  • 用户ID匹配错误:核对调试打印出的author.id是否与目标ID845332948524859412完全一致,避免ID输入错误。
  • 文件对象指针异常:lastsender作为文件对象,连续调用read()会使文件指针移动到末尾,后续read()会返回空字符串,可能影响逻辑判断,但不会导致print('bypassing')无输出。
  • 机器人权限不足:确认机器人拥有目标频道的「删除消息」权限,但此问题只会导致删除操作失败,不会让调试打印消失,因此不是当前核心问题。

修复建议

调整代码执行顺序,将!bypass的判断逻辑放在计数频道逻辑之前,避免被提前终止:

@bot.event
async def on_message(message):
    print(f'content: {message.content}, channelid: {message.channel.id}, author: {message.author.id}')
    
    # 优先处理!bypass逻辑
    if (int(message.author.id) == 845332948524859412) and (message.content == '!bypass'):
        print('bypassing')
        await message.delete()
        lastsender.write('')
        return

    # 原GG消息处理逻辑
    if (message.channel.id == 978672833033023488 or 'levels' in message.channel.name) and message.content.startswith('GG'):
        level = await handlers.get_level_from_message(message=message.content)
        await handlers.give_role_from_level(user=message.mentions[0], level=level, levelsdict=levelsroles, roles=message.guild.roles)
        await handlers.send_level_dm(user=message.mentions[0], level=level, guild=message.guild)
    
    await bot.process_commands(message)

    # 计数频道逻辑
    if message.channel.id == 1177012537410203678:
        try:
            msg_int = int(message.content)
        except: return
        # ... 原计数频道后续逻辑

内容的提问来源于stack exchange,提问作者eesatss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:23:22