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

如何通过message_id编辑Embed?React触发编辑时遇属性错误

问题原因

set_field_at 是 Embed 对象的方法,不是 Message 对象的方法。你直接在 message 上调用这个方法,自然会触发 AttributeError。

解决方法

要修改消息里的Embed,需要先提取消息中的Embed实例,修改它之后,再通过 message.edit() 方法替换原消息的Embed。

修改后的代码示例:

@bot.event
async def on_raw_reaction_add(payload):
    channel = await bot.fetch_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)
    
    # 先检查消息是否包含Embed,避免无Embed时报错
    if not message.embeds:
        return
    
    # 获取消息中的第一个Embed(假设消息只有一个Embed)
    embed = message.embeds[0]
    
    # 根据表情修改指定字段
    if payload.emoji.name == "✅":
        embed.set_field_at(4, name="Status:", value="Accepted")
    elif payload.emoji.name == "❎":
        embed.set_field_at(4, name="Status:", value="Denied")
    elif payload.emoji.name == "❌":
        embed.set_field_at(4, name="Status:", value="Canceled")
    else:
        return
    
    # 编辑消息,替换为修改后的Embed
    await message.edit(embed=embed)
额外注意事项
  • 字段索引从0开始计数,确认你要修改的第5个字段(索引4)确实存在,否则会触发 IndexError。
  • 如果消息中有多个Embed,需要根据实际情况选择对应的索引(比如 message.embeds[1])。
  • 可添加异常处理,捕获 IndexError 处理字段不存在的情况:
try:
    embed.set_field_at(4, name="Status:", value="Accepted")
except IndexError:
    # 字段不存在时的处理逻辑,比如添加新字段
    embed.add_field(name="Status:", value="Accepted")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:50:28