62 lines
3.1 KiB
Python
62 lines
3.1 KiB
Python
"""
|
||
Конфигурация IntradBot.
|
||
Все параметры читаются из переменных окружения (.env через docker-compose).
|
||
При старте проверяются обязательные переменные — если не заданы, падаем сразу.
|
||
"""
|
||
import os
|
||
import sys
|
||
|
||
|
||
def _require(name: str) -> str:
|
||
"""Читает переменную окружения. Если не задана — завершает процесс с понятной ошибкой."""
|
||
value = os.environ.get(name, "").strip()
|
||
if not value:
|
||
print(f"[FATAL] Обязательная переменная окружения не задана: {name}", file=sys.stderr)
|
||
sys.exit(1)
|
||
return value
|
||
|
||
|
||
def _optional(name: str, default: str = "") -> str:
|
||
return os.environ.get(name, default).strip()
|
||
|
||
|
||
def _int(name: str, default: int) -> int:
|
||
try:
|
||
return int(os.environ.get(name, default))
|
||
except (ValueError, TypeError):
|
||
return default
|
||
|
||
|
||
# ── Обязательные ──────────────────────────────────────────────────────────────
|
||
TOKEN = _require("TELEGRAM_TOKEN")
|
||
API_KEY = _require("INTRADESK_API_KEY")
|
||
CHANNEL_ID = _int("CHANNEL_ID", 0)
|
||
|
||
# ── Необязательные ────────────────────────────────────────────────────────────
|
||
BASE_TASK_URL = _optional("BASE_TASK_URL", "https://cleverparking.intradesk.ru/task/list/")
|
||
DB_FILE = _optional("DB_FILE", "/app/data/intradbot.db")
|
||
WEBHOOK_SECRET = _optional("WEBHOOK_SECRET")
|
||
PORT = _int("PORT", 8080)
|
||
PUBLIC_URL = _optional("PUBLIC_URL")
|
||
GIF_URL = _optional("GIF_URL", "https://media.tenor.com/OzN-0kxqXAgAAAAi/cat.gif")
|
||
|
||
# Пароль для дашборда (Basic Auth). Пустая строка — дашборд открыт.
|
||
DASHBOARD_PASSWORD = _optional("DASHBOARD_PASSWORD")
|
||
|
||
# Секрет для подписи ссылок Mini App
|
||
MINIAPP_SECRET = _optional("MINIAPP_SECRET", WEBHOOK_SECRET or TOKEN[:20])
|
||
|
||
# ── Бизнес-параметры (вынесены из кода) ──────────────────────────────────────
|
||
# ID сотрудников доступных для назначения исполнителем (через запятую в .env)
|
||
# Пример: EXECUTOR_USER_IDS=2227907,631481,525111
|
||
_executor_ids_raw = _optional("EXECUTOR_USER_IDS", "2227907,631481,525111")
|
||
EXECUTOR_USER_IDS: list[int] = [
|
||
int(x.strip()) for x in _executor_ids_raw.split(",") if x.strip().isdigit()
|
||
]
|
||
|
||
# Фильтр активных заявок для дашборда
|
||
# Пример: ACTIVE_TASKS_FILTER=(status ne 68045) and (executorgroup eq 243025)
|
||
ACTIVE_TASKS_FILTER = _optional(
|
||
"ACTIVE_TASKS_FILTER",
|
||
"(status ne 68045) and (executorgroup eq 243025)"
|
||
)
|