feat(qqpush): 私聊推送接口与抽卡API token读取兼容
This commit is contained in:
@@ -1,10 +1,40 @@
|
||||
from pydantic import field_validator, model_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
import os
|
||||
import logging
|
||||
from pydantic import Field, field_validator, model_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
import os
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger("onmyoji_gacha")
|
||||
|
||||
|
||||
def _read_nonebot_config(name: str) -> str:
|
||||
"""从 NoneBot driver.config 读取配置;测试或独立加载模块时静默回退。"""
|
||||
|
||||
try:
|
||||
from nonebot import get_driver
|
||||
|
||||
driver_config = get_driver().config
|
||||
except Exception:
|
||||
return ""
|
||||
value = getattr(driver_config, name.lower(), "")
|
||||
return str(value) if value is not None else ""
|
||||
|
||||
|
||||
def _read_setting(name: str) -> str:
|
||||
"""按单个配置名读取系统环境变量,再读取 NoneBot 配置对象。"""
|
||||
|
||||
return os.getenv(name, "") or _read_nonebot_config(name)
|
||||
|
||||
|
||||
def _first_setting(*names: str, default: str = "") -> str:
|
||||
"""按业务优先级读取多个兼容配置名。"""
|
||||
|
||||
for name in names:
|
||||
value = _read_setting(name)
|
||||
if value:
|
||||
return value
|
||||
return default
|
||||
|
||||
|
||||
class Config(BaseSettings):
|
||||
model_config = SettingsConfigDict(extra="ignore")
|
||||
|
||||
@@ -112,27 +142,38 @@ class Config(BaseSettings):
|
||||
SPECIAL_PROBABILITY_USERS: list = [] # 100%抽到SSR或SP的用户列表
|
||||
|
||||
# Web后台管理配置
|
||||
WEB_ADMIN_TOKEN: str = os.getenv("WEB_ADMIN_TOKEN", "onmyoji_admin_token_2024")
|
||||
WEB_ADMIN_PORT: int = int(os.getenv("WEB_ADMIN_PORT", "8080"))
|
||||
WEB_ADMIN_TOKEN: str = Field(
|
||||
default_factory=lambda: _first_setting("WEB_ADMIN_TOKEN", default="onmyoji_admin_token_2024")
|
||||
)
|
||||
WEB_ADMIN_PORT: int = Field(default_factory=lambda: int(_first_setting("WEB_ADMIN_PORT", default="8080")))
|
||||
|
||||
# 蛋定服务器对接配置
|
||||
DD_API_HOST: str = "https://api.danding.vip/DD/"
|
||||
GACHA_API_HOST: str = os.getenv("DANDING_GACHA_API_HOST", "https://api.danding.vip/bot/gacha")
|
||||
BOT_TOKEN: str = os.getenv(
|
||||
"DANDING_BOT_TOKEN",
|
||||
os.getenv("ONMYOJI_BOT_TOKEN", os.getenv("DANDING_API_TOKEN", os.getenv("BOT_TOKEN", ""))),
|
||||
)
|
||||
BOT_USER_ID: str = os.getenv("DANDING_BOT_USER", "1424473282")
|
||||
# 蛋定服务器对接配置
|
||||
DD_API_HOST: str = "https://api.danding.vip/DD/"
|
||||
GACHA_API_HOST: str = Field(
|
||||
default_factory=lambda: _first_setting(
|
||||
"DANDING_GACHA_API_HOST",
|
||||
default="https://api.danding.vip/bot/gacha",
|
||||
)
|
||||
)
|
||||
BOT_TOKEN: str = Field(
|
||||
default_factory=lambda: _first_setting(
|
||||
"DANDING_BOT_TOKEN",
|
||||
"ONMYOJI_BOT_TOKEN",
|
||||
"DANDING_API_TOKEN",
|
||||
"BOT_TOKEN",
|
||||
)
|
||||
)
|
||||
BOT_USER_ID: str = Field(default_factory=lambda: _first_setting("DANDING_BOT_USER", default="1424473282"))
|
||||
|
||||
# 时区
|
||||
TIMEZONE: str = "Asia/Shanghai"
|
||||
|
||||
@field_validator("GACHA_API_HOST")
|
||||
@classmethod
|
||||
def validate_gacha_api_host(cls, value):
|
||||
if not value:
|
||||
raise ValueError("GACHA_API_HOST cannot be empty")
|
||||
return value.rstrip("/")
|
||||
TIMEZONE: str = "Asia/Shanghai"
|
||||
|
||||
@field_validator("GACHA_API_HOST")
|
||||
@classmethod
|
||||
def validate_gacha_api_host(cls, value):
|
||||
if not value:
|
||||
raise ValueError("GACHA_API_HOST cannot be empty")
|
||||
return value.rstrip("/")
|
||||
|
||||
@model_validator(mode="after")
|
||||
def _warn_default_token(self):
|
||||
|
||||
Reference in New Issue
Block a user