2017-05-30 1 views
0

J'ai donc quelque chose comme ceci:Comment arrêter une boucle infinie avec le même déclencheur qui la démarre?

import discord, asyncio 

client = discord.Client() 

@client.event 
async def on_message(message): 
    if message.content.lower().startswith("!test"): 
     await client.delete_message(message) 
     test1 = await client.send_message(message.channel, "%s test1" % (message.author.mention)) 
     await asyncio.sleep(1) 
     while True: 
      #newtest = await client.wait_for_message() 
      #if newtest.content.lower().startswith("!test"): 
       #return 0 
      #else: 
       test2 = await client.edit_message(test1, "%s test2" % (message.author.mention)) 
       await asyncio.sleep(1) 
       await client.edit_message(test2, "%s test1" % (message.author.mention)) 
       await asyncio.sleep(1) 

client.run('ClientTokenHere') 

Ce qu'il fait est, si quelqu'un tape !test dans un canal de chat, le script supprimer ce message !test, puis envoyer un message dans le chat qui dit de la personne nom suivi du texte test1. Ensuite, le script va éditer ce message pour dire test2 après une seconde, puis il va éditer que même message pour dire test1, puis à test2, etc., etc. pour toujours.

Cependant, je veux faire en sorte que si un autre utilisateur tape la même commande !test, le script s'arrêtera immédiatement pour l'utilisateur pour lequel il était précédemment activé, et commence à le faire pour l'utilisateur le plus récent qui a émis la commande. Les lignes que j'ai commentées sont mes tentatives pour essayer d'y parvenir. Comment puis-je faire cela?

Répondre

0

Vous pouvez utiliser une variable globale et définir l'utilisateur que vous suivez. Si l'utilisateur change, vous pouvez interrompre la boucle while et arrêter.