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

如何从频道获取消息?fetch_message触发AttributeError报错求助

解决Discord.py中AttributeError: 'NoneType' object has no attribute 'fetch_message'的问题

看起来你在尝试让Discord机器人编辑消息时碰到了这个报错,先把你的代码和报错信息整理一下:

你的代码片段:

channel = bot.get_channel(id_of_the_channel)
message = await channel.fetch_message(id_of_the_message)

报错详情:

File "main.py", line 280, in on_message
message = await channel.fetch_message(messageid)
AttributeError: 'NoneType' object has no attribute 'fetch_message'

问题核心

这个错误的本质是bot.get_channel(id_of_the_channel)返回了None——也就是说机器人没找到你指定的频道对象,后续调用fetch_message自然就会报错。下面是几个最常见的原因和对应的解决办法:

常见原因与解决方案

  • 频道ID不正确
    你传入的id_of_the_channel可能有问题:要么是复制的ID不对,要么是把ID当成字符串传入了(Discord.py要求频道ID必须是整数类型)。记得开启Discord的开发者模式,右键频道复制正确的数字ID,直接以整数形式传入,不要加引号。

  • 机器人没有访问频道的权限
    机器人必须被邀请到目标服务器,并且在目标频道拥有至少查看频道和读取消息历史的权限。你可以去服务器设置的角色面板里,找到机器人的角色,确认这两个权限是开启的,并且在目标频道的权限设置中没有被单独禁用。

  • 目标是DM频道
    bot.get_channel无法获取DM频道对象。如果要编辑的是DM消息,你可以通过用户ID获取DM频道:

    user = await bot.fetch_user(target_user_id)
    channel = await user.create_dm()
    # 或者如果是在on_message事件里触发的,直接用message.channel就行
    
  • 机器人缓存未加载完成
    如果你的代码在机器人启动初期(比如on_ready事件触发前)就调用get_channel,此时机器人的频道缓存还没加载好,会返回None。这种情况可以改用异步的fetch_channel直接从Discord API获取频道,不依赖缓存:

    channel = await bot.fetch_channel(id_of_the_channel)
    message = await channel.fetch_message(id_of_the_message)
    

额外提醒

确保你的机器人已经完成登录(也就是on_ready事件已经触发)后,再执行编辑消息的代码,避免在初始化阶段调用依赖缓存的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:45:28