diff --git a/resouces/convert_json.py b/resouces/convert_json.py index 40fed620..2b1073ee 100755 --- a/resouces/convert_json.py +++ b/resouces/convert_json.py @@ -31,25 +31,27 @@ def main(src_path: str, out_path: str = None): def listdir_format(src_path: str, out_path: str): for item in os.listdir(src_path): - if os.path.isdir(item): + target_path = os.path.join(src_path, item) + + if os.path.isdir(target_path): out_path2 = os.path.join(out_path, item) if os.path.exists(out_path2) is False: os.mkdir(out_path2) deug_log(f"mkdir {out_path2}") - listdir_format(os.path.join(src_path, item), out_path=out_path2) + listdir_format(target_path, out_path=out_path2) else: - converto_json(os.path.join(src_path, item), out_path=out_path) + converto_json(target_path, out_path=out_path) -def converto_json(src_file: str, out_path: str): +def read_rules_from_file(src_file: str) -> dict | None: splits = os.path.splitext(src_file) if splits[1] != ".list": - return + # deug_log(f"ERR: only support '.list' {src_file}") + return None if not os.path.isfile(src_file): - deug_log(f"ERROR FILE: {src_file}") - return + deug_log(f"ERR: not file {src_file}") + return None - out_file = os.path.join(out_path, os.path.basename(splits[0]) + ".json") content = {"version": 1, "rules": [{}]} with open(src_file, "r") as f: @@ -84,7 +86,14 @@ def converto_json(src_file: str, out_path: str): line = f.readline() # END while - if len(content['rules'][0]) == 0: + return None if len(content['rules'][0]) == 0 else content + + +def converto_json(src_file: str, out_path: str): + splits = os.path.splitext(src_file) + out_file = os.path.join(out_path, os.path.basename(splits[0]) + ".json") + content = read_rules_from_file(src_file) + if content is None: return json_string = json.dumps(content) diff --git a/resouces/kr_default_ruleset.py b/resouces/kr_default_ruleset.py new file mode 100644 index 00000000..7a2bdf64 --- /dev/null +++ b/resouces/kr_default_ruleset.py @@ -0,0 +1,214 @@ +"""merge rule-set for karing + + +- outbound: + - direct_out 直连 + - block_out 屏蔽 + - selector_out 自动选择[default] + - selected_out 当前选择 + + - default + - geoip/[area].srs + - geosite/[area].srs + +cn: + - https://github.com/ACL4SSR/ACL4SSR/tree/master/Clash/config + - ACL4SSR_Online_Full.ini + - ACL4SSR_Online.ini + +""" + +OPT_RULESET_GROUPS = {} +OPT_RULESET_GROUPS['default'] = { + '🛑 Adblock': { + 'default': 'on', + 'outbound': 'block_out', + 'rules': [ + 'acl:BanAD', + 'geosite:ads', + ], + }, + 'Ⓜ️ Bing': { + 'default': 'off', + 'outbound': 'selector_out', + 'rules': ['geoip:bing', 'geosite:bing'], + }, + 'Ⓜ️ OneDrive': 'geosite:onedrive', + 'Ⓜ️ Microsoft': { + 'default': 'off', + 'outbound': 'selector_out', + 'rules': [ + 'geosite:microsoft', + 'geosite:microsoft-dev', + 'geosite:microsoft-pki', + ], + }, + '🍎 Apple': { + 'default': 'off', + 'outbound': 'direct_out', + 'rules': [ + 'geosite:apple', + 'geosite:apple-ads', + 'geosite:apple-dev', + 'geosite:apple-pki', + 'geosite:apple-update', + ], + }, + '📲 Telegram': ['geoip:telegram', 'geosite:telegram'], + '💬 OpenAi': ['geoip:openai', 'geosite:openai'], + '🎮 Game': [ + 'acl:Epic', + 'acl:Origin', + 'acl:Sony', + 'acl:Steam', + 'acl:Nintendo', + ], + '📹 YouTube': ['geosite:youtube'], + '🎥 Netflix': ['geoip:netflix', 'geosite:netflix'], +} + +## start china +OPT_RULESET_GROUPS['cn'] = { + '🎯 国内直连': { + 'default': 'on', + 'outbound': 'direct_out', + 'rules': [ + 'acl:LocalAreaNetwork', + 'acl:UnBan', + 'acl:GoogleCN', + 'acl:SteamCN', + 'acl:ChinaIp', + 'acl:ChinaDomain', + 'acl:ChinaCompanyIp', + 'acl:Download', + ], + }, + '🛑 广告拦截': { + 'default': 'on', + 'outbound': 'block_out', + 'rules': [ + 'acl:BanAD', + 'geosite:ads', + ], + }, + '🍃 应用净化': 'acl:BanProgramAD', + '📢 谷歌FCM': {'outbound': 'selector_out', 'rules': 'Ruleset/GoogleFCM'}, + 'Ⓜ️ 微软Bing': 'Bing', + 'Ⓜ️ 微软云盘': 'OneDrive', + 'Ⓜ️ 微软服务': 'Microsoft', + '🍎 苹果服务': 'Apple', + '📲 电报消息': 'Telegram', + '💬 OpenAi': 'Ruleset/OpenAi', + '🎶 网易音乐': 'Ruleset/NetEaseMusic', + '🎮 游戏平台': [ + 'acl:Epic', + 'Ruleset/Origin', + 'Ruleset/Sony', + 'Ruleset/Steam', + 'Ruleset/Nintendo', + ], + '📹 油管视频': 'Ruleset/YouTube', + '🎥 奈飞视频': 'Ruleset/Netflix', + '📺 巴哈姆特': 'Ruleset/Bahamut', + '📺 哔哩哔哩': [ + 'Ruleset/BilibiliHMT', + 'Ruleset/Bilibili', + ], + '🌏 国内媒体': 'ChinaMedia', + '🌍 国外媒体': 'ProxyMedia', + '🚀 国外服务': 'ProxyGFWlist', +} +##end china + +##start iran +OPT_RULESET_GROUPS['ir'] = OPT_RULESET_GROUPS['default'].copy() +OPT_RULESET_GROUPS['ir']['🛑 Adblock'] = { + 'default': 'on', + 'outbound': 'block_out', + 'rules': ['acl:BanAD', 'geosite:ads', 'geosite:category-ads-ir'], +} +OPT_RULESET_GROUPS['ir']['🛑 malware'] = { + 'default': 'off', + 'outbound': 'block_out', + 'rules': ['geosite:malware'], +} +OPT_RULESET_GROUPS['ir']['📢 phishing'] = { + 'default': 'off', + 'outbound': 'direct_out', + 'rules': ['geoip:phishing', 'geosite:phishing'], +} +OPT_RULESET_GROUPS['ir']['☁️ parspack'] = { + 'default': 'off', + 'outbound': 'direct_out', + 'rules': ['geoip:parspack'], +} +##end iran + +# "rules": [ +# { +# { +# "rule_set": [ +# "geosite:6park" +# ], +# "outbound": "🇰🇷【TUIC】韩国 BGP D06", +# "name": "6park[geosite]" +# }, +# { +# "rule_set": [ +# "geoip:bing" +# ], +# "outbound": "selector_out", +# "name": "bing[geoip]" +# }, +# { +# "rule_set": [ +# "acl:BanAD" +# ], +# "outbound": "block_out", +# "name": "BanAD[acl]" +# }, +# { +# "rule_set": [ +# "acl:Amazon" +# ], +# "outbound": "selector_out", +# "name": "Amazon[acl]" +# }, +# { +# "rule_set": [ +# "acl:BBC" +# ], +# "outbound": "🇰🇷【TUIC】韩国 BGP D06", +# "name": "BBC[acl]" +# }, +# { +# "rule_set": [ +# "geosite:cn" +# ], +# "outbound": "direct_out", +# "name": "cn[geosite]" +# }, +# { +# "rule_set": [ +# "geoip:cn" +# ], +# "outbound": "direct_out", +# "name": "cn[geoip]" +# } +# ], +# "rule_set": [ +# { +# "tag": "acl:BanAD", +# "type": "local", +# "format": "binary", +# "path": "D:\\Program Files\\Karing\\data\\flutter_assets\\assets\\datas\\acl\\BanAD.srs" +# }, + + +def maker_for_area(area: str, config: dict): + pass + + +if __name__ == '__main__': + for area, config in OPT_RULESET_GROUPS.items(): + maker_for_area(area, config)