From 94e34042a0d9b0a978731418dc2946f7df329ffd Mon Sep 17 00:00:00 2001 From: CREATIVE_tg1 Date: Tue, 21 Apr 2026 00:27:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=20?= =?UTF-8?q?=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D0=B7=D0=B0=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D0=BA=D0=B0:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20Telegram-=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=B0?= =?UTF-8?q?=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D1=8B=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=B4=D0=BD=D0=BE=D0=B9=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.py | 25 +++++++++++++++++++------ src/main.py | 15 +++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) 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())