testenv1
This commit is contained in:
@@ -1,28 +1,27 @@
|
||||
from pydantic import Field, field_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from typing import Union
|
||||
import os
|
||||
import json
|
||||
|
||||
|
||||
class Config(BaseSettings):
|
||||
model_config = SettingsConfigDict(
|
||||
extra="ignore",
|
||||
env_prefix="GROUP_HORSE_RACING_",
|
||||
)
|
||||
|
||||
# 测试模式配置
|
||||
TEST_MODE: bool = os.getenv("GROUP_HORSE_RACING_TEST_MODE", "False").lower() == "true"
|
||||
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 = int(os.getenv("GROUP_HORSE_RACING_PARTICIPANT_REWARD", "50"))
|
||||
CHAMPION_REWARD: int = int(os.getenv("GROUP_HORSE_RACING_CHAMPION_REWARD", "200"))
|
||||
MIN_BET: int = int(os.getenv("GROUP_HORSE_RACING_MIN_BET", "10"))
|
||||
MIN_ODDS: float = float(os.getenv("GROUP_HORSE_RACING_MIN_ODDS", "1.2"))
|
||||
RACE_DISTANCE: int = int(os.getenv("GROUP_HORSE_RACING_RACE_DISTANCE", "100"))
|
||||
RACE_TICK_INTERVAL: int = int(os.getenv("GROUP_HORSE_RACING_RACE_TICK_INTERVAL", "5"))
|
||||
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(
|
||||
@@ -40,55 +39,7 @@ class Config(BaseSettings):
|
||||
)
|
||||
|
||||
# 数据库配置
|
||||
RACE_DB_FILE: str = os.getenv("GROUP_HORSE_RACING_RACE_DB_FILE", "data/group_horse_racing/race.db")
|
||||
|
||||
def __init__(self, **data):
|
||||
super().__init__(**data)
|
||||
# 从环境变量解析 TESTERS
|
||||
testers_env = os.getenv("GROUP_HORSE_RACING_TESTERS", "")
|
||||
if testers_env:
|
||||
self.TESTERS = self._parse_id_set(testers_env)
|
||||
|
||||
# 从环境变量解析 TEST_GROUPS
|
||||
test_groups_env = os.getenv("GROUP_HORSE_RACING_TEST_GROUPS", "")
|
||||
if test_groups_env:
|
||||
self.TEST_GROUPS = self._parse_id_set(test_groups_env)
|
||||
|
||||
# 从环境变量解析 ALLOWED_GROUPS
|
||||
allowed_groups_env = os.getenv("GROUP_HORSE_RACING_ALLOWED_GROUPS", "")
|
||||
if allowed_groups_env:
|
||||
self.ALLOWED_GROUPS = self._parse_id_set(allowed_groups_env)
|
||||
|
||||
# 调试:输出所有从环境变量获取的配置
|
||||
print("[group_horse_racing] Config loaded from env:")
|
||||
print(f" TEST_MODE = {self.TEST_MODE} (env: {os.getenv('GROUP_HORSE_RACING_TEST_MODE', '')!r})")
|
||||
print(f" TESTERS = {self.TESTERS} (env: {os.getenv('GROUP_HORSE_RACING_TESTERS', '')!r})")
|
||||
print(f" TEST_GROUPS = {self.TEST_GROUPS} (env: {os.getenv('GROUP_HORSE_RACING_TEST_GROUPS', '')!r})")
|
||||
print(f" ALLOWED_GROUPS = {self.ALLOWED_GROUPS} (env: {os.getenv('GROUP_HORSE_RACING_ALLOWED_GROUPS', '')!r})")
|
||||
print(f" PARTICIPANT_REWARD = {self.PARTICIPANT_REWARD}")
|
||||
print(f" CHAMPION_REWARD = {self.CHAMPION_REWARD}")
|
||||
print(f" MIN_BET = {self.MIN_BET}")
|
||||
print(f" MIN_ODDS = {self.MIN_ODDS}")
|
||||
print(f" RACE_DISTANCE = {self.RACE_DISTANCE}")
|
||||
print(f" RACE_TICK_INTERVAL = {self.RACE_TICK_INTERVAL}")
|
||||
print(f" RACE_DB_FILE = {self.RACE_DB_FILE}")
|
||||
|
||||
@staticmethod
|
||||
def _parse_id_set(v: str) -> set[int]:
|
||||
"""Parse ID sets from various formats."""
|
||||
# Handle JSON string format like "[1424473282]"
|
||||
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
|
||||
return set()
|
||||
RACE_DB_FILE: str = "data/group_horse_racing/race.db"
|
||||
|
||||
@field_validator("TESTERS", "TEST_GROUPS", "ALLOWED_GROUPS", mode="before")
|
||||
@classmethod
|
||||
@@ -101,3 +52,18 @@ class Config(BaseSettings):
|
||||
if isinstance(v, (list, tuple)):
|
||||
return set(int(x) for x in v)
|
||||
return v if isinstance(v, set) else set()
|
||||
|
||||
@staticmethod
|
||||
def _parse_id_set(v: str) -> set[int]:
|
||||
"""Parse ID sets from various formats."""
|
||||
try:
|
||||
parsed = json.loads(v)
|
||||
if isinstance(parsed, list):
|
||||
return set(int(x) for x in parsed)
|
||||
except (json.JSONDecodeError, ValueError, TypeError):
|
||||
pass
|
||||
try:
|
||||
return set(int(x.strip()) for x in v.split(",") if x.strip())
|
||||
except ValueError:
|
||||
pass
|
||||
return set()
|
||||
|
||||
Reference in New Issue
Block a user