Задать вопрос
@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()
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Не уверен, что у тебя за либа, но читай про state machine. Эта фишка есть во многих библиотеках для создания ботов.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы