Админка, защита и 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:
@@ -40,6 +40,20 @@ if admin_ids_raw:
|
||||
else:
|
||||
ADMIN_IDS = [OPERATOR_PEER_ID]
|
||||
|
||||
# Несколько операторов: уведомления о заявках/откликах/вызовах уходят ВСЕМ из списка.
|
||||
# По умолчанию = один OPERATOR_PEER_ID. Задать через .env: OPERATOR_PEER_IDS=111,222,333
|
||||
_op_ids_raw = os.getenv("OPERATOR_PEER_IDS")
|
||||
if _op_ids_raw:
|
||||
OPERATOR_PEER_IDS = [int(x.strip()) for x in _op_ids_raw.split(",") if x.strip().lstrip("-").isdigit()]
|
||||
if not OPERATOR_PEER_IDS:
|
||||
OPERATOR_PEER_IDS = [OPERATOR_PEER_ID]
|
||||
else:
|
||||
OPERATOR_PEER_IDS = [OPERATOR_PEER_ID]
|
||||
|
||||
# Часы работы (для статуса оператора). Вне этого интервала — «ответим утром».
|
||||
WORK_HOUR_START = int(os.getenv("WORK_HOUR_START", "9"))
|
||||
WORK_HOUR_END = int(os.getenv("WORK_HOUR_END", "21"))
|
||||
|
||||
# Разрешённый источник (Origin) для CORS веб-формы. '*' допустим только для локальной отладки.
|
||||
ALLOWED_ORIGIN = os.getenv("ALLOWED_ORIGIN", "https://infocyber.pro")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user