discord.py 嵌入消息未更新

discord.py embed message doesn't update

抱歉我的英语不好^^

我正在 python 中做一个 discord 机器人(我是 python 中的初学者)并且我正在逐步进行。我在这里得到了一些很大的帮助,如果可能的话,我再次想要一点帮助:)

我不知道如何正确执行此操作,但我尝试使用单击表情符号的@user 编辑嵌入。如果有人点击“坦克笑脸”,它会编辑“坦克”字段上的嵌入,我希望可以填充 5 个字段(1 个坦克、1 个治疗、3 个 dps)。

告诉我这是否可行,以及我是否正在尝试使用 discord.edit?

谢谢:)

# bot.py
import os
from discord.ext import commands
from discord.ext.commands import Bot
import discord
from discord import Embed, Emoji
from dotenv import load_dotenv
import random
import asyncio

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')

# On définit le préfixe
bot = commands.Bot(command_prefix='!')

# On print les infos après le lancement du bot et
# on affiche un message d'activité pour le bot.
@bot.event
async def on_ready():
    for guild in bot.guilds:
        if guild.name == GUILD:
            break

    print(
        f'{bot.user} is connected to the following guild:\n'
        f'{guild.name}(id: {guild.id})'
    )
    await bot.change_presence(activity = discord.Activity(
                          type = discord.ActivityType.watching,
                          name = 'Sylàn être mauvais'))

# Commande mm+ dans un embed
@bot.command()
async def mm(ctx, arg, arg2, arg3, help="permet de créer une invit mm+ avec !mm clé niveau heure. Exemple: !mm Boralus +14 21h00"):
      embed = discord.Embed(title="Inscription pour {} en {} vers {}" .format(arg, arg2, arg3), description="Composition du groupe") #,color=Hex code
      embed.add_field(name="Tank", value="<:tank:761252435720667157>tank\n", inline = False)
      embed.add_field(name="Heal", value="<:heal:761252937548169246>heal\n", inline = False)
      embed.add_field(name="Dps1", value="<:dps:761252937066217512>dps1\n", inline = False)
      embed.add_field(name="Dps2", value="<:dps:761252937066217512>dps2\n", inline = False)
      embed.add_field(name="Dps3", value="<:dps:761252937066217512>dps3\n", inline = False)

      sent = await ctx.send(embed=embed)
      emojis=['<:tank:761252435720667157>', '<:heal:761252937548169246>', '<:dps:761252937066217512>']
      for emoji in emojis:
            await sent.add_reaction(emoji)
             
@bot.event
async def on_raw_reaction_add(payload):
    channel = bot.get_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)
    if message.author != payload.member:
        return

    reaction = discord.utils.get(message.reactions, emoji=payload.emoji.name)
    embed  = message.embeds[0]
    tank = bot.get_emoji(761252435720667157)
    heal = bot.get_emoji(761252937548169246)
    dps = bot.get_emoji(761252937066217512)

    if reaction == 'tank':
        embed.set_field_at(1, name='Tank', value='Modified value')
    elif reaction == 'heal':
        embed.set_field_at(2, name='Heal', value='Modified value')
    elif reaction == 'dps':
        embed.set_field_at(3, name='Dps', value='Modified value')    
    await message.edit(embed=embed)


#Message d'erreur si mauvaise utilisation
@mm.error
async def mm_error(ctx, error):
    if isinstance(error, commands.MissingRequiredArgument):
                await ctx.send("Merci d'utiliser le bot avec !mm clé niveau heure. Exemple: !mm Boralus +14 21h00")
# EOF

bot.run(TOKEN)

您的 Message.edit() 方法是正确的。
由于您只是要求一些代码,这里是您想要执行的操作的简单示例:

@bot.command()
async def send_embed(self, ctx):
    embed = (Embed(name='A nice embed')
             .add_field(name='Field 1', value='Value 1')
             .add_field(name='Field 2', value='Value 2'))
    emojis = ['1️⃣', '2️⃣']
    message = await ctx.send(embed=embed)
    for emoji in emojis:
        await message.add_reaction(emoji)

@bot.event
async def on_raw_reaction_add(self, payload):
    if payload.member.bot:
        return
    channel = bot.get_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)
    embed, emojis  = message.embeds[0], ['1️⃣', '2️⃣']
    index = emojis.index(payload.emoji.name)

    embed.set_field_at(index, name=embed.fields[index].name, value=payload.member.mention, inline=False)
    await message.edit(embed=embed)

on_raw_reaction_add 的优点是您不再需要 while 循环,但是,如果您对任何消息添加反应,它会被触发,因此您需要存储消息 ID 并进行比较。你决定你喜欢什么:)

参考资料: