Улучшен скрипт запуска: добавлена возможность переопределения настроек Telegram-бота через аргументы командной строки.

This commit is contained in:
2026-04-21 00:27:16 +03:00
parent 3f48969542
commit 94e34042a0
2 changed files with 34 additions and 6 deletions
+17 -4
View File
@@ -3,7 +3,7 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings): class Settings(BaseSettings):
"""App settings loaded from environment.""" """App settings loaded from environment, но может быть переопределён через параметры."""
TOKEN: str = Field(default='default_value', description='Токен Telegram-бота') TOKEN: str = Field(default='default_value', description='Токен Telegram-бота')
USER_ID: int = Field(default=0, description='ID пользователя для доступа') 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') model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
try: def get_settings(token: str = None, user_id: int = None) -> Settings:
settings = Settings() """Возвращает объект Settings, приоритет: параметры > env/.env"""
except ValidationError as exc: 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}' msg = f'Ошибка валидации настроек: {exc}'
raise RuntimeError(msg) from exc raise RuntimeError(msg) from exc
# Для обратной совместимости:
settings = get_settings()
TOKEN: str = settings.TOKEN TOKEN: str = settings.TOKEN
USER_ID: str = str(settings.USER_ID) USER_ID: str = str(settings.USER_ID)
+15
View File
@@ -30,6 +30,21 @@ async def main() -> None:
if __name__ == '__main__': if __name__ == '__main__':
import argparse
import asyncio 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()) asyncio.run(main())