domovoy_bot/config.py
Admin fc7484889c feat: Веб-интерфейс - логин/пароль в .env + API команд
 WEB_ADMIN_LOGIN/PASSWORD в .env.example
 Конфиг web_admin в config.py
 API /api/command - выполнение команд
 API /api/commands - список команд
 Обновлён web_server.py с конфигом

📦 Бекап: backups/versions/v2.1.2_web_auth_2026-02-28/

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 20:28:31 +00:00

82 lines
2.7 KiB
Python

"""
Конфигурация бота
"""
import os
from dotenv import load_dotenv
from pathlib import Path
# Загружаем переменные окружения
load_dotenv()
# Telegram
BOT_TOKEN = os.getenv('BOT_TOKEN', '')
ADMIN_CHAT_ID = int(os.getenv('ADMIN_CHAT_ID', '0'))
ADMIN_USER_ID = int(os.getenv('ADMIN_USER_ID', '0'))
# База данных
BASE_DIR = Path(__file__).resolve().parent
DATABASE_PATH = os.getenv('DATABASE_PATH', str(BASE_DIR / 'database' / 'domovoy.db'))
# Экспорт
EXPORT_DIR = os.getenv('EXPORT_DIR', str(BASE_DIR / 'exports'))
EXPORT_SCHEDULE = os.getenv('EXPORT_SCHEDULE', '0 3 * * 0')
# Детект шпионов
SPY_DETECTION_ENABLED = os.getenv('SPY_DETECTION_ENABLED', 'true').lower() == 'true'
SPY_ALERT_USER_ID = int(os.getenv('SPY_ALERT_USER_ID', '0'))
# Логирование
LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
LOG_FILE = os.getenv('LOG_FILE', str(BASE_DIR / 'logs' / 'bot.log'))
# ===== ПРОКСИ =====
USE_PROXY = os.getenv('USE_PROXY', 'false').lower() == 'true'
PROXY_TYPE = os.getenv('PROXY_TYPE', 'socks5').lower()
PROXY_HOST = os.getenv('PROXY_HOST', '127.0.0.1')
PROXY_PORT = int(os.getenv('PROXY_PORT', '10808'))
# ===== ВЕБ-ИНТЕРФЕЙС =====
WEB_ADMIN_LOGIN = os.getenv('WEB_ADMIN_LOGIN', 'admin')
WEB_ADMIN_PASSWORD = os.getenv('WEB_ADMIN_PASSWORD', 'admin')
WEB_ADMIN_HOST = os.getenv('WEB_ADMIN_HOST', '0.0.0.0')
WEB_ADMIN_PORT = int(os.getenv('WEB_ADMIN_PORT', '8000'))
# Проверка критичных настроек
if not BOT_TOKEN:
raise ValueError('BOT_TOKEN не настроен! Проверьте .env файл')
if not ADMIN_CHAT_ID:
raise ValueError('ADMIN_CHAT_ID не настроен!')
if not ADMIN_USER_ID:
raise ValueError('ADMIN_USER_ID не настроен! Укажите ваш Telegram ID')
def get_proxy_url() -> str | None:
"""Получить URL прокси для aiohttp"""
if not USE_PROXY:
return None
if PROXY_TYPE == 'http':
return f'http://{PROXY_HOST}:{PROXY_PORT}'
elif PROXY_TYPE == 'socks5':
return f'socks5://{PROXY_HOST}:{PROXY_PORT}'
elif PROXY_TYPE == 'socks4':
return f'socks4://{PROXY_HOST}:{PROXY_PORT}'
else:
return f'socks5://{PROXY_HOST}:{PROXY_PORT}'
# Вспомогательные функции
def get_admin_ids():
"""Список ID администраторов"""
ids = [ADMIN_USER_ID]
extra_ids = os.getenv('EXTRA_ADMIN_IDS', '')
if extra_ids:
ids.extend([int(x.strip()) for x in extra_ids.split(',')])
return ids
def is_admin(user_id: int) -> bool:
"""Проверка, является ли пользователь админом"""
return user_id in get_admin_ids()