Для выполнения задачи с созданием бота на Aiogram с функционалом напоминаний о событиях для пользователей, отправляемых за день и за три дня до наступления события, я бы рекомендовал использовать Celery в связке с Redis как брокером сообщений.
Celery - это фреймворк для асинхронной обработки задач в Python. Он позволяет выполнять задачи в фоновом режиме, не блокируя основной поток выполнения программы. Redis, в свою очередь, будет использоваться как брокер сообщений для Celery - он будет отвечать за передачу сообщений между приложениями.
Пример кода для использования Celery с Redis:
1. Установить необходимые библиотеки:
```
pip install celery redis
```
2. Создать файл celery_tasks.py с задачей напоминания:
```python
from celery import Celery
import redis
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def send_reminder(user_id, message):
# Отправить сообщение пользователю
pass
```
3. В основном файле приложения main.py создать бота на Aiogram и вызвать задачу send_reminder в нужный момент:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
from celery_tasks import send_reminder
bot = Bot(token='TOKEN')
dp = Dispatcher(bot)
@dp.message_handler(commands=['set_reminder'])
async def set_reminder(message: types.Message):
user_id = message.from_user.id
message = "Напоминание о событии"
# Отправить сообщение за день до события
send_reminder.apply_async(args=[user_id, message], countdown=86400)
# Отправить сообщение за три дня до события
send_reminder.apply_async(args=[user_id, message], countdown=259200)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
```
4. Запустить Celery в отдельном терминале:
```
celery -A celery_tasks worker --loglevel=info
```
Таким образом, Celery будет выполнять задачу send_reminder асинхронно в фоновом режиме, а Redis будет использоваться для передачи сообщений между приложениями.