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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:45:08