Админка, защита и UX: быстрые ответы, статусы кандидатов, мульти-операторы, бан, прогресс-бар
Бот: - Прогресс-бар (▰▰▱ Шаг 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>
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# Чат-бот ИКП (ВКонтакте) + веб-форма заявок
|
||||
|
||||
Бот сообщества **ИКП — Игра. Киберспорт. Профессионалы** для приёма заявок на тренировки
|
||||
(Counter-Strike 2, Dota 2, World of Tanks), набора игроков и сотрудников, FAQ и связи с оператором.
|
||||
Плюс отдельная веб-форма заявки на бесплатный урок.
|
||||
|
||||
## Возможности
|
||||
|
||||
- **Заявка на тренировку** — пошаговая форма (имя → телефон → направление → удобное время), бот «помнит» клиента.
|
||||
- **Карьера в ИКП** — набор игроков в состав и сотрудников (карусель с карточками).
|
||||
- **FAQ** — цены, услуги, контакты, о компании, кнопки-ссылки на соцсети.
|
||||
- **Оператор** — передача диалога живому человеку (учитываются часы работы, поддержка нескольких операторов).
|
||||
- **Уведомления** — о заявках/откликах операторам в VK и на почту (SMTP).
|
||||
- **Админ-панель** (в боте, по кнопке у админа): статистика, управление услугами, рассылка по подписчикам,
|
||||
быстрые ответы по ключевым словам, кандидаты и их статусы.
|
||||
- **Защита** — анти-флуд, временный бан, серверная валидация веб-формы, honeypot, rate-limit, CORS.
|
||||
|
||||
## Установка
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
Зависимости: `vk_api`, `requests`, `openpyxl`, `Pillow`.
|
||||
|
||||
## Настройка `.env`
|
||||
|
||||
Скопируйте `.env.example` в `.env` и заполните. Файл `.env` в git **не попадает** (см. `.gitignore`).
|
||||
|
||||
| Переменная | Назначение |
|
||||
|---|---|
|
||||
| `VK_TOKEN` | Токен сообщества ВК (права на сообщения) |
|
||||
| `VK_GROUP_ID` | ID сообщества (цифры) |
|
||||
| `OPERATOR_PEER_ID` | ID оператора по умолчанию для уведомлений |
|
||||
| `OPERATOR_PEER_IDS` | Несколько операторов через запятую (опц.) |
|
||||
| `ADMIN_IDS` | ID администраторов через запятую |
|
||||
| `WORK_HOUR_START` / `WORK_HOUR_END` | Часы работы (по умолч. 9 и 21) |
|
||||
| `ALLOWED_ORIGIN` | Домен сайта для CORS веб-формы |
|
||||
| `PROMO_ENABLED` | Промокоды (по умолч. `false`) |
|
||||
| `SMTP_HOST` / `SMTP_PORT` / `SMTP_USER` / `SMTP_PASSWORD` | SMTP для писем (для Яндекс/Gmail — пароль приложения) |
|
||||
| `MAIL_FROM` / `MAIL_TO` | Отправитель и получатель уведомлений о заявках |
|
||||
| `HR_MAIL_TO` | Куда слать отклики на вакансии (по умолч. = `MAIL_TO`) |
|
||||
|
||||
> Без SMTP письма просто не отправляются (тихо пропускаются) — на работу бота это не влияет.
|
||||
|
||||
## Запуск бота
|
||||
|
||||
**Просто:** двойной клик по `start_bot.bat` — он держит бота живым и перезапускает при сбое.
|
||||
|
||||
**Вручную:**
|
||||
```bash
|
||||
python bot.py
|
||||
```
|
||||
|
||||
**Автозапуск при входе в Windows:** положите ярлык на `start_bot.bat` в папку `shell:startup`
|
||||
(`Win+R` → `shell:startup`).
|
||||
|
||||
Без валидного `VK_TOKEN` бот стартует в режиме эмуляции (консоль) — удобно для локальных тестов.
|
||||
|
||||
## Веб-форма
|
||||
|
||||
```bash
|
||||
python form/server.py
|
||||
```
|
||||
Откройте http://localhost:8000/index.html . Заявки пишутся в SQLite (источник правды) и дублируются в Excel.
|
||||
|
||||
## Админ-панель (в боте)
|
||||
|
||||
У администратора в главном меню есть кнопка **«Админка ⚙️»**. Разделы: Статистика, Кандидаты,
|
||||
Управление услугами, Быстрые ответы, Рассылка. Доступ — строго по `ADMIN_IDS`.
|
||||
|
||||
Текстовые команды (альтернатива кнопкам):
|
||||
- `стата` — статистика
|
||||
- `ред [N] [поле] [значение]`, `доб [Имя] | [Цена] | [Описание]`, `удал [N]` — услуги
|
||||
- `фак доб [слово] | [ответ]`, `фак удал [N]` — быстрые ответы
|
||||
- `статус [N] [новый статус]` — статус кандидата
|
||||
- `рассылка [текст]` → `рассылка подтвердить` — рассылка подписчикам
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
bot.py — логика бота (FSM, клавиатуры, админка, рассылка, защита)
|
||||
config.py — конфигурация из .env
|
||||
database.py — SQLite (заявки, отклики, услуги, быстрые ответы, статистика)
|
||||
mailer.py — отправка email
|
||||
form/ — веб-форма (server.py, index.html, script.js, style.css)
|
||||
help_img/ — картинки (логотип, дисциплины, карьера)
|
||||
start_bot.bat — запуск с авто-перезапуском
|
||||
```
|
||||
|
||||
## Данные
|
||||
|
||||
`bot_database.db`, `.env`, `*.xlsx`, `*.log` и бэкапы `help_img/_orig/` в репозиторий не попадают.
|
||||
Reference in New Issue
Block a user