2017-11-06 12 views
0

私はこれについて混乱していますjob queue事。コールバック関数では、ユーザーのメッセージにアクセスして作業したいと思いますが、記事では、コールバックではボットとジョブのパラメータのみを受け付けます。手元の人はupdate.message.textにアクセスできません。例えば、次の関数をコールバックとして書き直したいと思います。ジョブキューの電文ボットのコールバック機能を書くには?

def echo(bot,update): 
    if tldextract.extract(update.message.text).registered_domain: 
     bot.send_message(chat_id= update.message.chat_id, text="OK") 

私はここで何が欠けていますか?

答えて

0

あなたが仕事を作成するときに、コンテキストを渡す必要があります。

あなたがページの下部付近例hereから読み取ることができます:あなたはrun_onceを使用する場合

>>> from telegram.ext import CommandHandler 
>>> def callback_alarm(bot, job): 
...  bot.send_message(chat_id=job.context, text='BEEP') 
... 
>>> def callback_timer(bot, update, job_queue): 
...  bot.send_message(chat_id=update.message.chat_id, 
...      text='Setting a timer for 1 minute!') 
... 
...  job_queue.run_once(callback_alarm, 60, context=update.message.chat_id) 
... 
>>> timer_handler = CommandHandler('timer', callback_timer, pass_job_queue=True) 
>>> u.dispatcher.add_handler(timer_handler) 

はあなたが仕事のcontextに(電報オブジェクト、リスト/ dicts、などを含む)何かを渡すことができ、 run_dailyおよびrun_repeating機能。あなたのコールバック関数では、あなたが言ったように2つのパラメータ、botjobを渡す必要がありますし、job.contextにアクセスして必要なデータを取得します。

+0

この例では、chat_idが渡されます。どのように複数のアイテムを渡すことができますか? – lameei

+1

あなたは、更新の全体、例えば 'context = update'や作成したdictなど、何かを渡すことができます:' context = {"chat_id":update.message.chat_id、 "text":update.message.text、 "custom_stuff ":"他のテキスト "}'や実際に渡したいものは、通常のPython変数として扱います。 それから、コールバック関数で 'update = job.context'、' stuff = job.context ["custom_stuff"] 'などで取得できます。 – jeffffc

関連する問題