Улучшен скрипт запуска: добавлена возможность переопределения настроек Telegram-бота через аргументы командной строки.
This commit is contained in:
+19
-6
@@ -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)
|
||||
|
||||
+15
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user