From 007e82c5334706066f48ae66783838a4992436d1 Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Tue, 25 Apr 2023 09:28:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config-template.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/config-template.py b/config-template.py index 3ade6830..f7df2096 100644 --- a/config-template.py +++ b/config-template.py @@ -123,13 +123,36 @@ preset_mode = "normal" # 注意:由消息前缀(prefix)匹配的消息中将会删除此前缀,正则表达式(regexp)匹配的消息不会删除匹配的部分 # 前缀匹配优先级高于正则表达式匹配 # 正则表达式简明教程:https://www.runoob.com/regexp/regexp-tutorial.html +# +# 支持针对不同群设置不同的响应规则,例如: +# response_rules = { +# "default": { +# "at": True, +# "prefix": ["/ai", "!ai", "!ai", "ai"], +# "regexp": [], +# "random_rate": 0.0, +# }, +# "12345678": { +# "at": False, +# "prefix": ["/ai", "!ai", "!ai", "ai"], +# "regexp": [], +# "random_rate": 0.0, +# }, +# } +# +# 以上设置将会在群号为12345678的群中关闭at响应 +# 未单独设置的群将使用default规则 response_rules = { - "at": True, # 是否响应at机器人的消息 - "prefix": ["/ai", "!ai", "!ai", "ai"], - "regexp": [], # "为什么.*", "怎么?样.*", "怎么.*", "如何.*", "[Hh]ow to.*", "[Ww]hy not.*", "[Ww]hat is.*", ".*怎么办", ".*咋办" - "random_rate": 0.0, # 随机响应概率,0.0-1.0,0.0为不随机响应,1.0为响应所有消息, 仅在前几项判断不通过时生效 + "default": { + "at": True, # 是否响应at机器人的消息 + "prefix": ["/ai", "!ai", "!ai", "ai"], + "regexp": [], # "为什么.*", "怎么?样.*", "怎么.*", "如何.*", "[Hh]ow to.*", "[Ww]hy not.*", "[Ww]hat is.*", ".*怎么办", ".*咋办" + "random_rate": 0.0, # 随机响应概率,0.0-1.0,0.0为不随机响应,1.0为响应所有消息, 仅在前几项判断不通过时生效 + }, } + + # 消息忽略规则 # 适用于私聊及群聊 # 符合此规则的消息将不会被响应 From 83cb8588fde9a1a103eba19b705b24152ee99f08 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 25 Apr 2023 01:28:56 +0000 Subject: [PATCH 2/3] Update override-all.json --- override-all.json | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/override-all.json b/override-all.json index 737afb34..b99b91c0 100644 --- a/override-all.json +++ b/override-all.json @@ -27,15 +27,17 @@ }, "preset_mode": "normal", "response_rules": { - "at": true, - "prefix": [ - "/ai", - "!ai", - "!ai", - "ai" - ], - "regexp": [], - "random_rate": 0.0 + "default": { + "at": true, + "prefix": [ + "/ai", + "!ai", + "!ai", + "ai" + ], + "regexp": [], + "random_rate": 0.0 + } }, "ignore_rules": { "prefix": [ 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 3/3] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=BB=86=E5=8C=96=E5=88=B0=E5=8D=95=E4=B8=AA=E7=BE=A4?= =?UTF-8?q?=E7=9A=84=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()