@antomin39
Жертва GeekBrains

Как в хендлер инлайн кнопки добавить значение, которое введёт пользователь?

Друзья, помогите с первым ботом! Такая задачка: бот выдаёт список записей из бд. Под каждой записью кнопка сменить ID и удалить запись. С удалением как-то всё просто, а вот с редактированием не могу разобраться из-за нехватки знаний.
Кусок кода:
# Редактирование ID:
@dp.callback_query_handler(lambda callback: callback.data and callback.data.startswith('edit_id_'))
async def edit_callback_run(callback: types.CallbackQuery):
    client_id = int(callback.data.replace('edit_id_', ''))

    @dp.message_handler(lambda message: message.isDigit())
    async def get_new_id(message):
        print(message)


# Удаление анкеты
@dp.callback_query_handler(lambda callback: callback.data and callback.data.startswith('del_'))
async def del_callback_run(callback: types.CallbackQuery):
    client_id = int(callback.data.replace('del_', ''))
    await sqlite_db.sql_delete(client_id)
    await callback.answer(text=f'Анкета {client_id} удалена.', show_alert=True)


# Список анкет
@dp.message_handler(lambda message: 'Список' in message.text)
async def show_list(message: types.Message):
    if message.from_user.id not in ADMINS_ID:
        await message.reply('У Вас нет доступа.')
        return
    for client in await sqlite_db.sql_read():
        await message.answer(
            text=f'ID: {client[0]}\nURL: {client[1]}\nКол-во человек: {client[2]}\nГород: {client[3]}\nДаты: {parse_date_to_str(client[4])} - {parse_date_to_str(client[5])}\nЗаметка: {client[6]}',
            reply_markup=InlineKeyboardMarkup().row(
                InlineKeyboardButton('Сменить ID', callback_data=f'edit_id_{client[0]}'),
                InlineKeyboardButton('Удалить', callback_data=f'del_{client[0]}')
            )
        )


Внешне это хотелось бы видеть так:
62f8bbeb99345232110101.png

Т.е. Видет анкету, нажимаем смена ID, в поле ввода вводим новый ID, потом Enter и все счастливы.

Но ещё хотелось бы учесть, что в самом низу у меня ловятся всё неизвестное таким образом:
# Неизвестные команды
@dp.message_handler()
async def echo_send(message: types.Message):
    await message.answer('Неизвестная команда.')
    await message.delete()
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
Не уверен, что у тебя за либа, но читай про state machine. Эта фишка есть во многих библиотеках для создания ботов.
Ответ написан
Ваш ответ на вопрос

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

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