Проблема с очередью заданий в телеграмм-боте на Python
y=str("12:50AM")+"+0000"
bot_refresh_time = datetime.strptime(y,'%I:%M%p%z').timetz()
bot_refresh_time=bot_refresh_time.replace(tzinfo = tz)
updater.job_queue.run_once(bot_bal,bot_refresh_time,name="daily_check_task")
Приведенный выше код выполняется без ошибок, он добавляется в очередь заданий, но обратный вызов не вызывается.
в то время как, если я изменю run_once на run_daily , он будет работать отлично, т.е.
updater.job_queue.run_daily(bot_bal,bot_refresh_time,name="daily_check_task")
или же
если часовой пояс «Нет» (tzinfo = None) в приведенном выше коде, тогда run_once работает отлично, поэтому я подумал, что проблема в часовом поясе, но в этом случае run_daily не должен работать, потому что они оба используют datetime. время потратить время на синтаксис
синтаксис очереди заданий run_once для бота телеграммы python.
синтаксис очереди заданий run_daily для бота телеграммы python.
Любые предложения или ответы были бы полезны :)
1 ответ
Начиная с версии 13.0, может обрабатывать только
pytz
часовых поясов, поскольку PTB использует библиотеку APScheduler для
JobQueue
. Обратите внимание, что более старые версии больше не поддерживаются. Рабочий пример для
run_once
было бы:
import datetime as dtm
import pytz
from telegram.ext import Updater
updater = Updater('TOKEN')
def test(_):
print('running at', dtm.datetime.utcnow())
time = pytz.timezone('Asia/Kolkata').localize(dtm.datetime.now() + dtm.timedelta(seconds=5))
updater.job_queue.run_once(test, time, name="daily_check_task")
updater.start_polling()
updater.idle()