Подриска на уведомления телеграм бота
def covid_in_country():
d = covid.get_status_by_country_name('Ukraine')
inf = str(d.get('confirmed'))+' - подтверждено случеев \n'+str(d.get('active'))+' - активных на данный момент \n'+str(d.get('recovered')) +' - выздоровело\n'+str(d.get('deaths'))+' - умерло\n'+ str(t.ctime(d.get('last_update')/1000))+' - последнее обновление'
return inf
@bot.callback_query_handler(func = lambda call:True)
def callback_inline(call):
if call.data == 'folow':
def interval_timer():
return covid_in_country()
sleep(2)
interval_timer()
bot.send_message(call.from_user.id, interval_timer())
Суть: пользователь нажимает на inline кнопку в телеграмме "Подписаться на уведомления" и ему каждые 2 секунды приходит сообщение.
Проблема: при нажатии сообщение приходи только один раз, а не каждые 2с.
Как исправить?(это фрагмент кода )
Ссылка на бота - http://t.me/CovidInWorldBot (inline кнопка только на Украине)
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Проблемы с текущей функцией описал в комментарии:
def interval_timer():
return covid_in_country() # Тут выход из функции, а значит код ниже не выполнится
sleep(2)
interval_timer() # Из-за рекурсии тут будет ошибка RecursionError: maximum recursion depth exceeded
Попробуйте так:
@bot.callback_query_handler(func = lambda call:True)
def callback_inline(call):
if call.data == 'folow':
while True:
text = covid_in_country()
bot.send_message(call.from_user.id, text)
sleep(2)
Но я не уверен, что в текущем варианте sleep не повесит бота при первом же запросе, или когда их будет много.
Лучше такое сохранять в базе данных и в отдельном потоке проходить по таблице базы и отправлять сообщение тем юзерам, кто подписался