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番目のコードを処理します。
スレッド処理のプロセスに慣れていないので、カウントダウンタイマーを処理する新しいスレッドを開始するように設定してメッセージを処理し続けることができます。 ?
現在のテレグラムにアクセスする方法を使用してタイマーを設定する方法がない場合は、もっとスマートな方法はありますか?
私は定義したメソッドを実行するために30分の待機時間でthreading.Timer()を追加しようとしましたが、スクリプトを実行したときに30秒待たずに済みました。新しいメソッドに直接スキップして、次のメッセージに移動しました。 コードされた: "T = threading.Timer(30.0、CHECK_STATUS) t.Start" は私が間違ってやっていた何かがありますか?あなたが入れた –
コードは、30秒間だけ待機します。異なる回数でテストします。あなたが30分待つことを望むなら、それは1800 secxでしょう –