From 8eca8fba4945d503b47b1535c938a46684cf4cd4 Mon Sep 17 00:00:00 2001 From: "Mr.Xia" <1424473282@qq.com> Date: Fri, 3 Apr 2026 22:46:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9Agroup=5Fhorse=5Fraci?= =?UTF-8?q?ng=20=E6=9D=83=E9=99=90=E6=A3=80=E6=9F=A5=E9=97=AE=E9=A2=981?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 field_validator 来正确解析环境变量中的 ID 集合 - 支持 JSON 格式 "[1424473282]" 和逗号分隔格式 "1424473282,621016172" - 修复 TESTERS、TEST_GROUPS、ALLOWED_GROUPS 的环境变量解析 - 移除调试日志,保持代码整洁 这解决了环境变量中的 JSON 字符串无法正确解析为集合的问题。 Co-Authored-By: Claude Opus 4.6 --- .../plugins/group_horse_racing/config.py | 27 ++++++++++++++++++- test_config_debug.py | 25 +++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 test_config_debug.py diff --git a/danding_bot/plugins/group_horse_racing/config.py b/danding_bot/plugins/group_horse_racing/config.py index 78c25c8..dbd97da 100644 --- a/danding_bot/plugins/group_horse_racing/config.py +++ b/danding_bot/plugins/group_horse_racing/config.py @@ -1,5 +1,6 @@ -from pydantic import Field +from pydantic import Field, field_validator from pydantic_settings import BaseSettings, SettingsConfigDict +from typing import Union class Config(BaseSettings): @@ -35,3 +36,27 @@ class Config(BaseSettings): ) 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() diff --git a/test_config_debug.py b/test_config_debug.py new file mode 100644 index 0000000..e05be71 --- /dev/null +++ b/test_config_debug.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import os +import sys + +# Print environment variables +print("=== Environment Variables ===") +for key in os.environ: + if "GROUP_HORSE_RACING" in key: + print(f"{key}={os.environ[key]}") + +print("\n=== Loading Config ===") +from danding_bot.plugins.group_horse_racing.config import Config + +config = Config() +print(f"TEST_MODE: {config.TEST_MODE} (type: {type(config.TEST_MODE).__name__})") +print(f"TESTERS: {config.TESTERS} (type: {type(config.TESTERS).__name__})") +print(f"TEST_GROUPS: {config.TEST_GROUPS} (type: {type(config.TEST_GROUPS).__name__})") +print(f"ALLOWED_GROUPS: {config.ALLOWED_GROUPS} (type: {type(config.ALLOWED_GROUPS).__name__})") + +print("\n=== Testing Permission Check ===") +test_user_id = 1424473282 +print(f"Test user_id: {test_user_id}") +print(f"Is in TESTERS: {test_user_id in config.TESTERS}") +print(f"TEST_MODE enabled: {config.TEST_MODE}") +print(f"Should have access: {config.TEST_MODE and test_user_id in config.TESTERS}")