- 添加 field_validator 来正确解析环境变量中的 ID 集合 - 支持 JSON 格式 "[1424473282]" 和逗号分隔格式 "1424473282,621016172" - 修复 TESTERS、TEST_GROUPS、ALLOWED_GROUPS 的环境变量解析 - 移除调试日志,保持代码整洁 这解决了环境变量中的 JSON 字符串无法正确解析为集合的问题。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
from pydantic import Field, field_validator
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
from typing import Union
|
|
|
|
|
|
class Config(BaseSettings):
|
|
model_config = SettingsConfigDict(
|
|
extra="ignore",
|
|
env_prefix="GROUP_HORSE_RACING_",
|
|
)
|
|
|
|
TEST_MODE: bool = False
|
|
TESTERS: set[int] = Field(default_factory=set)
|
|
TEST_GROUPS: set[int] = Field(default_factory=set)
|
|
ALLOWED_GROUPS: set[int] = Field(default_factory=set)
|
|
|
|
PARTICIPANT_REWARD: int = 50
|
|
CHAMPION_REWARD: int = 200
|
|
MIN_BET: int = 10
|
|
MIN_ODDS: float = 1.2
|
|
RACE_DISTANCE: int = 100
|
|
RACE_TICK_INTERVAL: int = 5
|
|
|
|
MESSAGE_RECALL: dict[str, int] = Field(
|
|
default_factory=lambda: {
|
|
"race_update": 30,
|
|
"registration": 180,
|
|
"bet_confirm": 180,
|
|
"cancel_confirm": 60,
|
|
"error": 60,
|
|
"race_result": 0,
|
|
"leaderboard": 0,
|
|
"help": 0,
|
|
"odds_display": 0,
|
|
}
|
|
)
|
|
|
|
RACE_DB_FILE: str = "data/group_horse_racing/race.db"
|
|
|
|
@field_validator("TESTERS", "TEST_GROUPS", "ALLOWED_GROUPS", mode="before")
|
|
@classmethod
|
|
def parse_id_sets(cls, v):
|
|
"""Parse ID sets from various formats."""
|
|
if isinstance(v, set):
|
|
return v
|
|
if isinstance(v, str):
|
|
# Handle JSON string format like "[1424473282]"
|
|
import json
|
|
try:
|
|
parsed = json.loads(v)
|
|
if isinstance(parsed, list):
|
|
return set(int(x) for x in parsed)
|
|
except (json.JSONDecodeError, ValueError, TypeError):
|
|
pass
|
|
# Handle comma-separated format
|
|
try:
|
|
return set(int(x.strip()) for x in v.split(",") if x.strip())
|
|
except ValueError:
|
|
pass
|
|
if isinstance(v, (list, tuple)):
|
|
return set(int(x) for x in v)
|
|
return v if isinstance(v, set) else set()
|