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

discord.py编辑Embed不丢失反应及fetch_message报错解决

discord.py 编辑已有反应角色Embed问题解决方案

报错核心原因

fetch_message 是文本频道(TextChannel)实例的专属方法,直接在bot客户端实例上调用该方法会触发方法不存在的错误。

方案说明

仅修改消息的Embed字段时,不会删除消息上已有的反应,也不会重新推送@提及通知,完全兼容Carl-bot已经配置好的反应角色规则,不需要额外做反应迁移操作。

你不需要使用bot.command装饰器,直接在on_message事件监听逻辑中写入如下代码即可实现需求:

# 以下代码放在on_message事件的判断逻辑中
if message.content.startswith("embededit"):
    # 请替换为实际的频道ID、目标消息ID
    TARGET_CHANNEL_ID = 你的反应角色频道ID
    TARGET_MESSAGE_ID = 要编辑的Embed消息ID
    
    # 先获取目标频道实例,再拉取目标消息
    target_channel = bot.get_channel(TARGET_CHANNEL_ID)
    role_embed_msg = await target_channel.fetch_message(TARGET_MESSAGE_ID)
    
    # 仅传入embed参数执行编辑,不触动原有反应和消息正文
    await role_embed_msg.edit(embed=embedEdit)
    
    # 可选:给触发指令的消息打成功标记
    await message.add_reaction("✅")

注意事项

  • 确保机器人账号在目标频道拥有「查看频道」「管理消息」权限,否则接口会返回权限不足错误
  • 调用edit方法时不要传入content参数,只要不修改消息正文内容,Carl-bot绑定的反应角色逻辑就不会失效
  • 避免变量命名冲突:原代码中将拉取到的目标消息也命名为message,会覆盖事件传入的用户触发消息对象,容易引发逻辑异常,建议用不同变量名区分
  • 如果使用discord.py 2.0及以上版本,需要在开发者后台和bot初始化代码中开启message_content意图,否则无法监听到用户发送的embededit指令内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:54:20