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 にアクセスする現在の方法を使用してタイマーを設定する方法がない場合、よりスマートな方法は何でしょうか?