PaiGram/core/config.py

165 lines
4.1 KiB
Python
Raw Normal View History

from enum import Enum
from pathlib import Path
from typing import List, Optional, Union
import dotenv
from pydantic import AnyUrl, Field
from core.basemodel import Settings
from utils.const import PROJECT_ROOT
from utils.typedefs import NaturalNumber
__all__ = ("ApplicationConfig", "config", "JoinGroups")
2022-10-13 13:01:45 +00:00
dotenv.load_dotenv()
class JoinGroups(str, Enum):
NO_ALLOW = "NO_ALLOW"
ALLOW_AUTH_USER = "ALLOW_AUTH_USER"
2023-01-23 13:34:13 +00:00
ALLOW_USER = "ALLOW_USER"
ALLOW_ALL = "ALLOW_ALL"
2023-03-25 03:17:38 +00:00
class DatabaseConfig(Settings):
driver_name: str = "mysql+asyncmy"
host: Optional[str] = None
port: Optional[int] = None
username: Optional[str] = None
password: Optional[str] = None
database: Optional[str] = None
2022-10-28 07:11:14 +00:00
class Config(Settings.Config):
env_prefix = "db_"
2022-10-28 07:11:14 +00:00
class RedisConfig(Settings):
host: str = "127.0.0.1"
2022-10-28 07:11:14 +00:00
port: int = 6379
2023-01-05 07:36:10 +00:00
database: int = Field(default=0, env="redis_db")
password: Optional[str] = None
2022-10-28 07:11:14 +00:00
class Config(Settings.Config):
env_prefix = "redis_"
2022-10-28 07:11:14 +00:00
class LoggerConfig(Settings):
2023-03-25 03:17:38 +00:00
name: str = "PaiGram"
width: Optional[int] = None
time_format: str = "[%Y-%m-%d %X]"
traceback_max_frames: int = 20
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
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):
enable: bool = False
"""是否启用WebServer"""
2022-10-28 07:11:14 +00:00
host: str = "localhost"
port: int = 8080
class Config(Settings.Config):
env_prefix = "web_"
@property
def url(self) -> str:
# noinspection HttpUrlsUsage
return "http://" + self.host + ":" + str(self.port)
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 ReloadConfig(Settings):
delay: float = 0.25
dirs: List[str] = []
include: List[str] = []
exclude: List[str] = []
class Config(Settings.Config):
env_prefix = "reload_"
class NoticeConfig(Settings):
user_mismatch: str = "再乱点我叫西风骑士团、千岩军、天领奉行、三十人团和风纪官了!"
2023-02-18 05:03:58 +00:00
class Config(Settings.Config):
env_prefix = "notice_"
2023-02-18 05:03:58 +00:00
class ApplicationConfig(Settings):
2022-10-28 07:11:14 +00:00
debug: bool = False
"""debug 开关"""
retry: int = 5
"""重试次数"""
auto_reload: bool = False
"""自动重载"""
proxy_url: Optional[AnyUrl] = None
"""代理链接"""
2022-10-28 07:11:14 +00:00
bot_token: str = ""
"""BOT的token"""
owner: Optional[int] = None
channels: List[int] = []
"""文章推送群组"""
2022-10-28 07:11:14 +00:00
verify_groups: List[Union[int, str]] = []
"""启用群验证功能的群组"""
2022-10-28 07:11:14 +00:00
join_groups: Optional[JoinGroups] = JoinGroups.NO_ALLOW
"""是否允许机器人被邀请到其它群组"""
2022-10-28 07:11:14 +00:00
timeout: int = 10
connection_pool_size: int = 256
2023-02-19 12:40:27 +00:00
read_timeout: Optional[float] = None
2022-10-28 07:11:14 +00:00
write_timeout: Optional[float] = None
connect_timeout: Optional[float] = None
pool_timeout: Optional[float] = None
2023-02-19 12:40:27 +00:00
update_read_timeout: Optional[float] = None
update_write_timeout: Optional[float] = None
update_connect_timeout: Optional[float] = None
update_pool_timeout: Optional[float] = None
2022-10-28 07:11:14 +00:00
genshin_ttl: Optional[int] = None
enka_network_api_agent: str = ""
pass_challenge_api: str = ""
pass_challenge_app_key: str = ""
pass_challenge_user_web: str = ""
reload: ReloadConfig = ReloadConfig()
2023-03-25 03:17:38 +00:00
database: DatabaseConfig = DatabaseConfig()
2022-10-28 07:11:14 +00:00
logger: LoggerConfig = LoggerConfig()
webserver: WebServerConfig = WebServerConfig()
redis: RedisConfig = RedisConfig()
mtproto: MTProtoConfig = MTProtoConfig()
error: ErrorConfig = ErrorConfig()
notice: NoticeConfig = NoticeConfig()
ApplicationConfig.update_forward_refs()
config = ApplicationConfig()