2 votes

Modification de la réaction, ne modifier que la commande la plus récente dans discord.py

La plupart du temps, c'est très bien, mais comment faire pour qu'il ne modifie que le message le plus récent envoyé par l'utilisateur ? Si quelqu'un tape deux fois la même commande, puis réagit au deuxième message, il modifiera les deux tant qu'il est dans la fenêtre de 60 secondes avant qu'il n'expire. Voici le code :

        px = await ctx.send(embed=e)
        for name in reactions:
            emoji = get(ctx.guild.emojis, name=name)
            try: await px.add_reaction(emoji or name)
            except: return

        def check(reaction, user):
            return user == ctx.author and str(reaction.emoji) in reactions

        while True:
            try:
                reaction, user = await self.bot.wait_for("reaction_add", timeout=60, check=check)
                if str(reaction.emoji) == "right":
                    p += 1
                    # doing the command again but + 1 page
                    await px.edit(embed=e)
                elif str(reaction.emoji) == "left":
                    p -= 1
                    # doing the command again but - 1 page
                    await px.edit(embed=e)
                else:
                    await px.remove_reaction(reaction, user)
            except asyncio.TimeoutError:
                break

Je veux seulement qu'il édite l'utilisation la plus récente de la commande par cet utilisateur. Merci.

2voto

bravosierra99 Points 820

Sur mon téléphone, donc difficile de taper. Mais pour vérifier, ajoutez

px.id == reaction.message.id

Px devrait être un objet de message avec un ID

Cela permettra de s'assurer que, lorsqu'ils cliquent sur une réaction sur une intégration, le bon gestionnaire la reçoit. Vous avez dit que vous vouliez que le dernier gestionnaire soit le seul à le faire... ce ne serait pas tout à fait le cas. Mais toutes les réactions sur le plus récent seraient traitées pour le plus récent, et toutes les réactions sur un plus ancien seraient traitées par les gestionnaires antérieurs. Si cela a un sens.

0 votes

Oh, c'est logique, et oui, c'est essentiellement ce que je veux de toute façon. Je l'ai juste formulé bizarrement, mais merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X