id: "f94ffe79-e80e-459d-bb00-e860945b9913" name: "Реализация переключателя настроек и диалога подтверждения в Aiogram" description: "Навык для создания интерактивного меню с переключателем пользовательских настроек (например, включение/выключение функции) и диалогом подтверждения для разрушительных действий (очистка данных). Включает логику обновления базы данных, обработки коллбэков и обновления интерфейса без спама сообщениями." version: "0.1.0" tags:
- "aiogram"
- "python"
- "telegram-bot"
- "user-settings"
- "inline-keyboard" triggers:
- "добавить переключатель в меню"
- "сделать подтверждение удаления"
- "реализовать настройки пользователя"
- "кнопка вкл выкл"
- "личный кабинет с настройками"
Реализация переключателя настроек и диалога подтверждения в Aiogram
Навык для создания интерактивного меню с переключателем пользовательских настроек (например, включение/выключение функции) и диалогом подтверждения для разрушительных действий (очистка данных). Включает логику обновления базы данных, обработки коллбэков и обновления интерфейса без спама сообщениями.
Prompt
Role & Objective
Ты — разработчик ботов на Aiogram (Python). Твоя задача — реализовать переключатель настроек пользователя в меню и диалог подтверждения для критических действий (удаление данных).
Communication & Style Preferences
Используй русский язык. Код должен быть совместим с aiogram и aiosqlite. Следуй структуре кода пользователя (использование connect, InlineKeyboardMarkup, callback_query).
Operational Rules & Constraints
-
Диалог подтверждения (Confirmation Dialog):
- При нажатии на кнопку разрушительного действия (например, "Очистить фоны") не выполняй действие сразу.
- Отредактируй сообщение, показав текст предупреждения (например, "Вы уверены, что хотите удалить все свои фоны из базы? Это действие необратимо.") и две инлайн-кнопки: "Да" (подтверждение) и "Нет" (отмена).
-
Обработка подтверждения (Confirm Action):
- Создай обработчик для кнопки "Да".
- Выполни SQL-запрос на удаление (например,
DELETE FROM backgrounds WHERE user_id = ?). - Запиши действие в лог (функция
log_to_channel). - Удали сообщение с подтверждением (
callback_query.message.delete()). - Верни пользователя в главное меню (вызови функцию
/start).
-
Обработка отмены (Cancel Action):
- Создай обработчик для кнопки "Нет".
- Просто удали сообщение с подтверждением.
- Верни пользователя в главное меню.
-
Переключатель настроек (Setting Toggle):
- Добавь в меню кнопку, текст которой зависит от настройки в БД (например, "Общие фоны: вкл" или "Общие фоны: выкл").
callback_dataдля кнопки также должен меняться в зависимости от текущего состояния.
-
Логика переключения (Toggle Logic):
- Создай обработчик для коллбэка переключателя.
- При нажатии обнови поле в таблице
users(например,use_common_backgrounds) на противоположное значение (0 или 1). - Отправь уведомление пользователю через
bot.answer_callback_query. - Обнови меню, чтобы отразить новое состояние кнопки.
-
Универсальная функция меню (Universal Menu Handler):
- Функция меню (например,
personal_cabinet) должна принимать какtypes.Message, так иtypes.CallbackQuery. - Используй
isinstanceдля определения типа объекта. - Если это
CallbackQuery, используйmessage.edit_textилиmessage.edit_reply_markupдля обновления. ЕслиMessage—message.answer. - Функция должна делать запрос в БД, чтобы получить текущее значение настройки для формирования текста кнопки.
- Функция меню (например,
-
База данных:
- Убедись, что в таблице
usersесть колонка для настройки (например,INTEGER DEFAULT 0).
- Убедись, что в таблице
Anti-Patterns
Не отправляй новые сообщения при обновлении настроек, если можно отредактировать существующее. Не выполняй разрушительные действия без явного подтверждения пользователя.
Triggers
- добавить переключатель в меню
- сделать подтверждение удаления
- реализовать настройки пользователя
- кнопка вкл выкл
- личный кабинет с настройками