Discord.py : attendre réaction entrée par utilisateur préci
Utilisateur anonyme -
Bonjour,
Voici mon code :
@bot.command() async def war(ctx, user): userID = ctx.message.author.id VerifPlayer(userID) rivalID = user.split("@") rivalID = rivalID[1].split(">") rivalID = rivalID[0] VerifPlayer(rivalID) message = await ctx.send(user + ", veux-tu tenter ta chance contre <@" + str(userID) + "> ?") await message.add_reaction("✅") await message.add_reaction("❌") def checkEmoji(reaction, rival): return ctx.message.author == rival and message.id == reaction.message.id and str(reaction.emoji) == "✅" or str(reaction.emoji) == "❌" reaction, rival = await bot.wait_for("reaction_add", timeout = 10, check = checkEmoji) if reaction.emoji == "✅": await ctx.send("Duel accepté.") else: await ctx.send("Le duel a bien été abandonné.")
Je voudrais que l'utilisateur pouvant répondre soit le rival (user dans les paramètres de la commande), mais je ne trouve pas comment obtenir une variable équivalente à ctx.message.author (qui donne est au format : username#0000)
C'est un brouillon, ne faites pas attention à la syntaxe qui à certains endroits doit clairement être revue.
Sauriez-vous m'aiguiller ?
Merci d'avance.
- Discord.py reaction
- Reaction story instagram - Accueil - Réseaux sociaux
- Voir réaction story facebook - Guide
- Supprimer une réaction story sur instagram ✓ - Forum Instagram
- Impossible d'installer discord.py pour un bot - Forum Python
- Commande réaction discord - Forum Discord
1 réponse
Pour obtenir une variable similaire à ctx.message.author
mais qui représente le rival plutôt que l'auteur du message, vous pouvez utiliser la méthode get_member
de la classe Guild
de Discord.
Voici comment vous pouvez obtenir un objet Member
représentant le rival dans votre code :
# Récupération de l'ID du rival à partir de la mention rivalID = user.split("@") rivalID = rivalID[1].split(">") rivalID = rivalID[0] # Récupération de l'objet Member correspondant au rival guild = ctx.guild rival = guild.get_member(int(rivalID))
Vous pouvez ensuite utiliser rival comme une variable similaire à ctx.message.author dans votre code. Par exemple, vous pouvez l'utiliser dans la fonction checkEmoji de la manière suivante :
def checkEmoji(reaction, rival): return rival == reaction.user and message.id == reaction.message.id and str(reaction.emoji) == "✅" or str(reaction.emoji) == "❌" reaction, rival = await bot.wait_for("reaction_add", timeout = 10, check = checkEmoji)
Voici comment vous pourriez procéder pour obtenir la réaction d'un utilisateur spécifique (ici, le "rival") :
Stockez l'objet Member du rival dans une variable, que vous pouvez obtenir en utilisant la méthode discord.utils.get et en passant en paramètres le serveur et l'ID du rival :
rival = discord.utils.get(ctx.guild.members, id=rivalID)
Modifiez la fonction de callback checkEmoji pour qu'elle prenne en paramètre l'objet Member du rival au lieu de rival :
def checkEmoji(reaction, member):
Modifiez la condition de la fonction pour vérifier si l'auteur de la réaction est le rival plutôt que l'auteur du message original :
return member == reaction.user and message.id == reaction.message.id and str(reaction.emoji) == "✅" or str(reaction.emoji) == "❌"
Modifiez la ligne où vous appelez bot.wait_for pour passer l'objet Member du rival en tant que deuxième paramètre de la fonction de callback :
reaction, member = await bot.wait_for("reaction_add", timeout = 10, check = checkEmoji)
Vous devriez maintenant être en mesure d'obtenir la réaction du rival et de la traiter correctement. N'oubliez pas de mettre à jour votre code en conséquence.