2017-08-22 4 views
0

In meinem Python - Discord Bot wollte ich einen Befehl erstellen, der eine Schleife zum Laufen bringt. Die Schleife sollte aufhören, wenn ich einen zweiten Befehl eintrage. So sagte etwa:Break Loop mit Befehl

@client.event 
async def on_message(message): 
    if message.content.startswith("!C1"): 
     while True: 
      if message.content.startswith("!C2"): 
       break 
      else: 
       await client.send_message(client.get_channel(ID), "Loopstuff") 
       await asyncio.sleep(10) 

So ist es alle 10 Sekunden „Loopstuff“ in einem Kanalbeiträge und stoppt, wenn ich eintrete C2

Aber ich kann es nicht herausfinden, auf meinem eigenen .-!.

+0

Warum erfassen Sie nicht einen Tastenanschlag wie Strg + C, um Ihre Schleife zu stoppen? – Vinny

+0

Jeder in der Discord-Kanal sollte in der Lage sein, auf den Befehl zugreifen – EpyJojo

Antwort

1

Innerhalb Ihrer on_message Funktion message Inhalt wird nicht geändert. Eine weitere Nachricht wird dazu führen, dass on_message noch einmal aufgerufen wird. Sie benötigen eine Synchronisationsmethode, dh. globale Variable oder Klassenmitgliedsvariable, die geändert wird, wenn !C2 Nachricht eintrifft.

keepLooping = False 

@client.event 
async def on_message(message): 
    global keepLooping 
    if message.content.startswith("!C1"): 
     keepLooping = True 
     while keepLooping: 
      await client.send_message(client.get_channel(ID), "Loopstuff") 
      await asyncio.sleep(10) 
    elif message.content.startswith("!C2"): 
     keepLooping = False 

Als eine Randnotiz ist es gut, ein Standalone-Beispiel nicht nur eine einzelne Funktion bereitzustellen.

+0

Awesome! Danke vielmals :) – EpyJojo

0

(Ohne für mich zu versuchen) Versuchen:

while not message.content.startswith("!C2")

Für die While Klausel, die durch die Inhalte Ihrer else Klausel gefolgt.

+0

Funktioniert nicht:/ – EpyJojo