From 2184c558a4092dcbc96d1f2e86b73d74828dc565 Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Tue, 25 Apr 2023 09:31:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=BB=86=E5=8C=96=E5=88=B0=E5=8D=95=E4=B8=AA=E7=BE=A4=E7=9A=84?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/qqbot/manager.py | 48 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/pkg/qqbot/manager.py b/pkg/qqbot/manager.py index 4a1b8c78..91e9da46 100644 --- a/pkg/qqbot/manager.py +++ b/pkg/qqbot/manager.py @@ -25,10 +25,18 @@ import pkg.qqbot.adapter as msadapter # 检查消息是否符合泛响应匹配机制 -def check_response_rule(text: str): +def check_response_rule(group_id:int, text: str): config = pkg.utils.context.get_config() rules = config.response_rules + + # 检查是否有特定规则 + if 'prefix' not in config.response_rules: + if str(group_id) in config.response_rules: + rules = config.response_rules[str(group_id)] + else: + rules = config.response_rules['default'] + # 检查前缀匹配 if 'prefix' in rules: for rule in rules['prefix']: @@ -46,19 +54,39 @@ def check_response_rule(text: str): return False, "" -def response_at(): +def response_at(group_id: int): config = pkg.utils.context.get_config() - if 'at' not in config.response_rules: + + use_response_rule = config.response_rules + + # 检查是否有特定规则 + if 'prefix' not in config.response_rules: + if str(group_id) in config.response_rules: + use_response_rule = config.response_rules[str(group_id)] + else: + use_response_rule = config.response_rules['default'] + + if 'at' not in use_response_rule: return True - return config.response_rules['at'] + return use_response_rule['at'] -def random_responding(): +def random_responding(group_id): config = pkg.utils.context.get_config() - if 'random_rate' in config.response_rules: + + use_response_rule = config.response_rules + + # 检查是否有特定规则 + if 'prefix' not in config.response_rules: + if str(group_id) in config.response_rules: + use_response_rule = config.response_rules[str(group_id)] + else: + use_response_rule = config.response_rules['default'] + + if 'random_rate' in use_response_rule: import random - return random.random() < config.response_rules['random_rate'] + return random.random() < use_response_rule['random_rate'] return False @@ -317,16 +345,16 @@ class QQBotManager: if Image in event.message_chain: pass else: - if At(self.bot_account_id) in event.message_chain and response_at(): + if At(self.bot_account_id) in event.message_chain and response_at(event.group.id): # 直接调用 reply = process() else: - check, result = check_response_rule(str(event.message_chain).strip()) + check, result = check_response_rule(event.group.id, str(event.message_chain).strip()) if check: reply = process(result.strip()) # 检查是否随机响应 - elif random_responding(): + elif random_responding(event.group.id): logging.info("随机响应group_{}消息".format(event.group.id)) reply = process()