From bc7c37012fb922317091912e35f9d80d70a0e766 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Wed, 20 Dec 2023 18:13:59 +0800 Subject: [PATCH] Update --- update_clash.example.yaml | 13 ++++++++++++- update_clash.py | 23 +++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/update_clash.example.yaml b/update_clash.example.yaml index 12dec8f..7773df6 100644 --- a/update_clash.example.yaml +++ b/update_clash.example.yaml @@ -20,6 +20,9 @@ proxies: type: socks5 server: localhost port: 7891 +# 保留来自订阅来源的订阅组 +# 默认 false +keep-proxy-groups: true # 添加自定义规则组 proxy-groups: - name: all @@ -28,6 +31,7 @@ proxy-groups: - group1 - group2 # 是否将DIRECT加至列表 + # 默认 false add-direct: true - name: JP type: select @@ -38,8 +42,15 @@ proxy-groups: - name: All type: select # 将所有节点/组加至列表 + # 默认 false match-all: true add-direct: true -# 自定义节点(默认覆盖) +# 保留来自订阅来源的规则 +# 默认 false +keep-rules: true +# 将自定义规则加到来自订阅的规则前 +# 默认 false +prepend-rules: false +# 自定义规则 rules: - MATCH,All diff --git a/update_clash.py b/update_clash.py index 6a515fc..f0aea01 100644 --- a/update_clash.py +++ b/update_clash.py @@ -33,6 +33,11 @@ with open(config["dest"]) as f: dest["proxies"] = [] dest["proxy-groups"] = [] more_groups = [] +keep_rules = config["keep-rules"] if "keep-rules" in config else False +prepend_rules = config["prepend-rules"] if "prepend-rules" in config else False +if keep_rules: + dest["rules"] = [] +last_match_rule = "MATCH,DIRECT" for s in src: add_group = False if isinstance(s, dict): @@ -43,6 +48,9 @@ for s in src: raise ValueError(f"Failed to download src: {s}") dest["proxies"] += ori["proxies"] dest["proxy-groups"] += ori["proxy-groups"] + if keep_rules: + dest["rules"] += ori["rules"][:-1] + last_match_rule = ori["rules"][-1] if add_group: more_groups.append({ "name": s["name"], @@ -51,8 +59,10 @@ for s in src: }) if "proxies" in config: dest["proxies"] += config["proxies"] +keep_proxy_groups = config["keep-proxy-groups"] if "keep-proxy-groups" in config else False if "proxy-groups" in config: - dest["proxy-groups"] = [] + if not keep_proxy_groups: + dest["proxy-groups"] = [] for group in config["proxy-groups"]: if 'proxies' not in group: group['proxies'] = [] @@ -75,6 +85,15 @@ if "proxy-groups" in config: dest["proxy-groups"].append(group) dest["proxy-groups"] += more_groups if 'rules' in config: - dest['rules'] = config['rules'] + if keep_rules: + if prepend_rules: + dest['rules'] = config['rules'][:-1] + dest['rules'] + dest['rules'].append(config['rules'][-1]) + else: + dest['rules'] += config['rules'] + else: + dest['rules'] = config['rules'] +elif keep_rules: + dest['rules'].append(last_match_rule) with open(config["dest"], "w") as f: dump(dest, f, Dumper=SafeDumper, allow_unicode=True)