Задать вопрос
@Shpongoltz

Телеграм бот. Библиотека aiogram. Как построить многоуровневую ReplyKeyboardMarkup клавиатуру?

Изучаю возможности библиотеки aiogram и столкнулся с кромешным непониманием, как реализовать многоуровневую именно ReplyKeyboardMarkup клавиатуру.
Под многоуровневым я подразумеваю клавиатуру с кнопками, по нажатию которых тебе открывает новые клавиатуры с кнопками и так вглубь, и САМОЕ ГЛАВНОЕ, чтобы нельзя было с любого участка в телеграм боте ввести название определенной кнопки, находящейся в глубине и перейти в неё, пропустив львиную долю переходов на пути к ней.

Надеюсь сформулировал крайне понятно.
Голову ломал с callbacka’ми. Принцип понятен, но как я заметил, применим только к Inline кнопкам.

Перерыл все источники. Есть предположения, что states реализует мою задачу, однако так ли это?

Пишу бот, в котором нужно при входе, после команды старт, ввести свой пароль и затем уже переходить многоуровнево по клавиатурам.
Цель вижу, а на деле реализуется так, что с момента запроса ботом моего пароля, я могу ввести название какой-нибудь внутренней кнопки и проникну внутрь, не вводя пароль.

Как это решить? Как побороть кейс, скажем так?
Сам пример кода скидывать смысла не вижу.
Надеюсь, словами удалось вам сформировать представление.
За искомый мне ответ, крайне сильно жму руку человеку по другую сторону экрана.
  • Вопрос задан
  • 396 просмотров
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
nki
@nki
bezkart.ru готовая система лояльности
Пишу бот, в котором нужно при входе, после команды старт, ввести свой пароль и затем уже переходить многоуровнево по клавиатурам.

А смысл? Сделайте привязку по tgid кому есть доступ к внутреннему функционалу, а кому нет.
Ответ написан
Комментировать
@twistfire92
Python backend developer
Да, такую задачу (а именно чтобы нельзя было с любого участка в телеграм боте ввести название определенной кнопки) можно реализовать используя state из возможностей FSM в aiogram. Под каждый раздел меню устанавливать соответствующее состояние (state) для пользователя. И если пользователь введет название кнопки не относящееся к текущему состоянию, не реагировать. Но это чревато тем, что если где-то будет какая-то ошибка в логике установки состояний, пользователь окажется в ситуации, когда нажимает на кнопку, а бот не реагирует. Возможно поможет начать все сначала через /start, но это совсем не user friendly.

Но лично мое мнение - удобнее делать многоуровневую Inline клавиатуру. И выглядит она красивее.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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