- .env.example переписан как пошаговый гид: разделы (подключение к сообществу,
кому приходят заявки, почта, ссылки, /favi-stop), пометки «ОБЯЗАТЕЛЬНО»,
правила заполнения (без инлайн-комментариев, числа не оставлять пустыми).
- config: безопасный разбор чисел (_int_env) — пустое/кривое VK_GROUP_ID/порт/часы
больше не роняют бот при старте, откатываются на дефолт. '#' в значениях (URL
#prices) не трогаем.
pytest 43 passed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1) Кнопки меню: раздел «Кнопки меню 🧩» в админке — показать/скрыть любую кнопку
главного меню (Подобрать/Интенсив/Цены/Вопрос/Вебинар). Флаги в БД (bot_flags),
дефолты в config.MENU_FEATURES (вебинар по умолчанию скрыт). Скрытый раздел не
реагирует и на кодовые слова (интенсив выкл → «лето» игнорируется). Вебинар
получил кнопку в меню (для теста ветки) + вход по callback из поста работает всегда.
2) Экстренное отключение (только супер-админ): /favi-stop → запрос пароля → бот
уходит в аварийный режим и молчит для всех; /favi-start возвращает. Пароль хранится
как PBKDF2-хэш в .env (FAVI_STOP_HASH), не в коде; сравнение константное, 3 попытки.
pytest 43 passed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Отображаемое название дисциплины расписано полностью: кнопка выбора игры,
приветствие, список направлений, вопрос об уровне, значение game, инфо интенсива,
описание услуги. Ввод «CS2» по-прежнему распознаётся (+ counter/strike).
Метка game_cs2 и UTM summer_intensive не тронуты (внутренние). Название продукта
«Летний интенсив CS2» оставлено как есть.
pytest 36 passed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Тексты:
- «Сколько лет игроку?» (было «…будущему ученику?») во всех местах;
- сообщение для «Младше 12 лет» приведено дословно к ТЗ (§4);
- убраны отсебятины-преамбулы, которых нет в ТЗ (приветствие, старт воронки,
цены «Что дальше?», интенсив «Хотите записаться?»); кнопка младше-12 «Вернуться назад».
Смена ссылок в админке:
- таблица bot_links (key, url) + методы get_link/get_all_links/set_link;
- _link(key): БД-переопределение → дефолт из config/.env; используется на шагах оплаты;
- раздел «Ссылки 🔗» в админ-панели: список текущих адресов + «✏️ Изменить ссылку»
(выбор из 8 кнопок → ввод URL с валидацией http/https). UTM добавляются автоматически.
Тесты: добавлен test_admin_edit_link. pytest 31 passed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Из ТЗ Кибершколы БАЗА эти сценарии заменены воронкой подбора, поэтому убран мёртвый код:
- клиентские FSM: FORM_* (форма-заявка, возвращающийся клиент, редактирование, согласия,
выбор услуги, карусель) и VAC_* (карьера: игроки/сотрудники);
- меню «Частые вопросы» и config.FAQ_ANSWERS;
- осиротевшая админка: управление услугами + карусель, вакансии, кандидаты
(в панели и в мастере ADMIN_SVC_*/ADMIN_VAC_*), блок статистики по откликам;
- старый _handoff_to_operator и _notify_operator_about_lead (заменены _baza_to_manager);
- неиспользуемые клавиатуры (форма/услуги/вакансии/согласия) и импорты (validators, random, string).
Оставлено (используется/по ТЗ): воронка БАЗА, быстрые ответы (custom_faq), стата по лидам,
рассылка, управление админами, чат с оператором, логотип. Слой БД не тронут — существующие
установки не ломаются (таблицы services/applications/vacancy_options просто не используются).
bot.py: -1490 строк. Тесты: pytest 28 passed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Фаза 1 — config: BRAND «Кибершкола БАЗА», цены/тексты по ТЗ (приветствие,
прайс, интенсив), 8 ссылок-плейсхолдеров с UTM, триггеры (основные/лето).
Фаза 2 — database: JSON-профиль воронки (роль/возраст/игра/уровень/формат/
метки/…) + методы get/set/clear + add_metka. Живой флоу пока не затронут.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Супер-админ (config.SUPER_ADMIN_IDS, только через код): добавляет/удаляет
обычных админов из бота (раздел «Администраторы 👑»), таблица admins.
_is_admin теперь учитывает супер-админов, .env и добавленных из бота.
- «Когда удобно созвониться» → выбор конкретного дня (кнопки на ближайшие даты)
и времени (слоты), сохраняется как «День, ЧЧ:ММ».
- Шаг согласия: инлайн-кнопки со ссылками на оферту и политику ПД (PDF), затем
подтверждение. Старое вложение .docx убрано.
- Маска отображения телефона: +7 (999) 123-45-67 в карточке и уведомлениях.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Бот:
- Прогресс-бар (▰▰▱ Шаг N из 3) в шагах заявки
- Быстрые ответы по ключевым словам (таблица custom_faq) — отвечают до зова оператора;
редактирование через админ-панель (раздел «Быстрые ответы»: добавить/список/удалить)
- Отклики в статистике: счётчик игроков/сотрудников по дисциплинам и должностям
- Статусы кандидатов (новый/на собесе/отказ/принят) — раздел «Кандидаты» в админке
- Несколько операторов: уведомления уходят всем из OPERATOR_PEER_IDS
- Часы работы (WORK_HOUR_START/END): вне часов хендофф сообщает «ответим утром»
- Временный бан при повторном флуде (усиление анти-DDoS)
- Старт-пинг администратору «бот запущен» (лёгкий healthcheck)
Док и зависимости:
- README.md (запуск, .env, автозапуск, админ-команды, структура)
- requirements.txt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Контент и брендинг:
- Реальные данные ИКP (infocyber.pro): услуги CS2/Dota 2/WoT, цены, FAQ, контакты, площадки
- Приветствие и тексты приведены к бренду ИКП
Новые функции:
- Раздельные согласия (152-ФЗ): маркетинговая рассылка — отдельный необязательный шаг
- Шаг «удобное время звонка» в форме заявки
- Раздел «Карьера в ИКП»: набор игроков и сотрудников (таблица applications)
- Админ-команды: статистика (стата) и рассылка по подписчикам с троттлингом и отпиской
- Журнал заявок leads, «бот помнит клиента», международные телефоны, валидация имени
- Email-уведомления о заявках и откликах (mailer.py); HR-адрес через HR_MAIL_TO
Защита:
- Анти-флуд по пользователю и кулдаун уведомлений оператору (анти-DDoS)
- Веб-форма: серверная валидация, honeypot, рейт-лимит, CORS по ALLOWED_ORIGIN, SQLite-first
Визуал:
- Убрана Markdown-разметка (VK её не рендерит)
- Логотип в приветствии, карусели услуг и «Карьеры» (фото 13:8), предзагрузка медиа
- Кнопки-ссылки на соцсети
- Веб-форма: анимации, конфетти на успехе
Промокоды добавлены, но пока ВЫКЛЮЧЕНЫ флагом PROMO_ENABLED (по умолчанию false).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>