feat(qqpush): 私聊推送接口与抽卡API token读取兼容

This commit is contained in:
2026-08-15 20:50:12 +08:00
parent d2187e5545
commit cb94794e38
7 changed files with 292 additions and 33 deletions

View File

@@ -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):