2022-10-16 10:15:23 +00:00
|
|
|
from enum import Enum
|
2022-09-10 15:30:13 +00:00
|
|
|
from pathlib import Path
|
2022-09-08 01:08:37 +00:00
|
|
|
from typing import (
|
|
|
|
List,
|
|
|
|
Optional,
|
|
|
|
Union,
|
|
|
|
)
|
|
|
|
|
|
|
|
import dotenv
|
2022-10-28 07:39:17 +00:00
|
|
|
from pydantic import AnyUrl, BaseModel, Field
|
2022-09-08 01:08:37 +00:00
|
|
|
|
2022-09-10 15:30:13 +00:00
|
|
|
from utils.const import PROJECT_ROOT
|
2022-10-28 07:11:14 +00:00
|
|
|
from utils.models.base import Settings
|
2022-10-28 07:39:17 +00:00
|
|
|
from utils.typedefs import NaturalNumber
|
2022-09-10 15:30:13 +00:00
|
|
|
|
2022-10-16 10:15:23 +00:00
|
|
|
__all__ = ["BotConfig", "config", "JoinGroups"]
|
2022-10-13 13:01:45 +00:00
|
|
|
|
2022-09-08 01:08:37 +00:00
|
|
|
dotenv.load_dotenv()
|
|
|
|
|
|
|
|
|
2022-10-16 10:15:23 +00:00
|
|
|
class JoinGroups(str, Enum):
|
|
|
|
NO_ALLOW = "NO_ALLOW"
|
|
|
|
ALLOW_AUTH_USER = "ALLOW_AUTH_USER"
|
|
|
|
ALLOW_ALL = "ALLOW_ALL"
|
|
|
|
|
|
|
|
|
2022-09-08 01:08:37 +00:00
|
|
|
class ConfigChannel(BaseModel):
|
|
|
|
name: str
|
|
|
|
chat_id: int
|
|
|
|
|
|
|
|
|
|
|
|
class ConfigUser(BaseModel):
|
|
|
|
username: Optional[str]
|
|
|
|
user_id: int
|
|
|
|
|
|
|
|
|
2022-10-28 07:11:14 +00:00
|
|
|
class MySqlConfig(Settings):
|
2022-09-08 01:08:37 +00:00
|
|
|
host: str = "127.0.0.1"
|
|
|
|
port: int = 3306
|
2022-11-04 10:07:11 +00:00
|
|
|
username: str = None
|
|
|
|
password: str = None
|
|
|
|
database: str = None
|
2022-09-08 01:08:37 +00:00
|
|
|
|
2022-10-28 07:11:14 +00:00
|
|
|
class Config(Settings.Config):
|
|
|
|
env_prefix = "db_"
|
|
|
|
|
2022-09-08 01:08:37 +00:00
|
|
|
|
2022-10-28 07:11:14 +00:00
|
|
|
class RedisConfig(Settings):
|
2022-10-10 05:34:06 +00:00
|
|
|
host: str = "127.0.0.1"
|
2022-10-28 07:11:14 +00:00
|
|
|
port: int = 6379
|
|
|
|
database: int = Field(env="redis_db")
|
2022-09-08 01:08:37 +00:00
|
|
|
|
2022-10-28 07:11:14 +00:00
|
|
|
class Config(Settings.Config):
|
|
|
|
env_prefix = "redis_"
|
2022-09-08 01:08:37 +00:00
|
|
|
|
2022-10-28 07:11:14 +00:00
|
|
|
|
|
|
|
class LoggerConfig(Settings):
|
2022-10-23 09:15:09 +00:00
|
|
|
name: str = "TGPaimon"
|
2022-09-10 15:30:13 +00:00
|
|
|
width: int = 180
|
|
|
|
time_format: str = "[%Y-%m-%d %X]"
|
|
|
|
traceback_max_frames: int = 20
|
2022-10-10 05:34:06 +00:00
|
|
|
path: Path = PROJECT_ROOT / "logs"
|
|
|
|
render_keywords: List[str] = ["BOT"]
|
2022-10-13 13:01:45 +00:00
|
|
|
locals_max_length: int = 10
|
|
|
|
locals_max_string: int = 80
|
2022-10-28 07:39:17 +00:00
|
|
|
locals_max_depth: Optional[NaturalNumber] = None
|
2022-10-23 09:15:09 +00:00
|
|
|
filtered_names: List[str] = ["uvicorn"]
|
2022-10-13 13:01:45 +00:00
|
|
|
|
2022-10-28 07:11:14 +00:00
|
|
|
class Config(Settings.Config):
|
|
|
|
env_prefix = "logger_"
|
|
|
|
|
|
|
|
|
|
|
|
class MTProtoConfig(Settings):
|
|
|
|
api_id: Optional[int] = None
|
|
|
|
api_hash: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
class WebServerConfig(Settings):
|
|
|
|
url: AnyUrl = "http://localhost:8080"
|
|
|
|
host: str = "localhost"
|
|
|
|
port: int = 8080
|
|
|
|
|
|
|
|
class Config(Settings.Config):
|
|
|
|
env_prefix = "web_"
|
2022-09-10 15:30:13 +00:00
|
|
|
|
2022-09-11 07:08:02 +00:00
|
|
|
|
2022-10-28 07:11:14 +00:00
|
|
|
class ErrorConfig(Settings):
|
|
|
|
pb_url: str = ""
|
|
|
|
pb_sunset: int = 43200
|
|
|
|
pb_max_lines: int = 1000
|
|
|
|
sentry_dsn: str = ""
|
|
|
|
notification_chat_id: Optional[str] = None
|
|
|
|
|
|
|
|
class Config(Settings.Config):
|
|
|
|
env_prefix = "error_"
|
|
|
|
|
|
|
|
|
|
|
|
class BotConfig(Settings):
|
|
|
|
debug: bool = False
|
|
|
|
|
|
|
|
bot_token: str = ""
|
|
|
|
|
|
|
|
channels: List["ConfigChannel"] = []
|
|
|
|
admins: List["ConfigUser"] = []
|
|
|
|
verify_groups: List[Union[int, str]] = []
|
|
|
|
join_groups: Optional[JoinGroups] = JoinGroups.NO_ALLOW
|
|
|
|
|
|
|
|
timeout: int = 10
|
|
|
|
read_timeout: float = 2
|
|
|
|
write_timeout: Optional[float] = None
|
|
|
|
connect_timeout: Optional[float] = None
|
|
|
|
pool_timeout: Optional[float] = None
|
|
|
|
|
|
|
|
genshin_ttl: Optional[int] = None
|
|
|
|
|
|
|
|
enka_network_api_agent: str = ""
|
|
|
|
pass_challenge_api: str = ""
|
|
|
|
pass_challenge_app_key: str = ""
|
2022-10-30 08:46:07 +00:00
|
|
|
pass_challenge_user_web: str = ""
|
2022-09-11 07:08:02 +00:00
|
|
|
|
2022-10-28 07:11:14 +00:00
|
|
|
mysql: MySqlConfig = MySqlConfig()
|
|
|
|
logger: LoggerConfig = LoggerConfig()
|
|
|
|
webserver: WebServerConfig = WebServerConfig()
|
|
|
|
redis: RedisConfig = RedisConfig()
|
|
|
|
mtproto: MTProtoConfig = MTProtoConfig()
|
|
|
|
error: ErrorConfig = ErrorConfig()
|
2022-10-12 13:39:47 +00:00
|
|
|
|
|
|
|
|
2022-09-08 01:08:37 +00:00
|
|
|
BotConfig.update_forward_refs()
|
|
|
|
config = BotConfig()
|