Как отвечать на сообщение в боте Telegram через 24 часа после его получения (используя aiogram 2.5.2)?

Как сделать так, чтобы бот отправлял сообщения пользователю через определенные временные интервалы после нажатия на кнопку? Используется ли `await asyncio.sleep()` для задержки времени, но как его использовать для интервалов длительностью более одной секунды? Спасибо!
  • 17 ноября 2023 г. 17:59
Ответы на вопрос 3
Для ответа на сообщение через 24 часа вы можете использовать модуль `asyncio` для задержки времени. Вам также понадобится модуль `datetime` для работы с датами и временем.

Вот пример кода, который демонстрирует, как отвечать на сообщение через 24 часа:

```python
import asyncio
from datetime import datetime, timedelta
from aiogram import Bot, Dispatcher, types

API_TOKEN = 'ваш_токен'
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)


@dp.message_handler()
async def echo(message: types.Message):
    await asyncio.sleep(24 * 60 * 60)  # задержка на 24 часа
    await message.answer('Прошло 24 часа!')


if __name__ == '__main__':
    dp.run_polling()
```

Чтобы отправлять сообщения пользователю через определенные временные интервалы после нажатия на кнопку, вам также пригодится модуль `asyncio`. Вы можете использовать функцию `asyncio.sleep()` для создания задержки между отправкой сообщений.

Вот пример кода, который показывает, как отправлять сообщения каждые 5 секунд после нажатия на кнопку:

```python
import asyncio
from aiogram import Bot, Dispatcher, types

API_TOKEN = 'ваш_токен'
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)


@dp.message_handler(content_types=types.ContentTypes.TEXT)
async def handle_start(message: types.Message):
    if message.text == '/start':
        await message.answer('Нажмите на кнопку, чтобы начать отправку сообщений с интервалом в 5 секунд!',
                             reply_markup=types.ReplyKeyboardRemove())
    else:
        await message.answer('Чтобы начать, напишите /start.')


@dp.message_handler(content_types=types.ContentTypes.TEXT, text='Начать отправку')
async def handle_interval_start(message: types.Message):
    await message.answer('Отправка сообщений началась!')
    for i in range(10):
        await asyncio.sleep(5)  # задержка на 5 секунд
        await message.answer(f'Сообщение {i+1}')


if __name__ == '__main__':
    dp.run_polling()
```

В приведенном выше примере после нажатия кнопки "Начать отправку" бот будет отправлять сообщения каждые 5 секунд. Вы можете изменить время задержки, заменив значение `5` на любое другое целое число, представляющее количество секунд задержки.
Ты правильно придумал, без использования функции "sleep" эта задача не решится. Вот псевдокод, который выполняет то же самое: 

1. Отправить сообщение 1: bot.sendMessage('Message 1');
2. Подождать один день (86400 секунд): sleep(60*60*24);
3. Отправить сообщение 2: bot.sendMessage('Message 2');
4. Подождать еще один день: sleep(60*60*24);
5. Отправить сообщение 3: bot.sendMessage('Message 3');

Не благодари.
Ты все правильно придумал, без sleep здесь никак не обойтись, сделай так: bot.sendMessage('Message 1'); //ждем день (86400 секунд) sleep(60*60*24); bot.sendMessage('Message 2'); //ждем еще день sleep(60*60*24); bot.sendMessage('Message 3');Не благодари.
Похожие вопросы