Asynchronous context.job_queue.run_once不在Python电报机器人API中工作
这几天我就被这个电报机器人缠住了。我正在尝试设置一个机器人,它:Asynchronous context.job_queue.run_once不在Python电报机器人API中工作,asynchronous,telegram,telegram-bot,python-telegram-bot,Asynchronous,Telegram,Telegram Bot,Python Telegram Bot,这几天我就被这个电报机器人缠住了。我正在尝试设置一个机器人,它: 从TG组接收/search\u msgs userkey命令中的关键字 在数据库中搜索该userkey,并发回相应的文本 我有两个错误 无类型对象没有属性参数,在回调\u搜索\u msgs(上下文)中,请参阅代码段 AttributeError:“int”对象没有“job\u queue”属性,在search\u msgs(更新,上下文)中,请参阅代码段 电报的官方文件对我来说太难阅读和理解了。找不到更新程序、更新、Command
/search\u msgs userkey
命令中的关键字userkey
,并发回相应的文本回调\u搜索\u msgs(上下文)
中,请参阅代码段在search\u msgs(更新,上下文)
中,请参阅代码段import telegram
from telegram.ext import Updater,CommandHandler, JobQueue
token = "Token"
bot = telegram.Bot(token=token)
# Search specific msgs on user request
def search_msgs(update, context):
context.job_queue.run_once(callback_search_msgs, context=update.message.chat_id)
def callback_search_msgs(context):
print('In TG, args', context.args)
chat_id = context.job.context
search_msgs(context, chat_id)
def main():
updater = Updater(token, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("search_msgs",search_msgs, pass_job_queue=True,
pass_user_data=True))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
让我先尝试澄清一些问题: 电报的官方文件对我来说太难阅读和理解了。找不到更新程序、更新、Commandhandler和上下文都与示例一起解释的地方 我猜你所说的“电报官方文件”是指。然而,
Updater
、CommandHandler
和context
是python电报bot
的概念,它是为bot api提供包装器的众多python库之一python电报bot
提供了一个,其中对许多特性进行了解释和说明
现在转到您的代码:
context.job\u queue.run\u一次(callback\u search\u msgs,context=update.message.chat\u id)
您没有告诉job\u queue
何时运行作业。必须将整数或datetime.(date)time
对象作为第二个参数传递
def callback_search_msgs(context):
print('In TG, args', context.args)
chat_id = context.job.context
search_msgs(context, chat_id)
您正在将context
和chat\u id
传递给search\u msgs
。但是,该函数将context
视为telegram.ext.CallbackContext
的一个实例,而您将传递一个整数。而且,即使这样做有效,也只会在无限循环中安排另一个作业
def search_msgs(update, context):
userkey = context.args[0]
result = look_up_key_in_db(userkey)
# this assumes that result is a string:
update.effective_message.reply_text(result)
要更好地理解context.args
,请看一下这个
免责声明:我目前是
python电报bot
的维护者