Changement de valeur dans un programme en boucle
PrincessLeolo
-
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis actuellement en train de programmer un bot pour mon serveur Discord, et me retrouve face à un problème, sûrement lié à ma connaissance assez commune de Python..
Voilà maintenant quatre heures que j'essaye différents programmes et regarde multiples tutoriels, mais je ne trouve toujours la réponse à mon problème.
Je voudrais programmer un bot qui, quand on réagis à son message, change une valeur et envoie un message avec cette nouvelle valeur..
En gros par exemple:
Le bot écrit "1" -->
On réagis au message -->
Selon notre réaction, le bot augmente/baisse la valeur -->
Le bot écrit la nouvelle valeur, ici "0" ou "2" -->
On réagis au message -->
Selon notre réaction...
Vous avez compris.
Je reprécise que cela est pour un bot discord, d'où le système de "réaction".
Voici à quoi ressemble mon code actuel (s'il-vous-plaît pas de moqueries):
>>>@bot.command()
>>>async def valeur(ctx):
>>> p = [1]
>>> i = p[0]
>>> message = await ctx.send(f"{i}")
>>> await message.add_reaction("◀️")
>>> await message.add_reaction("▶️")
>>>
>>> def checkEmoji(reaction, user):
>>> return ctx.message.author == user and message.id == reaction.message.id and (str(reaction.emoji) == "◀️" or str(reaction.emoji) == "▶️")
>>>
>>> try:
>>> reaction, user = await bot.wait_for("reaction_add", timeout = 30, check = checkEmoji)
>>> if reaction.emoji == "◀️":
>>> p[0] = p[0] - 1
>>> return await valeur(ctx)
>>> else:
>>> p[0] = p[0] + 1
>>> return await valeur(ctx)
>>>
>>> except:
>>> await ctx.send("Erreur programme.")
J'ai essayé de procéder par une liste, mais je ne sais pas si cela était judicieux ou non.
Lorsque la command est entrée, le bot envoie bien un message avec la première valeur, et les réactions apparaissent bien.
Evidemment, le programme ne fonctionne pas totalement, car il ne se répète pas en boucle quand on interagi avec les réactions. Je n'ai donc par ce fait aucun moyen de savoir si la valeur a changé ou non.
Mes deux problèmes sont donc:
- Comment faire pour que ce programme se répète en boucle ?
- Comment faire pour que la valeur donnée puisse changer ?
Sinon, j'ai une question plus simple, est-ce que c'est possible ?..
J'espère que je ne vous ai pas trop embrouillé l'esprit avec mon problème ^^'
Merci d'avance !
Je suis actuellement en train de programmer un bot pour mon serveur Discord, et me retrouve face à un problème, sûrement lié à ma connaissance assez commune de Python..
Voilà maintenant quatre heures que j'essaye différents programmes et regarde multiples tutoriels, mais je ne trouve toujours la réponse à mon problème.
Je voudrais programmer un bot qui, quand on réagis à son message, change une valeur et envoie un message avec cette nouvelle valeur..
En gros par exemple:
Le bot écrit "1" -->
On réagis au message -->
Selon notre réaction, le bot augmente/baisse la valeur -->
Le bot écrit la nouvelle valeur, ici "0" ou "2" -->
On réagis au message -->
Selon notre réaction...
Vous avez compris.
Je reprécise que cela est pour un bot discord, d'où le système de "réaction".
Voici à quoi ressemble mon code actuel (s'il-vous-plaît pas de moqueries):
>>>@bot.command()
>>>async def valeur(ctx):
>>> p = [1]
>>> i = p[0]
>>> message = await ctx.send(f"{i}")
>>> await message.add_reaction("◀️")
>>> await message.add_reaction("▶️")
>>>
>>> def checkEmoji(reaction, user):
>>> return ctx.message.author == user and message.id == reaction.message.id and (str(reaction.emoji) == "◀️" or str(reaction.emoji) == "▶️")
>>>
>>> try:
>>> reaction, user = await bot.wait_for("reaction_add", timeout = 30, check = checkEmoji)
>>> if reaction.emoji == "◀️":
>>> p[0] = p[0] - 1
>>> return await valeur(ctx)
>>> else:
>>> p[0] = p[0] + 1
>>> return await valeur(ctx)
>>>
>>> except:
>>> await ctx.send("Erreur programme.")
J'ai essayé de procéder par une liste, mais je ne sais pas si cela était judicieux ou non.
Lorsque la command est entrée, le bot envoie bien un message avec la première valeur, et les réactions apparaissent bien.
Evidemment, le programme ne fonctionne pas totalement, car il ne se répète pas en boucle quand on interagi avec les réactions. Je n'ai donc par ce fait aucun moyen de savoir si la valeur a changé ou non.
Mes deux problèmes sont donc:
- Comment faire pour que ce programme se répète en boucle ?
- Comment faire pour que la valeur donnée puisse changer ?
Sinon, j'ai une question plus simple, est-ce que c'est possible ?..
J'espère que je ne vous ai pas trop embrouillé l'esprit avec mon problème ^^'
Merci d'avance !
Configuration: Windows / Chrome 87.0.4280.66
A voir également:
- Changement de valeur dans un programme en boucle
- Changer de dns - Guide
- Mettre en veille un programme - Guide
- Programme demarrage windows - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Forcer la fermeture d'un programme - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
peux-tu utiliser les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
peux-tu utiliser les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Comme ceci ?
@bot.command() async def valeur(ctx): p = [1] i = p[0] message = await ctx.send(f"{i}") await message.add_reaction("◀️") await message.add_reaction("▶️") def checkEmoji(reaction, user): return ctx.message.author == user and message.id == reaction.message.id and (str(reaction.emoji) == "◀️" or str(reaction.emoji) == "▶️") try: reaction, user = await bot.wait_for("reaction_add", timeout = 30, check = checkEmoji) if reaction.emoji == "◀️": p[0] = p[0] - 1 return await valeur(ctx) else: p[0] = p[0] + 1 return await valeur(ctx) except: await ctx.send("Erreur programme.")