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
相关产品推荐
相关产品推荐

