Discord.py 删除消息 on_raw_reaction_add

时间:2021-06-25 14:45:37

标签: discord.py bots

我在 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()”,但它没有做任何事情:( 谢谢你的帮助:)

1 个答案:

答案 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
相关问题