Changement de valeur dans un programme en boucle

PrincessLeolo -  
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 !

Configuration: Windows / Chrome 87.0.4280.66

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
0
PrincessLeolo
 
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.")
0
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 
Bonjour,

Ben non, toujours pas
Visuellement, ça doit ressembler à ceci (avec les couleurs et tout ...) :

def test():
    print('test')

test()
0