ConversationHandler
を使用するTelegramボットを構築して、ボットの動作に関するいくつかのパラメータと設定をユーザーに促します。この情報は、プログラム内のさまざまな機能によって使用可能であり、編集可能である必要があるため、いくつかのグローバル変数に格納されます。すべてのグローバル変数は、各ユーザーが独自の値に関連付けられている辞書です。ここでの例は次のとおりJobQueueを使用してメッセージを継続的に更新する
123456
と
789012
各関数内
update.message.from_user.id
から得られたユーザIDである
language = {123456: 'English', 789012: 'Italian'}
。
すべての必要な情報を受信して保存した後、ボットはWebページから取得したテキストを含むメッセージを送信する必要があります。 Webページ上のテキストは常に更新されるので、ユーザーがコマンド/stop
を送信するまで、メッセージを60秒ごとに編集して新しいテキストで更新します。
これを達成するために、私の心に来た最初のソリューションは、まったく動作しないでしょう。もちろん、
info_message = bot.sendMessage(update.message.chat_id, text = "This message will be updated...")
...
def update_message(bot, update):
while True:
url = "http://example.com/etc/" + language[update.message.from_user.id]
result = requests.get(url).content
bot.editMessageText(result, chat_id = update.message.chat_id, message_id = info_message.message_id)
time.sleep(60)
のようなものだった、それは本当に悪い考えです。私はJobQueueという拡張子が私の必要とするものであることを知りました。しかし、私は理解できないことがあります。
JobQueueでは、私の仕事のコールバック関数を設定する必要があります。私の場合、関数は
def update_message(bot, job):
url = "http://example.com/etc/" + language[update.message.from_user.id]
result = requests.get(url).content
bot.editMessageText(result, chat_id = update.message.chat_id, message_id = info_message.message_id)
となり、60秒ごとに呼び出されます。しかし、これはどちらもうまくいかないでしょう。実際には、ユーザー設定に従ってページをフェッチし、正しいchat_idにメッセージを送信するために、関数内にupdate
パラメータが必要です。私はbot, job
と一緒に関数にそのパラメータを渡す必要がありますが、それは可能ではないようです。
そうでなければ、update
をグローバル変数にする必要がありますが、より良い解決策が必要だと思いました。何かご意見は?ありがとう。