【发布时间】:2021-09-08 23:02:42
【问题描述】:
我在 python 中做了一个小不和谐机器人,它正在工作!我有一个小问题:我希望机器人发送的消息(第 11 行)在有人做出反应时被删除:(我该怎么做?
@commands.command()
async def casino(self, ctx, arg):
embed = (Embed(title=f"Viens défier {ctx.message.author.name} qui mets en jeu {arg} po!", description=f"Appuies sur les <:goldcoin:857043361813889044> pour un /rand avec {ctx.message.author.name} :)")
.add_field(name="<:goldcoin:857043361813889044>Joueur 1", value=f"{ctx.author.mention}", inline = False)
.add_field(name="<:goldcoin:857043361813889044>Joueur 2", value="<:goldcoin:857043361813889044>", inline = False)
.set_footer(text=f"Défi de {ctx.author.display_name}"))
message = await ctx.send(embed=embed)
emojis = ['<:goldcoin:857043361813889044>', '<:deny:849631648135118889>']
for emoji in emojis:
await message.add_reaction(emoji)
await ctx.send("<@&857916481747943434> A vos golds !")
@commands.Cog.listener()
async def on_raw_reaction_add(self, payload):
member = payload.member
if member.bot:
return
channel = self.bot.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
try:
if not message.embeds:
return
if 'Viens défier' not in message.embeds[0].title:
return
except:
return
possible_responses = [str(i) for i in range(1, 101)]
emoji = payload.emoji
reaction = get(message.reactions, emoji=emoji)
embed = message.embeds[0]
if emoji.name == 'deny':
if member.display_name in embed.footer.text:
for reac in message.reactions:
await reac.clear()
await message.edit(content='Défi annulé', embed=None)
elif payload.member in get(member.guild.roles, id=849270094952792084).members:
for reac in message.reactions:
await reac.clear()
await message.edit(content='Défi annulé', embed=None)
else:
await reaction.remove(member)
return
names = [field.name for field in embed.fields]
values = [field.value for field in embed.fields]
test = values[0]
index = ['', 'goldcoin'].index(emoji.name)
result1 = random.choice(possible_responses)
result2 = random.choice(possible_responses)
bravo1 = f"Bravo {test} ! Tu as gagné avec un {result1} !"
bravo2 = f"Bravo {payload.member.mention} ! Tu as gagné avec un {result2} !"
if values.count(member.mention) >= 1:
await channel.send("Tu as déjà joué, attends un peu", delete_after=5)
await reaction.remove(payload.member); return
elif '@' in values[1]:
await channel.send("Quelqu'un a déjà joué, retente ta chance !", delete_after=5)
await reaction.remove(payload.member); return
embed.set_field_at(index, name=f"<:goldcoin:857043361813889044>Tu as fait : {result2} !", value=f"{payload.member.mention}", inline=False)
embed.set_field_at(0, name=f"<:goldcoin:857043361813889044>Tu as fait : {result1} !", value=f"{test}", inline=False)
await message.edit(embed=embed)
if result1 > result2:
await channel.send(bravo1)
elif result1 < result2:
await channel.send(bravo2)
elif result1 == result2:
await channel.send("EGALITEEEEEE")
if (message != None) and (message.content == "<@&857916481747943434> A vos golds !"):
await message.delete()
@casino.error
async def casino_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
await ctx.send("Merci d'utiliser le bot avec ?casino XX. Exemple: ?casino 100", delete_after=25)
await ctx.message.delete(delay=25)
默认设置(机器人): bot.add_cog(赌场(bot))
我尝试使用“if message.content()”,但它没有做任何事情:( 谢谢你的帮助:)
【问题讨论】:
-
你分享的代码哪里有问题?什么不工作?
-
代码没有问题,只是不知道有人反应后如何删除第11行
-
send() 具有返回类型
Message,它具有id属性。因此,从返回对象中获取id并将其保存在数据库或其他持久缓存中。然后,当您收到反应的消息 ID 与您保存的消息 ID 匹配的反应事件时,您可以使用 raw events 运行删除代码。 -
谢谢 Noah :) 我正在学习和 atm,我只是不知道如何将 id 保存在持久缓存中(我什至不谈论数据库,你把我弄丢了 xD)
标签: discord.py bots