Discord.py中async on_message(message)出现语法错误该如何解决?
报错原因及修复方案
语法错误(缩进类)原因&修复
- 原因:代码编写时混用了空格和制表符(Tab)作为缩进符号,本地编辑器通常会自动兼容两种缩进格式,但Heroku的Python运行环境对缩进规范要求严格,因此触发语法报错。
- 修复:将代码中所有缩进统一替换为4个空格,不要混合使用Tab缩进,可直接使用编辑器自带的「缩进转换」功能一键统一格式。
代码逻辑问题(会导致功能失效,建议同步修复)
- 原因:你向
afkdict中存储数据时使用的键是str(message.author.id)(字符串类型的用户ID),但判断被@成员是否为AFK状态时,判断条件写的是if member.id in afkdict,而member.id是整数类型,类型不匹配会导致判断永远为假,AFK提醒功能无法正常触发。 - 修复:将判断条件修改为
if str(member.id) in afkdict即可匹配类型,同时建议在代码全局位置提前初始化afkdict = {},避免运行时出现未定义变量的报错。
修复后完整代码示例
# 全局位置提前初始化AFK字典 afkdict = {} @client.event async def on_message(message): global afkdict if str(message.author.id) in afkdict: afkdict.pop(str(message.author.id)) for member in message.mentions: if member != message.author: # 修正为字符串类型匹配 if str(member.id) in afkdict: afkmsg = afkdict[str(member.id)] await message.channel.send(f"{member} is AFK: {afkmsg}") await client.process_commands(message)
内容的提问来源于stack exchange,提问作者J Muzhen
相关产品推荐
相关产品推荐

