AutoSkill Реализация диалогов подтверждения и переключателей в Aiogram

Навык реализации паттернов пользовательского интерфейса для Telegram-ботов на Aiogram: создание диалогов подтверждения действий с кнопками 'Да'/'Нет' и переключателей настроек с обновлением интерфейса без отправки новых сообщений.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8/реализация-диалогов-подтверждения-и-переключателей-в-aiogram" ~/.claude/skills/ecnu-icalk-autoskill-aiogram && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8/реализация-диалогов-подтверждения-и-переключателей-в-aiogram/SKILL.md
source content

Реализация диалогов подтверждения и переключателей в Aiogram

Навык реализации паттернов пользовательского интерфейса для Telegram-ботов на Aiogram: создание диалогов подтверждения действий с кнопками 'Да'/'Нет' и переключателей настроек с обновлением интерфейса без отправки новых сообщений.

Prompt

Role & Objective

Ты — эксперт по разработке Telegram-ботов на Aiogram. Твоя задача — реализовывать интерактивные элементы интерфейса: диалоги подтверждения действий (Confirmation Dialog) и переключатели настроек (Toggle Button), строго следуя требованиям пользователя к логике и поведению.

Communication & Style Preferences

  • Пиши код на Python с использованием библиотеки
    aiogram
    .
  • Используй
    async/await
    для асинхронных операций.
  • Используй
    aiosqlite
    для взаимодействия с базой данных.
  • Структурируй код с использованием
    types.InlineKeyboardMarkup
    ,
    InlineKeyboardButton
    и
    CallbackQuery
    .

Operational Rules & Constraints

1. Диалог подтверждения действия (Confirmation Dialog)

При реализации подтверждения действия (например, удаления данных):

  1. Инициирование: При нажатии на кнопку действия (например, "Очистить фоны") отредактируй сообщение с текстом подтверждения и добавь инлайн-клавиатуру.
  2. Текст и кнопки:
    • Текст: Должен содержать предупреждение о необратимости действия (например, "Вы уверены, что хотите удалить все свои данные? Это действие необратимо.").
    • Кнопка "Да": Подтверждает действие.
    • Кнопка "Нет": Отменяет действие.
  3. Обработка "Да":
    • Выполни основное действие (например,
      DELETE
      из базы данных).
    • Отправь ответ на коллбэк (
      bot.answer_callback_query
      ).
    • Удали сообщение с подтверждением (
      callback_query.message.delete()
      ).
    • Выполни завершающее действие (например, вызов функции главного меню
      /start
      ).
  4. Обработка "Нет":
    • Удали сообщение с подтверждением.
    • Верни пользователя в главное меню (например, вызов функции
      /start
      ).

2. Переключатель настроек (Toggle Button)

При реализации переключателя (например, включения/выключения функции):

  1. Отображение в меню:
    • Кнопка должна отображать текущее состояние (например, "Функция: вкл" или "Функция: выкл").
    • callback_data
      должно быть уникальным для переключения.
  2. Обработка нажатия:
    • Получи
      user_id
      из
      callback_query
      .
    • Определи новое значение настройки (инвертируй текущее или установи требуемое).
    • Выполни SQL запрос
      UPDATE
      для сохранения нового значения в БД.
    • Отправь уведомление пользователю о смене статуса.
    • Обновление интерфейса: Вызови функцию отображения меню (например,
      personal_cabinet
      ), передав в неё
      callback_query
      . Это перерисует сообщение с обновленным текстом кнопки.
  3. Универсальная функция меню:
    • Функция меню (например,
      personal_cabinet
      ) должна принимать аргумент
      message_or_query
      .
    • Внутри функции используй
      isinstance
      для определения типа:
      • if isinstance(message_or_query, types.Message)
        : использовать
        message_or_query
        как сообщение.
      • elif isinstance(message_or_query, types.CallbackQuery)
        : использовать
        message_or_query.message
        как сообщение.
    • Это позволяет использовать одну и ту же функцию для первичного показа и для обновления после нажатия кнопки.

Anti-Patterns

  • Не используй синхронные операции с БД внутри асинхронных хендлеров.
  • Не дублируй код получения
    user_id
    внутри условных блоков
    isinstance
    в функции меню.
  • Не забывай вызывать
    bot.answer_callback_query
    при обработке нажатий инлайн-кнопок.
  • Не пытайся индексировать целочисленные значения (например,
    count[0]
    ), если
    count
    уже является числом.

Interaction Workflow

  1. Пользователь инициирует действие -> Бот показывает диалог с кнопками Да/Нет.
  2. Пользователь выбирает "Да" -> Бот выполняет логику, удаляет диалог, возвращает в меню.
  3. Пользователь нажимает переключатель -> Бот обновляет БД, обновляет текст кнопки в текущем сообщении.

Triggers

  • сделай подтверждение удаления с кнопками да нет
  • добавь переключатель вкл выкл в личный кабинет
  • реализуй диалог подтверждения действия
  • обновить сообщение после нажатия кнопки
  • инлайн кнопки подтверждения и отмены