From 755e364d428ed11812dc9d3ef62e173f3b791583 Mon Sep 17 00:00:00 2001 From: Kenik Date: Wed, 24 Jun 2026 18:50:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BD=D0=BE=D0=BF=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=83=D1=81=D0=BB=D1=83=D0=B3=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?=20(+=D1=81=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=B0=D1=80=D1=82?= =?UTF-8?q?=D0=B8=D0=BD=D0=BE=D0=BA)=20=D0=B8=20=D0=B1=D1=8B=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=8B=D0=BC=D0=B8=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Приём фото-вложений от админа (handle_message получает attachments). - Раздел «Услуги»: кнопки Добавить / Изменить / Удалить / Сменить картинку. Картинка скачивается, обрезается под 13:8 (650×400) и сохраняется как service_.jpg; карусель берёт её приоритетно. Мастера на состояниях ADMIN_*. - Раздел «Быстрые ответы»: кнопки Добавить / Изменить / Удалить с выбором. - Контекст мастеров в памяти (_admin_ctx), отмена из любого шага. Заметка: CRUD «Карьеры» (направления игроков/должности) — отдельным заходом, т.к. опции там пока захардкожены и требуют перевода на БД. Co-Authored-By: Claude Opus 4.8 --- bot.py | 331 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 306 insertions(+), 25 deletions(-) diff --git a/bot.py b/bot.py index 8b075bc..5c17905 100644 --- a/bot.py +++ b/bot.py @@ -123,6 +123,54 @@ def get_admin_keyboard(is_super: bool = False) -> str: return keyboard.get_keyboard() +def get_svc_admin_keyboard() -> str: + """Клавиатура раздела управления услугами (направлениями).""" + keyboard = VkKeyboard(one_time=False) + keyboard.add_button("➕ Добавить услугу", color=VkKeyboardColor.POSITIVE) + keyboard.add_line() + keyboard.add_button("✏️ Изменить услугу", color=VkKeyboardColor.SECONDARY) + keyboard.add_button("🖼 Сменить картинку", color=VkKeyboardColor.SECONDARY) + keyboard.add_line() + keyboard.add_button("🗑 Удалить услугу", color=VkKeyboardColor.NEGATIVE) + keyboard.add_line() + keyboard.add_button("В админку ↩️", color=VkKeyboardColor.PRIMARY) + return keyboard.get_keyboard() + + +def get_faq_admin_keyboard() -> str: + """Клавиатура раздела управления быстрыми ответами.""" + keyboard = VkKeyboard(one_time=False) + keyboard.add_button("➕ Добавить ответ", color=VkKeyboardColor.POSITIVE) + keyboard.add_line() + keyboard.add_button("✏️ Изменить ответ", color=VkKeyboardColor.SECONDARY) + keyboard.add_button("🗑 Удалить ответ", color=VkKeyboardColor.NEGATIVE) + keyboard.add_line() + keyboard.add_button("В админку ↩️", color=VkKeyboardColor.PRIMARY) + return keyboard.get_keyboard() + + +def get_pick_keyboard(items: list) -> str: + """Клавиатура выбора из списка пар (id, label). Кнопка отправляет '.