feat: 修改默认的ruff配置文件,同时消除config的所有不符合规范的地方
This commit is contained in:
@@ -1,6 +1,14 @@
|
|||||||
[tool.ruff]
|
|
||||||
include = ["*.py"]
|
include = ["*.py"]
|
||||||
|
|
||||||
|
# 行长度设置
|
||||||
|
line-length = 120
|
||||||
|
|
||||||
|
[lint]
|
||||||
fixable = ["ALL"]
|
fixable = ["ALL"]
|
||||||
|
unfixable = []
|
||||||
|
|
||||||
|
# 如果一个变量的名称以下划线开头,即使它未被使用,也不应该被视为错误或警告。
|
||||||
|
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
||||||
|
|
||||||
# 启用的规则
|
# 启用的规则
|
||||||
select = [
|
select = [
|
||||||
@@ -11,16 +19,11 @@ select = [
|
|||||||
|
|
||||||
ignore = ["E711"]
|
ignore = ["E711"]
|
||||||
|
|
||||||
# 如果一个变量的名称以下划线开头,即使它未被使用,也不应该被视为错误或警告。
|
[format]
|
||||||
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
|
||||||
|
|
||||||
# 行长度设置
|
|
||||||
line-length = 120
|
|
||||||
|
|
||||||
[tool.ruff.format]
|
|
||||||
docstring-code-format = true
|
docstring-code-format = true
|
||||||
indent-style = "space"
|
indent-style = "space"
|
||||||
|
|
||||||
|
|
||||||
# 使用双引号表示字符串
|
# 使用双引号表示字符串
|
||||||
quote-style = "double"
|
quote-style = "double"
|
||||||
|
|
||||||
@@ -12,6 +12,7 @@ from packaging.specifiers import SpecifierSet, InvalidSpecifier
|
|||||||
@dataclass
|
@dataclass
|
||||||
class BotConfig:
|
class BotConfig:
|
||||||
"""机器人配置类"""
|
"""机器人配置类"""
|
||||||
|
|
||||||
INNER_VERSION: Version = None
|
INNER_VERSION: Version = None
|
||||||
|
|
||||||
BOT_QQ: Optional[int] = 1
|
BOT_QQ: Optional[int] = 1
|
||||||
@@ -81,23 +82,25 @@ class BotConfig:
|
|||||||
PROMPT_PERSONALITY = [
|
PROMPT_PERSONALITY = [
|
||||||
"曾经是一个学习地质的女大学生,现在学习心理学和脑科学,你会刷贴吧",
|
"曾经是一个学习地质的女大学生,现在学习心理学和脑科学,你会刷贴吧",
|
||||||
"是一个女大学生,你有黑色头发,你会刷小红书",
|
"是一个女大学生,你有黑色头发,你会刷小红书",
|
||||||
"是一个女大学生,你会刷b站,对ACG文化感兴趣"
|
"是一个女大学生,你会刷b站,对ACG文化感兴趣",
|
||||||
]
|
]
|
||||||
|
|
||||||
PROMPT_SCHEDULE_GEN="一个曾经学习地质,现在学习心理学和脑科学的女大学生,喜欢刷qq,贴吧,知乎和小红书"
|
PROMPT_SCHEDULE_GEN = "一个曾经学习地质,现在学习心理学和脑科学的女大学生,喜欢刷qq,贴吧,知乎和小红书"
|
||||||
|
|
||||||
PERSONALITY_1: float = 0.6 # 第一种人格概率
|
PERSONALITY_1: float = 0.6 # 第一种人格概率
|
||||||
PERSONALITY_2: float = 0.3 # 第二种人格概率
|
PERSONALITY_2: float = 0.3 # 第二种人格概率
|
||||||
PERSONALITY_3: float = 0.1 # 第三种人格概率
|
PERSONALITY_3: float = 0.1 # 第三种人格概率
|
||||||
|
|
||||||
memory_ban_words: list = field(default_factory=lambda: ['表情包', '图片', '回复', '聊天记录']) # 添加新的配置项默认值
|
memory_ban_words: list = field(
|
||||||
|
default_factory=lambda: ["表情包", "图片", "回复", "聊天记录"]
|
||||||
|
) # 添加新的配置项默认值
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_config_dir() -> str:
|
def get_config_dir() -> str:
|
||||||
"""获取配置文件目录"""
|
"""获取配置文件目录"""
|
||||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
root_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..'))
|
root_dir = os.path.abspath(os.path.join(current_dir, "..", "..", ".."))
|
||||||
config_dir = os.path.join(root_dir, 'config')
|
config_dir = os.path.join(root_dir, "config")
|
||||||
if not os.path.exists(config_dir):
|
if not os.path.exists(config_dir):
|
||||||
os.makedirs(config_dir)
|
os.makedirs(config_dir)
|
||||||
return config_dir
|
return config_dir
|
||||||
@@ -114,10 +117,7 @@ class BotConfig:
|
|||||||
try:
|
try:
|
||||||
converted = SpecifierSet(value)
|
converted = SpecifierSet(value)
|
||||||
except InvalidSpecifier:
|
except InvalidSpecifier:
|
||||||
logger.error(
|
logger.error(f"{value} 分类使用了错误的版本约束表达式\n", "请阅读 https://semver.org/lang/zh-CN/ 修改代码")
|
||||||
f"{value} 分类使用了错误的版本约束表达式\n",
|
|
||||||
"请阅读 https://semver.org/lang/zh-CN/ 修改代码"
|
|
||||||
)
|
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
return converted
|
return converted
|
||||||
@@ -131,25 +131,25 @@ class BotConfig:
|
|||||||
Version
|
Version
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if 'inner' in toml:
|
if "inner" in toml:
|
||||||
try:
|
try:
|
||||||
config_version: str = toml["inner"]["version"]
|
config_version: str = toml["inner"]["version"]
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
logger.error("配置文件中 inner 段 不存在, 这是错误的配置文件")
|
logger.error("配置文件中 inner 段 不存在, 这是错误的配置文件")
|
||||||
raise KeyError(f"配置文件中 inner 段 不存在 {e}, 这是错误的配置文件")
|
raise KeyError(f"配置文件中 inner 段 不存在 {e}, 这是错误的配置文件") from e
|
||||||
else:
|
else:
|
||||||
toml["inner"] = {"version": "0.0.0"}
|
toml["inner"] = {"version": "0.0.0"}
|
||||||
config_version = toml["inner"]["version"]
|
config_version = toml["inner"]["version"]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ver = version.parse(config_version)
|
ver = version.parse(config_version)
|
||||||
except InvalidVersion:
|
except InvalidVersion as e:
|
||||||
logger.error(
|
logger.error(
|
||||||
"配置文件中 inner段 的 version 键是错误的版本描述\n"
|
"配置文件中 inner段 的 version 键是错误的版本描述\n"
|
||||||
"请阅读 https://semver.org/lang/zh-CN/ 修改配置,并参考本项目指定的模板进行修改\n"
|
"请阅读 https://semver.org/lang/zh-CN/ 修改配置,并参考本项目指定的模板进行修改\n"
|
||||||
"本项目在不同的版本下有不同的模板,请注意识别"
|
"本项目在不同的版本下有不同的模板,请注意识别"
|
||||||
)
|
)
|
||||||
raise InvalidVersion("配置文件中 inner段 的 version 键是错误的版本描述\n")
|
raise InvalidVersion("配置文件中 inner段 的 version 键是错误的版本描述\n") from e
|
||||||
|
|
||||||
return ver
|
return ver
|
||||||
|
|
||||||
@@ -159,26 +159,26 @@ class BotConfig:
|
|||||||
config = cls()
|
config = cls()
|
||||||
|
|
||||||
def personality(parent: dict):
|
def personality(parent: dict):
|
||||||
personality_config = parent['personality']
|
personality_config = parent["personality"]
|
||||||
personality = personality_config.get('prompt_personality')
|
personality = personality_config.get("prompt_personality")
|
||||||
if len(personality) >= 2:
|
if len(personality) >= 2:
|
||||||
logger.debug(f"载入自定义人格:{personality}")
|
logger.debug(f"载入自定义人格:{personality}")
|
||||||
config.PROMPT_PERSONALITY = personality_config.get('prompt_personality', config.PROMPT_PERSONALITY)
|
config.PROMPT_PERSONALITY = personality_config.get("prompt_personality", config.PROMPT_PERSONALITY)
|
||||||
logger.info(f"载入自定义日程prompt:{personality_config.get('prompt_schedule', config.PROMPT_SCHEDULE_GEN)}")
|
logger.info(f"载入自定义日程prompt:{personality_config.get('prompt_schedule', config.PROMPT_SCHEDULE_GEN)}")
|
||||||
config.PROMPT_SCHEDULE_GEN = personality_config.get('prompt_schedule', config.PROMPT_SCHEDULE_GEN)
|
config.PROMPT_SCHEDULE_GEN = personality_config.get("prompt_schedule", config.PROMPT_SCHEDULE_GEN)
|
||||||
|
|
||||||
if config.INNER_VERSION in SpecifierSet(">=0.0.2"):
|
if config.INNER_VERSION in SpecifierSet(">=0.0.2"):
|
||||||
config.PERSONALITY_1 = personality_config.get('personality_1_probability', config.PERSONALITY_1)
|
config.PERSONALITY_1 = personality_config.get("personality_1_probability", config.PERSONALITY_1)
|
||||||
config.PERSONALITY_2 = personality_config.get('personality_2_probability', config.PERSONALITY_2)
|
config.PERSONALITY_2 = personality_config.get("personality_2_probability", config.PERSONALITY_2)
|
||||||
config.PERSONALITY_3 = personality_config.get('personality_3_probability', config.PERSONALITY_3)
|
config.PERSONALITY_3 = personality_config.get("personality_3_probability", config.PERSONALITY_3)
|
||||||
|
|
||||||
def emoji(parent: dict):
|
def emoji(parent: dict):
|
||||||
emoji_config = parent["emoji"]
|
emoji_config = parent["emoji"]
|
||||||
config.EMOJI_CHECK_INTERVAL = emoji_config.get("check_interval", config.EMOJI_CHECK_INTERVAL)
|
config.EMOJI_CHECK_INTERVAL = emoji_config.get("check_interval", config.EMOJI_CHECK_INTERVAL)
|
||||||
config.EMOJI_REGISTER_INTERVAL = emoji_config.get("register_interval", config.EMOJI_REGISTER_INTERVAL)
|
config.EMOJI_REGISTER_INTERVAL = emoji_config.get("register_interval", config.EMOJI_REGISTER_INTERVAL)
|
||||||
config.EMOJI_CHECK_PROMPT = emoji_config.get('check_prompt', config.EMOJI_CHECK_PROMPT)
|
config.EMOJI_CHECK_PROMPT = emoji_config.get("check_prompt", config.EMOJI_CHECK_PROMPT)
|
||||||
config.EMOJI_SAVE = emoji_config.get('auto_save', config.EMOJI_SAVE)
|
config.EMOJI_SAVE = emoji_config.get("auto_save", config.EMOJI_SAVE)
|
||||||
config.EMOJI_CHECK = emoji_config.get('enable_check', config.EMOJI_CHECK)
|
config.EMOJI_CHECK = emoji_config.get("enable_check", config.EMOJI_CHECK)
|
||||||
|
|
||||||
def cq_code(parent: dict):
|
def cq_code(parent: dict):
|
||||||
cq_code_config = parent["cq_code"]
|
cq_code_config = parent["cq_code"]
|
||||||
@@ -195,8 +195,9 @@ class BotConfig:
|
|||||||
response_config = parent["response"]
|
response_config = parent["response"]
|
||||||
config.MODEL_R1_PROBABILITY = response_config.get("model_r1_probability", config.MODEL_R1_PROBABILITY)
|
config.MODEL_R1_PROBABILITY = response_config.get("model_r1_probability", config.MODEL_R1_PROBABILITY)
|
||||||
config.MODEL_V3_PROBABILITY = response_config.get("model_v3_probability", config.MODEL_V3_PROBABILITY)
|
config.MODEL_V3_PROBABILITY = response_config.get("model_v3_probability", config.MODEL_V3_PROBABILITY)
|
||||||
config.MODEL_R1_DISTILL_PROBABILITY = response_config.get("model_r1_distill_probability",
|
config.MODEL_R1_DISTILL_PROBABILITY = response_config.get(
|
||||||
config.MODEL_R1_DISTILL_PROBABILITY)
|
"model_r1_distill_probability", config.MODEL_R1_DISTILL_PROBABILITY
|
||||||
|
)
|
||||||
config.max_response_length = response_config.get("max_response_length", config.max_response_length)
|
config.max_response_length = response_config.get("max_response_length", config.max_response_length)
|
||||||
|
|
||||||
def model(parent: dict):
|
def model(parent: dict):
|
||||||
@@ -213,7 +214,7 @@ class BotConfig:
|
|||||||
"llm_emotion_judge",
|
"llm_emotion_judge",
|
||||||
"vlm",
|
"vlm",
|
||||||
"embedding",
|
"embedding",
|
||||||
"moderation"
|
"moderation",
|
||||||
]
|
]
|
||||||
|
|
||||||
for item in config_list:
|
for item in config_list:
|
||||||
@@ -222,13 +223,7 @@ class BotConfig:
|
|||||||
|
|
||||||
# base_url 的例子: SILICONFLOW_BASE_URL
|
# base_url 的例子: SILICONFLOW_BASE_URL
|
||||||
# key 的例子: SILICONFLOW_KEY
|
# key 的例子: SILICONFLOW_KEY
|
||||||
cfg_target = {
|
cfg_target = {"name": "", "base_url": "", "key": "", "pri_in": 0, "pri_out": 0}
|
||||||
"name": "",
|
|
||||||
"base_url": "",
|
|
||||||
"key": "",
|
|
||||||
"pri_in": 0,
|
|
||||||
"pri_out": 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.INNER_VERSION in SpecifierSet("<=0.0.0"):
|
if config.INNER_VERSION in SpecifierSet("<=0.0.0"):
|
||||||
cfg_target = cfg_item
|
cfg_target = cfg_item
|
||||||
@@ -247,7 +242,7 @@ class BotConfig:
|
|||||||
cfg_target[i] = cfg_item[i]
|
cfg_target[i] = cfg_item[i]
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
logger.error(f"{item} 中的必要字段不存在,请检查")
|
logger.error(f"{item} 中的必要字段不存在,请检查")
|
||||||
raise KeyError(f"{item} 中的必要字段 {e} 不存在,请检查")
|
raise KeyError(f"{item} 中的必要字段 {e} 不存在,请检查") from e
|
||||||
|
|
||||||
provider = cfg_item.get("provider")
|
provider = cfg_item.get("provider")
|
||||||
if provider is None:
|
if provider is None:
|
||||||
@@ -272,10 +267,12 @@ class BotConfig:
|
|||||||
|
|
||||||
if config.INNER_VERSION in SpecifierSet(">=0.0.2"):
|
if config.INNER_VERSION in SpecifierSet(">=0.0.2"):
|
||||||
config.thinking_timeout = msg_config.get("thinking_timeout", config.thinking_timeout)
|
config.thinking_timeout = msg_config.get("thinking_timeout", config.thinking_timeout)
|
||||||
config.response_willing_amplifier = msg_config.get("response_willing_amplifier",
|
config.response_willing_amplifier = msg_config.get(
|
||||||
config.response_willing_amplifier)
|
"response_willing_amplifier", config.response_willing_amplifier
|
||||||
config.response_interested_rate_amplifier = msg_config.get("response_interested_rate_amplifier",
|
)
|
||||||
config.response_interested_rate_amplifier)
|
config.response_interested_rate_amplifier = msg_config.get(
|
||||||
|
"response_interested_rate_amplifier", config.response_interested_rate_amplifier
|
||||||
|
)
|
||||||
config.down_frequency_rate = msg_config.get("down_frequency_rate", config.down_frequency_rate)
|
config.down_frequency_rate = msg_config.get("down_frequency_rate", config.down_frequency_rate)
|
||||||
|
|
||||||
def memory(parent: dict):
|
def memory(parent: dict):
|
||||||
@@ -303,10 +300,12 @@ class BotConfig:
|
|||||||
config.chinese_typo_enable = chinese_typo_config.get("enable", config.chinese_typo_enable)
|
config.chinese_typo_enable = chinese_typo_config.get("enable", config.chinese_typo_enable)
|
||||||
config.chinese_typo_error_rate = chinese_typo_config.get("error_rate", config.chinese_typo_error_rate)
|
config.chinese_typo_error_rate = chinese_typo_config.get("error_rate", config.chinese_typo_error_rate)
|
||||||
config.chinese_typo_min_freq = chinese_typo_config.get("min_freq", config.chinese_typo_min_freq)
|
config.chinese_typo_min_freq = chinese_typo_config.get("min_freq", config.chinese_typo_min_freq)
|
||||||
config.chinese_typo_tone_error_rate = chinese_typo_config.get("tone_error_rate",
|
config.chinese_typo_tone_error_rate = chinese_typo_config.get(
|
||||||
config.chinese_typo_tone_error_rate)
|
"tone_error_rate", config.chinese_typo_tone_error_rate
|
||||||
config.chinese_typo_word_replace_rate = chinese_typo_config.get("word_replace_rate",
|
)
|
||||||
config.chinese_typo_word_replace_rate)
|
config.chinese_typo_word_replace_rate = chinese_typo_config.get(
|
||||||
|
"word_replace_rate", config.chinese_typo_word_replace_rate
|
||||||
|
)
|
||||||
|
|
||||||
def groups(parent: dict):
|
def groups(parent: dict):
|
||||||
groups_config = parent["groups"]
|
groups_config = parent["groups"]
|
||||||
@@ -325,61 +324,19 @@ class BotConfig:
|
|||||||
# 例如:"notice": "personality 将在 1.3.2 后被移除",那么在有效版本中的用户就会虽然可以
|
# 例如:"notice": "personality 将在 1.3.2 后被移除",那么在有效版本中的用户就会虽然可以
|
||||||
# 正常执行程序,但是会看到这条自定义提示
|
# 正常执行程序,但是会看到这条自定义提示
|
||||||
include_configs = {
|
include_configs = {
|
||||||
"personality": {
|
"personality": {"func": personality, "support": ">=0.0.0"},
|
||||||
"func": personality,
|
"emoji": {"func": emoji, "support": ">=0.0.0"},
|
||||||
"support": ">=0.0.0"
|
"cq_code": {"func": cq_code, "support": ">=0.0.0"},
|
||||||
},
|
"bot": {"func": bot, "support": ">=0.0.0"},
|
||||||
"emoji": {
|
"response": {"func": response, "support": ">=0.0.0"},
|
||||||
"func": emoji,
|
"model": {"func": model, "support": ">=0.0.0"},
|
||||||
"support": ">=0.0.0"
|
"message": {"func": message, "support": ">=0.0.0"},
|
||||||
},
|
"memory": {"func": memory, "support": ">=0.0.0", "necessary": False},
|
||||||
"cq_code": {
|
"mood": {"func": mood, "support": ">=0.0.0"},
|
||||||
"func": cq_code,
|
"keywords_reaction": {"func": keywords_reaction, "support": ">=0.0.2", "necessary": False},
|
||||||
"support": ">=0.0.0"
|
"chinese_typo": {"func": chinese_typo, "support": ">=0.0.3", "necessary": False},
|
||||||
},
|
"groups": {"func": groups, "support": ">=0.0.0"},
|
||||||
"bot": {
|
"others": {"func": others, "support": ">=0.0.0"},
|
||||||
"func": bot,
|
|
||||||
"support": ">=0.0.0"
|
|
||||||
},
|
|
||||||
"response": {
|
|
||||||
"func": response,
|
|
||||||
"support": ">=0.0.0"
|
|
||||||
},
|
|
||||||
"model": {
|
|
||||||
"func": model,
|
|
||||||
"support": ">=0.0.0"
|
|
||||||
},
|
|
||||||
"message": {
|
|
||||||
"func": message,
|
|
||||||
"support": ">=0.0.0"
|
|
||||||
},
|
|
||||||
"memory": {
|
|
||||||
"func": memory,
|
|
||||||
"support": ">=0.0.0",
|
|
||||||
"necessary": False
|
|
||||||
},
|
|
||||||
"mood": {
|
|
||||||
"func": mood,
|
|
||||||
"support": ">=0.0.0"
|
|
||||||
},
|
|
||||||
"keywords_reaction": {
|
|
||||||
"func": keywords_reaction,
|
|
||||||
"support": ">=0.0.2",
|
|
||||||
"necessary": False
|
|
||||||
},
|
|
||||||
"chinese_typo": {
|
|
||||||
"func": chinese_typo,
|
|
||||||
"support": ">=0.0.3",
|
|
||||||
"necessary": False
|
|
||||||
},
|
|
||||||
"groups": {
|
|
||||||
"func": groups,
|
|
||||||
"support": ">=0.0.0"
|
|
||||||
},
|
|
||||||
"others": {
|
|
||||||
"func": others,
|
|
||||||
"support": ">=0.0.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 原地修改,将 字符串版本表达式 转换成 版本对象
|
# 原地修改,将 字符串版本表达式 转换成 版本对象
|
||||||
@@ -391,7 +348,7 @@ class BotConfig:
|
|||||||
with open(config_path, "rb") as f:
|
with open(config_path, "rb") as f:
|
||||||
try:
|
try:
|
||||||
toml_dict = tomli.load(f)
|
toml_dict = tomli.load(f)
|
||||||
except(tomli.TOMLDecodeError) as e:
|
except tomli.TOMLDecodeError as e:
|
||||||
logger.critical(f"配置文件bot_config.toml填写有误,请检查第{e.lineno}行第{e.colno}处:{e.msg}")
|
logger.critical(f"配置文件bot_config.toml填写有误,请检查第{e.lineno}行第{e.colno}处:{e.msg}")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
@@ -406,7 +363,7 @@ class BotConfig:
|
|||||||
# 检查配置文件版本是否在支持范围内
|
# 检查配置文件版本是否在支持范围内
|
||||||
if config.INNER_VERSION in group_specifierset:
|
if config.INNER_VERSION in group_specifierset:
|
||||||
# 如果版本在支持范围内,检查是否存在通知
|
# 如果版本在支持范围内,检查是否存在通知
|
||||||
if 'notice' in include_configs[key]:
|
if "notice" in include_configs[key]:
|
||||||
logger.warning(include_configs[key]["notice"])
|
logger.warning(include_configs[key]["notice"])
|
||||||
|
|
||||||
include_configs[key]["func"](toml_dict)
|
include_configs[key]["func"](toml_dict)
|
||||||
@@ -420,7 +377,7 @@ class BotConfig:
|
|||||||
raise InvalidVersion(f"当前程序仅支持以下版本范围: {group_specifierset}")
|
raise InvalidVersion(f"当前程序仅支持以下版本范围: {group_specifierset}")
|
||||||
|
|
||||||
# 如果 necessary 项目存在,而且显式声明是 False,进入特殊处理
|
# 如果 necessary 项目存在,而且显式声明是 False,进入特殊处理
|
||||||
elif "necessary" in include_configs[key] and include_configs[key].get("necessary") == False:
|
elif "necessary" in include_configs[key] and include_configs[key].get("necessary") is False:
|
||||||
# 通过 pass 处理的项虽然直接忽略也是可以的,但是为了不增加理解困难,依然需要在这里显式处理
|
# 通过 pass 处理的项虽然直接忽略也是可以的,但是为了不增加理解困难,依然需要在这里显式处理
|
||||||
if key == "keywords_reaction":
|
if key == "keywords_reaction":
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user