@akhmedov_911

Не могу запустить функцию библиотека aiogram?

Первая функция работает на команду старт, но второй должен отправлять сообщение по дате оно не работает

@dp.message_handler(commands=['start'])
async def send_message(message: types.Message):
markup = InlineKeyboardMarkup(row_width=4)
item1 = InlineKeyboardButton("QO’LLAB QUVVATLASH MARKAZI", callback_data='1', url='https://t.me/TuychiyevaM')
markup.add(item1)

markup2 = InlineKeyboardMarkup(row_width=4)
item2 = InlineKeyboardButton("Kotlovan narxida kursni sotib olish ", callback_data='1',
url='https://t.me/TuychiyevaM')
markup2.add(item2)

chat_id = message.from_user.id
print(message)
first_name = message.from_user.first_name
print(first_name)
photo = open('images/start_photo.jpg', 'rb')
await bot.send_photo(chat_id, photo=photo, caption=f'Это функция работает'

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("Время прoшло")

if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваша функция не зарегистрирована в обработчике (dp)
Сделать это можно аналогично функции send_messages:
@dp.message_handler(commands=['days'])
async def days_message(message: types.Message):
    ...

В этом варианте функция будет вызываться по команде /days

Однако в вашем коде бесконечный цикл, который остановит обработку последующих обновлений бота, то есть последующие сообщения обрабатываться не будут. Чтобы это исправить, можно запустить основной код в отдельной корутине, это можно сделать так:
@dp.message_handler(commands=['days'])
async def days_message(message: types.Message):
    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("Время прoшло")
    asyncio.create_task(task())


Но лучше для таких действий смотреть в сторону aiojobs или форка aioscheduler

Возможно, предложенное мною решение, не то, что вам нужно? Если так, опишите, что вы ожидаете от вашей функции
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы