Changement de valeur dans un programme en boucle

Fermé
PrincessLeolo - 22 nov. 2020 à 23:18
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 24 nov. 2020 à 10:35
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
A voir également:

3 réponses

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
23 nov. 2020 à 10:21
bonjour,
peux-tu utiliser les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
PrincessLeolo
23 nov. 2020 à 19:50
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 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
24 nov. 2020 à 10:35
Bonjour,

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

def test():
    print('test')

test()
0