问题描述
我需要开始向 TG 组发送通知,在此之前我想连续运行一个函数,该函数将查询 API 并将数据存储在数据库中。在此功能运行时,如果通知在数据库中可用,我希望能够发送通知:
这是我的代码:
import telegram
from telegram.ext import Updater,CommandHandler,JobQueue
token = "tokenno:token"
bot = telegram.Bot(token=token)
def start(update,context):
context.bot.send_message(chat_id=update.message.chat_id,text="You will Now receive msgs!")
def callback_minute(context):
chat_id = context.job.context
# Check in DB and send if new msgs exist
send_msgs_tg(context,chat_id)
def callback_msgs():
fetch_msgs()
def main():
JobQueue.run_repeating(callback_msgs,interval=5,first=1,context=None)
updater = Updater(token,use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start",start,pass_job_queue=True))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
这段代码给了我错误: 类型错误:run_repeating() 缺少 1 个必需的位置参数:'回调'
任何帮助将不胜感激
解决方法
您的代码存在一些问题,让我尝试指出:
1.
def callback_msgs(): fetch_msgs()
您使用 callback_msgs
作为您工作的回调。但是作业回调只接受一个 telegram.ext.CallbackContext
类型的参数。
-
JobQueue.run_repeating(callback_msgs,interval=5,first=1,context=None)
JobQueue
是一个类。要使用run_repeating
,这是一个实例方法,您需要该类的一个实例。事实上,Updater
已经为您构建了一个实例,在您的情况下它可以作为updater.job_queue
使用。所以调用应该是这样的:updater.job_queue.run_repating(callback_msgs,context=None)
-
CommandHandler("start",start,pass_job_queue=True)
严格来说这不是问题,bot
pass_job_queue=True
根本没有效果,因为您使用了use_context=True
请注意,ptb-wiki 上有关于 JobQueue
的精彩教程。还有一个关于如何使用它的example。
免责声明:我目前是 python-telegram-bot