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

Discord机器人实现hello自动回复hi时触发AttributeError报错

问题定位

报错核心是你混淆了Discord.py里的两类实例对象:

  • bot.get_channel(931570478915657790)返回的是TextChannel(文本频道)实例,这个对象只存储频道名称、ID、权限配置这类频道维度的属性,根本不存在content字段
  • 消息内容、发送者、发送频道这类消息维度的信息,全部存在on_message事件回调传入的message参数里,从频道对象里找消息内容必然触发属性不存在的错误

除此之外原代码还有两个隐藏逻辑问题:

  • 没有过滤机器人自身发送的消息,一旦触发回复,机器人发出的"hi!"会再次被on_message事件捕获,陷入无限发消息的死循环
  • 没有做目标频道校验,逻辑上无法实现仅指定频道触发回复的需求
正确实现代码
@bot.event
async def on_message(message):
    # 过滤机器人自身发送的消息,避免无限循环
    if message.author.bot:
        return
    # 校验消息来自目标频道、内容完全匹配"hello"
    if message.channel.id == 931570478915657790 and message.content == "hello":
        # 回复触发消息的用户,不需要@用户的话可以换成await message.channel.send("hi!")
        await message.reply("hi!")
    # 如果后续要给机器人加前缀/斜杠命令,必须保留这行,否则命令会失效
    await bot.process_commands(message)
关键改动说明
  • 移除了多余的get_channel调用,直接从事件传入的message对象取频道ID、消息内容、作者信息,避免调用不存在的属性,同时减少不必要的接口请求
  • 增加机器人自身消息过滤逻辑,从根源避免无限循环问题
  • 补充process_commands调用,兼容后续机器人的命令扩展能力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:57:13