Улучшен скрипт запуска: добавлена возможность переопределения настроек Telegram-бота через аргументы командной строки.
This commit is contained in:
+19
-6
@@ -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:
|
||||||
msg = f'Ошибка валидации настроек: {exc}'
|
if token is not None or user_id is not None:
|
||||||
raise RuntimeError(msg) from exc
|
# Переопределяем только если явно передано
|
||||||
|
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
|
TOKEN: str = settings.TOKEN
|
||||||
USER_ID: str = str(settings.USER_ID)
|
USER_ID: str = str(settings.USER_ID)
|
||||||
|
|||||||
+15
@@ -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())
|
||||||
|
|||||||
Reference in New Issue
Block a user