0

Telegram ボットの API にアクセスするスクリプトがありますが、残念ながら一度に 1 つのメッセージしか処理できません。

私の最終目標は、誰かがゲームを開始したときにタイマー スレッドを開始し、一定時間後 (まだゲームに勝っていない場合) にゲームをリセットして、グループ内の別のユーザーがゲームをプレイできないようにすることです。 (混乱を避けるために、一度に 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 番目のメッセージを処理します。

私はスレッド化のプロセスにあまり慣れていないので、カウントダウンタイマーを処理する新しいスレッドを開始してメッセージを処理し続けることができるように設定する方法はありますか、それともすべて失われた原因ですか?

電報 API にアクセスする現在の方法を使用してタイマーを設定する方法がない場合、よりスマートな方法は何でしょうか?

4

1 に答える 1