我在 python 中做了一个小小的 discord bot,它正在工作!我有一个小问题:我希望当有人做出反应时删除机器人发送的消息(第 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(Casino(bot))
我尝试了“if message.content()”,但它没有做任何事情:( 谢谢你的帮助:)
答案 0 :(得分:1)
您基本上已经在标题中说明了您需要什么。缺少的只是代码
@client.event
async def on_raw_reaction_add(payload):
channel = client.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
async for msg in channel.history(after = message, limit = 20):
if (msg != None) and (msg.content == "<@&857916481747943434> A vos golds !"):
await msg.delete()
@commands.Cog.listener()
async def on_raw_reaction_add(self, payload):
member = payload.member
channel = self.bot.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
async for msg in channel.history(after = message, limit = 20):
if (msg != None) and (msg.content == "<@&857916481747943434> A vos golds !"):
await msg.delete()
if member.bot:
return
try:
if not message.embeds:
return
if 'Viens défier' not in message.embeds[0].title:
return
except:
return
# code continues