Для запуска функции из библиотеки aiogram вам необходимо использовать объект класса `Dispatcher`, который обеспечивает маршрутизацию сообщений.
В вашем случае, вам необходимо добавить декоратор `message_handler` к функции `days_message` и зарегистрировать ее с помощью `dp.register_message_handler()`. Это позволит обработчику сообщений отслеживать все входящие сообщения и вызывать функцию `days_message`, когда нужно.
Обновленный код будет выглядеть примерно так:
```python
from aiogram import Bot, Dispatcher, executor, types
import asyncio
from datetime import datetime
bot = Bot(TOKEN)
dp = Dispatcher(bot)
...
@dp.message_handler(commands=['start'])
async def send_message(message: types.Message):
...
await bot.send_photo(chat_id, photo=photo, caption=f'Эта функция работает')
@dp.message_handler()
async def days_message(message: types.Message):
while True:
await asyncio.sleep(1)
now = datetime.now()
current_date = now.strftime("%Y-%m-%d")
current_time = now.strftime("%H:%M:%S")
if current_date == '2023-08-30' and current_time == '11:56:39':
await message.answer('Работает')
else:
print("Время прошло")
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
```
Теперь функция `days_message` будет вызываться каждый раз при получении любого сообщения, и если текущая дата и время совпадают с заданными, будет отправлено сообщение 'Работает'.
Вашу функцию нужно зарегистрировать в обработчике событий (dp) аналогично функции send_messages:
@dp.message_handler(commands=['start'])
async def start_message(message: types.Message):
...
Для того, чтобы функция вызывалась по команде /start, вы можете использовать следующий код:
@dp.message_handler(commands=['start'])
async def start_message(message: types.Message):
async def task():
while True:
await asyncio.sleep(300) # Задержка в 5 минут
await message.answer('Ваше сообщение') # Замените 'Ваше сообщение' на то, что вам нужно отправлять
asyncio.create_task(task())
Однако, есть некоторые проблемы в вашем коде, которые не позволят обработать последующие обновления бота. Это происходит из-за бесконечного цикла. Чтобы исправить это, можно запустить код в отдельной корутине:
from aiogram import types
from datetime import datetime
import asyncio
async def task():
while True:
await asyncio.sleep(1)
now = datetime.now()
current_date = now.strftime("%Y-%m-%d")
current_time = now.strftime("%H:%M:%S")
if current_date == '2023-08-30' and current_time == '11:56:39':
await message.answer('Работает')
else:
print("Время прошло")
@dp.message_handler(commands=['start'])
async def start_message(message: types.Message):
asyncio.create_task(task())
Рекомендуется использовать модули aiojobs или aioscheduler для выполнения таких действий.