Не работают инлайн кнопки бота в запланированном сообщении

пишу телеграм бота на aiogram:

async def some_func():
    err = InlineKeyboardMarkup(row_width=2)
    btn_1 = InlineKeyboardButton(text='open_1', callback_data='number_1')
    btn_2 = InlineKeyboardButton(text='open_2', callback_data='number_2')
    err.add(btn_1, btn_2)
    await bot.send_message(chat_id=CHAT_ID, text='choose:', reply_markup=err)

есть хэндлер сообщений:

@dp.callback_query_handler(text_startswith=['number_'])
async def number(callback_query: types.CallbackQuery)
    variant = callback_query.data.split("_")
    if variant[1] == 1:
        await bot.send_message(chat_id=CHAT_ID, text='number_1'
    else:
        await bot.send_message(chat_id=CHAT_ID, text='number_2'

функция запускается по расписанию:

async def scheduler():
    aioschedule.every().day.at("20:39").do(some_func)
    while True:
        await aioschedule.run_pending()
        await asyncio.sleep(1)


async def on_startup(_):
    await asyncio.create_task(scheduler())


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True, on_startup=on_startup)

почему не происходит перехват callback_data? что не так я делаю?


Ответы (1 шт):

Автор решения: Andrey

Попробуйте так:

@dp.callback_query_handler(text_startswith=['number_'])
async def number(callback_query: types.CallbackQuery):
    variant = callback_query.data.split("_")
    if variant[1] == '1':
        await bot.send_message(chat_id=CHAT_ID, text='number_1')
    else:
        await bot.send_message(chat_id=CHAT_ID, text='number_2')

Исправления:

  1. Добавлена закрывающая скобка после аргумента text в вызове bot.send_message.
  2. Добавлены кавычки вокруг значения '1' в условии if variant[1] == '1':, чтобы сравнение выполнялось с правильным типом данных.

Просто будьте внимательнее и проверяйте код)

→ Ссылка