import os from dotenv import load_dotenv def _env_int(name: str, default: int = 0) -> int: try: return int(os.environ.get(name, default)) except (TypeError, ValueError): return default CONFIG_ENV_PATH = os.environ.get( "WBB_CONFIG_PATH", "config.env" if os.path.isfile("config.env") else "sample_config.env", ) load_dotenv(CONFIG_ENV_PATH) BOT_TOKEN = os.environ.get("BOT_TOKEN", "") API_ID = _env_int("API_ID") SESSION_STRING = os.environ.get("SESSION_STRING", "") API_HASH = os.environ.get("API_HASH", "") USERBOT_PREFIX = os.environ.get("USERBOT_PREFIX", "\\") PHONE_NUMBER = os.environ.get("PHONE_NUMBER", "") SUDO_USERS_ID = [ int(item) for item in os.environ.get("SUDO_USERS_ID", "").split() if item.lstrip("-").isdigit() and int(item) > 0 ] LOG_GROUP_ID = _env_int("LOG_GROUP_ID") GBAN_LOG_GROUP_ID = _env_int("GBAN_LOG_GROUP_ID") MESSAGE_DUMP_CHAT = _env_int("MESSAGE_DUMP_CHAT") WELCOME_DELAY_KICK_SEC = _env_int("WELCOME_DELAY_KICK_SEC", 600) MONGO_URL = os.environ.get("MONGO_URL", "mongodb://127.0.0.1:27017/wbb") ARQ_API_KEY = os.environ.get("ARQ_API_KEY") ARQ_API_URL = os.environ.get("ARQ_API_URL", "https://arq.hamker.dev") LOG_MENTIONS = os.environ.get("LOG_MENTIONS", "True").lower() in ["true", "1"] RSS_DELAY = int(os.environ.get("RSS_DELAY", 300)) PM_PERMIT = os.environ.get("PM_PERMIT", "True").lower() in ["true", "1"] ADMIN_WEB_ENABLED = os.environ.get("ADMIN_WEB_ENABLED", "True").lower() in [ "true", "1", ] ADMIN_WEB_HOST = os.environ.get("ADMIN_WEB_HOST", "127.0.0.1") ADMIN_WEB_PORT = _env_int("ADMIN_WEB_PORT", 8088) ADMIN_WEB_USERNAME = os.environ.get("ADMIN_WEB_USERNAME", "admin") ADMIN_WEB_INITIAL_PASSWORD = os.environ.get( "ADMIN_WEB_INITIAL_PASSWORD", "qwe0.123456" ) ADMIN_WEB_SESSION_HOURS = _env_int("ADMIN_WEB_SESSION_HOURS", 12) ADMIN_WEB_COOKIE_SECURE = os.environ.get( "ADMIN_WEB_COOKIE_SECURE", "False" ).lower() in ["true", "1"] ADMIN_WEB_UPLOAD_MAX_MB = _env_int("ADMIN_WEB_UPLOAD_MAX_MB", 20) ADMIN_WEB_STATIC_DIR = os.environ.get("ADMIN_WEB_STATIC_DIR", "admin-web/dist") SERVICE_ADDRESS_ENCRYPTION_KEY = os.environ.get( "SERVICE_ADDRESS_ENCRYPTION_KEY", "" ) SERVICE_ADDRESS_RETENTION_DAYS = _env_int("SERVICE_ADDRESS_RETENTION_DAYS", 7) SERVICE_REVIEW_QR_EXPIRY_HOURS = _env_int("SERVICE_REVIEW_QR_EXPIRY_HOURS", 24) SERVICE_REVIEW_FORUM_CHAT_ID = os.environ.get("SERVICE_REVIEW_FORUM_CHAT_ID", "") SERVICE_REVIEW_FORUM_USERNAME = os.environ.get( "SERVICE_REVIEW_FORUM_USERNAME", "" ) SERVICE_CUSTOMER_MAX_OPEN_ORDERS = _env_int("SERVICE_CUSTOMER_MAX_OPEN_ORDERS", 3) SERVICE_CUSTOMER_DAILY_REQUEST_LIMIT = _env_int( "SERVICE_CUSTOMER_DAILY_REQUEST_LIMIT", 10 ) SERVICE_TECHNICIAN_MINI_APP_URL = os.environ.get( "SERVICE_TECHNICIAN_MINI_APP_URL", "https://tg.97admin.com/admin/technician", ) SERVICE_MINI_APP_AUTH_MAX_AGE_SECONDS = _env_int( "SERVICE_MINI_APP_AUTH_MAX_AGE_SECONDS", 3600, ) BUSINESS_ASSISTANT_OPENAI_BASE_URL = os.environ.get( "BUSINESS_ASSISTANT_OPENAI_BASE_URL", "" ) BUSINESS_ASSISTANT_OPENAI_API_KEY = os.environ.get( "BUSINESS_ASSISTANT_OPENAI_API_KEY", "" ) BUSINESS_ASSISTANT_OPENAI_MODEL = os.environ.get( "BUSINESS_ASSISTANT_OPENAI_MODEL", "" ) BUSINESS_ASSISTANT_OPENAI_TIMEOUT_SECONDS = _env_int( "BUSINESS_ASSISTANT_OPENAI_TIMEOUT_SECONDS", 30 ) BUSINESS_ASSISTANT_OPENAI_MAX_OUTPUT_TOKENS = _env_int( "BUSINESS_ASSISTANT_OPENAI_MAX_OUTPUT_TOKENS", 600 ) USERBOT_ENABLED = os.environ.get("USERBOT_ENABLED", "False").lower() in ["true", "1"] ADMIN_BOOTSTRAP_MODE = os.environ.get("WBB_ADMIN_BOOTSTRAP", "0").lower() in ["true", "1"] SUPERVISOR_MODE = os.environ.get("WBB_SUPERVISOR_MODE", "0").lower() in ["true", "1"] BOT_PROFILE_ID = os.environ.get("WBB_BOT_PROFILE_ID", "primary") BOT_PROFILES_PATH = os.environ.get("BOT_PROFILES_PATH", "runtime/bot_profiles.json") BOT_WORKER_MODE = os.environ.get("WBB_BOT_WORKER", "0").lower() in ["true", "1"] SUPERVISOR_INTERNAL_URL = os.environ.get("WBB_SUPERVISOR_INTERNAL_URL", "") INTERNAL_TOKEN = os.environ.get("WBB_INTERNAL_TOKEN", "") _BOT_PERMISSIONS_RAW = os.environ.get("WBB_BOT_PERMISSIONS") BOT_PERMISSIONS = ( {"*"} if _BOT_PERMISSIONS_RAW is None else { item.strip() for item in _BOT_PERMISSIONS_RAW.split(",") if item.strip() } )