diff --git a/src/config.py b/src/config.py index 686cd28..231bcc0 100644 --- a/src/config.py +++ b/src/config.py @@ -3,7 +3,7 @@ from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): - """App settings loaded from environment.""" + """App settings loaded from environment, но может быть переопределён через параметры.""" TOKEN: str = Field(default='default_value', description='Токен Telegram-бота') USER_ID: int = Field(default=0, description='ID пользователя для доступа') @@ -11,11 +11,24 @@ class Settings(BaseSettings): model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8') -try: - settings = Settings() -except ValidationError as exc: - msg = f'Ошибка валидации настроек: {exc}' - raise RuntimeError(msg) from exc +def get_settings(token: str = None, user_id: int = None) -> Settings: + """Возвращает объект Settings, приоритет: параметры > env/.env""" + try: + if token is not None or user_id is not None: + # Переопределяем только если явно передано + data = {} + if token is not None: + data['TOKEN'] = token + if user_id is not None: + data['USER_ID'] = user_id + return Settings(**data) + return Settings() + except ValidationError as exc: + msg = f'Ошибка валидации настроек: {exc}' + raise RuntimeError(msg) from exc + +# Для обратной совместимости: +settings = get_settings() TOKEN: str = settings.TOKEN USER_ID: str = str(settings.USER_ID) diff --git a/src/main.py b/src/main.py index 0b7dd69..85d0ceb 100644 --- a/src/main.py +++ b/src/main.py @@ -30,6 +30,21 @@ async def main() -> None: if __name__ == '__main__': + import argparse import asyncio + from src.config import get_settings + + parser = argparse.ArgumentParser(description='Server Bot Python') + parser.add_argument('--token', type=str, help='Telegram Bot Token') + parser.add_argument('--user_id', type=int, help='User ID for access') + args = parser.parse_args() + + # Переопределяем настройки, если переданы параметры + if args.token or args.user_id: + # settings — глобальный объект, его нужно заменить + import src.config as config_module + + config_module.settings = get_settings(token=args.token, user_id=args.user_id) + asyncio.run(main())