2016-09-19 7 views
0

TelegramボットのAPIにアクセスするスクリプトがありますが、残念ながら一度に1つのメッセージしか処理できません。Pythonスレッドをカウントダウンしてからアクションを実行するにはどうしたらいいですか?

私の最終目標は、誰かがゲームを開始した後、一定の時間が経過した後(彼らがまだゲームに勝たなかった場合)、グループ内の他のユーザを防ぐためにゲームをリセットするゲームをすることから(混乱を避けるために一度に1つのゲームしか持たないように設定しました)。私が試した言葉スクランブル解除ゲームで

:例えばだから、

import time 
import telepot 

def handle(msg): 
    message_text = msg['text'] 
    message_location_id = msg['chat']['id'] 
    global game_active 
    global word_to_unscramble 
    if message_text == '/newgame': 
     game_active = True 
     <game function, defines word_to_unscramble> 
     time.sleep(30) 
     if game_active: 
      game_active = False 
      word_to_unscramble = None 
      bot.sendMessage(message_location_id, 'Sorry the answer was ' + word_to_unscramble) 
    if message_text == 'word_to_unscramble': 
     game_active = False 
     bot.sendMessage(message_location_id, 'You win!') 

# I added this part in as an echo, just to see when it processed the message 
    if 'text' in msg: 
     bot.sendMessage(message_location_id, message_text) 

game_active = False 

word_to_unscramble = None 

bot = telepot.Bot('<my api token>') 

bot.message_loop(handle) 

このコードでは、しかし、それが失敗したを送って、30秒待って、受信して最初のメッセージを処理しますコードを作成し、2番目のコードを処理します。

スレッド処理のプロセスに慣れていないので、カウントダウンタイマーを処理する新しいスレッドを開始するように設定してメッセージを処理し続けることができます。 ?

現在のテレグラムにアクセスする方法を使用してタイマーを設定する方法がない場合は、もっとスマートな方法はありますか?

答えて

0

まだPython-Telegram-Botで作業していませんが、Pythonでタイマーを使用していることを知っているのはschedです。あなたのPythonコードにタイマー機能を利用できます。あなたのアプリではmultithreadingがより意味をなさないので、threading.Timerクラスを探すことができます。

+0

私は定義したメソッドを実行するために30分の待機時間でthreading.Timer()を追加しようとしましたが、スクリプトを実行したときに30秒待たずに済みました。新しいメソッドに直接スキップして、次のメッセージに移動しました。 コードされた: "T = threading.Timer(30.0、CHECK_STATUS) t.Start" は私が間違ってやっていた何かがありますか?あなたが入れた –

+0

コードは、30秒間だけ待機します。異なる回数でテストします。あなたが30分待つことを望むなら、それは1800 secxでしょう –

関連する問題