2017-08-22 13 views
0

私のPython - Discord Botでは、ループを実行させるコマンドを作成したかったのです。 2番目のコマンドを入力すると、ループが停止するはずです。 C2はコマンドでのループの復帰

だから、チャンネルに10秒ごとに「Loopstuff」を投稿し、私が入力したときに、停止し

@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) 

しかし、私は自分でそれを把握するカント.-:!だから、大まかに言いました。

+0

ループを停止させるためにctrl + cのようなキーストロークをキャプチャしないのはなぜですか? – Vinny

+0

不和のチャンネルに誰もがコマンドにアクセスできる必要があります – EpyJojo

答えて

1

on_messageの中には、messageのコンテンツは変更されません。もう1つのメッセージがあると、もう一度on_messageが呼び出されます。つまり、同期方法が必要です。グローバル変数またはクラスメンバ変数は、!C2メッセージが到着したときに変更されます。

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 

単なる機能ではなく、スタンドアロンの例を提供するのは良いことです。

+0

恐ろしい!どうもありがとう :) – EpyJojo

0

(自分のためにしようとせず)試してみてください:あなたのelse句の内容が続くWhile句については

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

、。

+0

動作しません:/ – EpyJojo