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 并进行比较。你决定你喜欢什么:)
参考资料:
抱歉我的英语不好^^
我正在 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 并进行比较。你决定你喜欢什么:)
参考资料: