我的Discord机器人中@bot.command()指令无法生效是什么原因?
问题原因及解决方案
- 自定义on_message事件覆盖了默认命令处理流程
当你重写
@bot.event装饰的on_message事件后,discord.py将不再执行默认的事件逻辑,而默认逻辑中包含了@bot.command()注册指令的分发处理代码。
解决方法:在你自定义的on_message函数末尾添加一行代码:
await bot.process_commands(message)
- 命令大小写或前缀不匹配
discord.py默认的命令是大小写敏感的,你注册的指令名为
check,如果用户发送的是.Check(和帮助页的写法一致),会匹配失败。另外需要确认你初始化Bot时设置的命令前缀确实为.。
解决方法:在Bot初始化时添加case_insensitive=True参数关闭大小写敏感,或者统一指令调用写法为.check,也可以给check指令添加别名适配大小写。
- 接口调用代码存在未捕获的异常,导致执行中断
你的代码中
token变量仅在育碧会话请求状态码为200时才会被定义,一旦会话请求失败,后续的用户名查询请求会触发token变量未定义的报错,直接终止函数运行无输出。同时同步的requests库调用会阻塞discord.py异步主线程,也可能导致无响应。
解决方法:添加异常捕获逻辑,处理会话请求失败的场景,同时替换requests为异步的aiohttp库发起网络请求。
- 未开启消息内容权限
Discord平台现在要求所有消息读取类机器人必须在开发者后台开启
Message Content Intent权限,同时初始化Bot时要配置对应的意图参数intents.message_content = True,否则机器人无法读取消息内容,自然无法触发指令。
内容的提问来源于stack exchange,提问作者user16246484
相关产品推荐
相关产品推荐

