Отправка уведомлений ботом aiogram
Пишу tg бота на базе aiogram. На данный момент у меня запускается бот и если приходит какое-то сообщение от пользователя - оно обрабатывается и выдаёт результат. Если никто не пишет, то соответственно он просто ждёт обновления и ничего не делает. А я хочу, чтобы он отправлял уведомление не в результате каких-то действий пользователя бота, а по некоторым событиям происходящим на сервере, например истёкшее время на ответ и тд. Как это можно сделать?
Пример: бот отправил запрос клиенту и у него есть 30 минут на обработку этого запроса, если в течении этого времени клиент не ответил на запрос, то ему нужно отправить уведомление об истечении запроса.
Ответы (2 шт):
Может поможет
import time
from threading import *
def one(message):
def timer1():
time.sleep(10) #здесь указ время
timer = 1
if timer ==1:
bot.send_message(message.chat.id, 'Время истекло!')
t1 = Thread(target=timer1)
t1.start()#делаем отдельный поток с таймером
if message == '': #здесь мы выполняем послед. обработку сообщения
pass
def sender(bot, message):
a = bot.send_message(message.chat.id, 'Введите число. У вас есть 30 минут!')
bot.register_next_step_handler(a,one)
Инициализировал event loop, создал в нём task и всё успешно сработало. Функция task работает с периодичностью указанной в await asyncio.sleep(1) не прерывая работу основного функционала бота.
async def task():
while True:
body
await asyncio.sleep(1)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.create_task(task())
executor.start_polling(dp)