mirror of
https://github.com/asdlokj1qpi233/subconverter.git
synced 2025-10-27 20:03:01 +00:00
Add support for importing snippets
Clean up file structure.
This commit is contained in:
@@ -3,20 +3,21 @@
|
||||
;All possible customization settings are shown below
|
||||
|
||||
;Options for custom groups
|
||||
custom_proxy_group=Proxy`select`.*`[]AUTO`[]DIRECT`.*
|
||||
custom_proxy_group=AUTO`url-test`.*`http://www.gstatic.com/generate_204`300
|
||||
custom_proxy_group=google`select`.*
|
||||
custom_proxy_group=netflix`select`.*
|
||||
custom_proxy_group=动画疯`select`(深台|彰化|新北|台)
|
||||
custom_proxy_group=fox+`select`(HGC|HKBN|PCCW|HKT|深台|彰化|新北|台|新加坡|sg|hk|tw)
|
||||
custom_proxy_group=美区影视`select`(美|美国)
|
||||
custom_proxy_group=Global_media`select`.*
|
||||
custom_proxy_group=Domestic`select`[]DIRECT`[]Proxy
|
||||
custom_proxy_group=Apple`select`[]DIRECT`[]Proxy
|
||||
custom_proxy_group=Final`select`[]Proxy`[]DIRECT
|
||||
custom_proxy_group=屏蔽广告`select`[]REJECT`[]DIRECT
|
||||
custom_proxy_group=UnblockNeteaseMusic`select`云音乐解锁`[]DIRECT
|
||||
custom_proxy_group=Telegram`select`新加坡`[]Proxy
|
||||
;custom_proxy_group=Proxy`select`.*`[]AUTO`[]DIRECT`.*
|
||||
;custom_proxy_group=AUTO`url-test`.*`http://www.gstatic.com/generate_204`300
|
||||
;custom_proxy_group=google`select`.*
|
||||
;custom_proxy_group=netflix`select`.*
|
||||
;custom_proxy_group=动画疯`select`(深台|彰化|新北|台)
|
||||
;custom_proxy_group=fox+`select`(HGC|HKBN|PCCW|HKT|深台|彰化|新北|台|新加坡|sg|hk|tw)
|
||||
;custom_proxy_group=美区影视`select`(美|美国)
|
||||
;custom_proxy_group=Global_media`select`.*
|
||||
;custom_proxy_group=Domestic`select`[]DIRECT`[]Proxy
|
||||
;custom_proxy_group=Apple`select`[]DIRECT`[]Proxy
|
||||
;custom_proxy_group=Final`select`[]Proxy`[]DIRECT
|
||||
;custom_proxy_group=屏蔽广告`select`[]REJECT`[]DIRECT
|
||||
;custom_proxy_group=UnblockNeteaseMusic`select`云音乐解锁`[]DIRECT
|
||||
;custom_proxy_group=Telegram`select`新加坡`[]Proxy
|
||||
custom_proxy_group=!!import:snippets/groups_forcerule.txt
|
||||
|
||||
;Options for custom rulesets
|
||||
enable_rule_generator=false
|
||||
@@ -36,12 +37,12 @@ overwrite_original_rules=false
|
||||
;surge_ruleset=DIRECT,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/China.list
|
||||
|
||||
;Options for custom base configuration file
|
||||
clash_rule_base=config/forcerule.yml
|
||||
;surge_rule_base=surge.conf
|
||||
;surfboard_rule_base=surfboard.conf
|
||||
;mellow_rule_base=mellow.conf
|
||||
;quan_rule_base=quan.conf
|
||||
;quanx_rule_base=quanx.conf
|
||||
clash_rule_base=base/forcerule.yml
|
||||
;surge_rule_base=base/surge.conf
|
||||
;surfboard_rule_base=base/surfboard.conf
|
||||
;mellow_rule_base=base/mellow.conf
|
||||
;quan_rule_base=base/quan.conf
|
||||
;quanx_rule_base=base/quanx.conf
|
||||
|
||||
;Options for renaming nodes
|
||||
;rename=Test-(.*?)-(.*?)-(.*?)\((.*?)\)@\1\4x测试线路_自\2到\3
|
||||
|
||||
164
base/pref.ini
164
base/pref.ini
@@ -16,22 +16,22 @@ exclude_remarks=(到期|剩余流量|时间|官网|产品)
|
||||
;include_remarks=V3.*港
|
||||
|
||||
;Clash config base used by the generator, supports local files/URL
|
||||
clash_rule_base=simple_base.yml
|
||||
clash_rule_base=base/simple_base.yml
|
||||
|
||||
;Surge config base used by the generator, supports local files/URL
|
||||
surge_rule_base=surge.conf
|
||||
surge_rule_base=base/surge.conf
|
||||
|
||||
;Surfboard config base used by the generator, supports local files/URL
|
||||
surfboard_rule_base=surfboard.conf
|
||||
surfboard_rule_base=base/surfboard.conf
|
||||
|
||||
;Mellow config base used by the generator, supports local files/URL
|
||||
mellow_rule_base=mellow.conf
|
||||
mellow_rule_base=base/mellow.conf
|
||||
|
||||
;Quantumult X config base used by the generator, supports local files/URL
|
||||
quan_rule_base=quan.conf
|
||||
quan_rule_base=base/quan.conf
|
||||
|
||||
;Quantumult X config base used by the generator, supports local files/URL
|
||||
quanx_rule_base=quanx.conf
|
||||
quanx_rule_base=base/quanx.conf
|
||||
|
||||
;Proxy used to download rulesets or subscriptions, set to NONE or empty to disable it, set to SYSTEM to use system proxy.
|
||||
;Accept cURL-supported proxies (http:// https:// socks4a:// socks5://)
|
||||
@@ -69,53 +69,7 @@ filter_deprecated_nodes=false
|
||||
;rename_node=RELAY@中转
|
||||
;rename_node=BGP-@
|
||||
|
||||
; short names
|
||||
; rename_node=中国@中
|
||||
; rename_node=徐州@徐
|
||||
; rename_node=深圳@深
|
||||
; rename_node=上海@沪
|
||||
; rename_node=广州@穗
|
||||
; rename_node=宁波@甬
|
||||
; rename_node=贵阳@筑
|
||||
; rename_node=武汉@汉
|
||||
; rename_node=南京@宁
|
||||
; rename_node=天津@津
|
||||
; rename_node=北京@京
|
||||
; rename_node=沈阳@沈
|
||||
; rename_node=江苏@苏
|
||||
; rename_node=浙江@浙
|
||||
; rename_node=安徽@皖
|
||||
; rename_node=福建@闽
|
||||
; rename_node=湖南@湘
|
||||
; rename_node=广东@粤
|
||||
; rename_node=海南@琼
|
||||
; rename_node=四川@川
|
||||
; rename_node=贵州@贵
|
||||
; rename_node=云南@云
|
||||
; rename_node=青海@青
|
||||
; rename_node=台湾@台
|
||||
; rename_node=香港@港
|
||||
; rename_node=澳门@澳
|
||||
; rename_node=美国@美
|
||||
; rename_node=英国@英
|
||||
; rename_node=加拿大@加
|
||||
; rename_node=法国@法
|
||||
; rename_node=德国@德
|
||||
; rename_node=瑞士@瑞
|
||||
; rename_node=日本@日
|
||||
; rename_node=韩国@韩
|
||||
; rename_node=芬兰@芬
|
||||
; rename_node=印度@印
|
||||
; rename_node=泰国@泰
|
||||
; rename_node=越南@越
|
||||
; rename_node=新加坡@新
|
||||
; rename_node=意大利@意
|
||||
; rename_node=菲律宾@菲
|
||||
; rename_node=俄罗斯@俄
|
||||
; rename_node=土耳其@土
|
||||
|
||||
; times RE
|
||||
rename_node=\(?((x|X)?(\d+)(\.?\d+)?)((\s?倍率?)|(x|X))\)?@$1x
|
||||
rename_node=!!import:snippets/rename_node.txt
|
||||
|
||||
[managed_config]
|
||||
;Append a '#!MANAGED-CONFIG' info to Surge configurations
|
||||
@@ -134,45 +88,10 @@ remove_old_emoji=true
|
||||
;Rule to add emojis. Supports regular expression.
|
||||
;Format: Remark_Search_Pattern,emoji
|
||||
|
||||
rule=(流量|时间|应急|过期|Bandwidth|expire),🏳️🌈
|
||||
rule=AC,🇦🇨
|
||||
rule=(AR|阿根廷),🇦🇷
|
||||
rule=(奥地利|维也纳),🇦🇹
|
||||
rule=(AU|Australia|Sydney|澳大利亚|悉尼),🇦🇺
|
||||
rule=BE,🇧🇪
|
||||
rule=(BR|Brazil|巴西|圣保罗),🇧🇷
|
||||
rule=(Canada|加拿大|蒙特利尔|温哥华|楓葉|枫叶),🇨🇦
|
||||
rule=(瑞士|苏黎世),🇨🇭
|
||||
rule=(DE|Germany|德国|法兰克福|德),🇩🇪
|
||||
rule=丹麦,🇩🇰
|
||||
rule=ES,🇪🇸
|
||||
rule=EU,🇪🇺
|
||||
rule=(Finland|芬兰|赫尔辛基),🇫🇮
|
||||
rule=(FR|France|法国|巴黎),🇫🇷
|
||||
rule=(UK|England|United.*?Kingdom|英国|英|伦敦),🇬🇧
|
||||
rule=(?i)(HK|Hong.*?Kong|香港|深港|沪港|呼港|HKT|HKBN|HGC|WTT|CMI|穗港|京港|港),🇭🇰
|
||||
rule=(Indonesia|印尼|印度尼西亚|雅加达),🇮🇩
|
||||
rule=(Ireland|爱尔兰|都柏林),🇮🇪
|
||||
rule=(India|印度|孟买),🇮🇳
|
||||
rule=(Italy|意大利|米兰),🇮🇹
|
||||
rule=(JP|Japan|日本|东京|大阪|埼玉|沪日|穗日|川日|中日|泉日|杭日),🇯🇵
|
||||
rule=(KP|朝鲜),🇰🇵
|
||||
rule=(KR|Korea|KOR|韩国|首尔|韩|韓),🇰🇷
|
||||
rule=(MO|Macao|澳门|CTM),🇲🇴
|
||||
rule=(MY|Malaysia|马来西亚),🇲🇾
|
||||
rule=(NL|Netherlands|荷兰|阿姆斯特丹),🇳🇱
|
||||
rule=(PH|Philippines|菲律宾),🇵🇭
|
||||
rule=(RO|罗马尼亚),🇷🇴
|
||||
rule=(RU|Russia|俄罗斯|伯力|莫斯科|圣彼得堡|西伯利亚|新西伯利亚|京俄|杭俄),🇷🇺
|
||||
rule=(沙特|迪拜),🇸🇦
|
||||
rule=(SE|Sweden),🇸🇪
|
||||
rule=(SG|Singapore|新加坡|狮城|沪新|京新|泉新|穗新|深新|杭新),🇸🇬
|
||||
rule=(TH|Thailand|泰国|曼谷),🇹🇭
|
||||
rule=(TR|Turkey|土耳其|伊斯坦布尔),🇹🇷
|
||||
rule=(US|America|UnitedStates|美国|美|京美|波特兰|达拉斯|俄勒冈|凤凰城|费利蒙|硅谷|拉斯维加斯|洛杉矶|圣何塞|圣克拉拉|西雅图|芝加哥|沪美),🇺🇲
|
||||
rule=(VN|越南),🇻🇳
|
||||
rule=(ZA|南非),🇿🇦
|
||||
rule=(CN|China|回国|中国|江苏|北京|上海|广州|深圳|杭州|徐州|青岛|宁波|镇江|back|TW|Taiwan|台湾|台北|台中|新北|彰化|CHT|新北|台|HINET),🇨🇳
|
||||
;rule=(流量|时间|应急|过期|Bandwidth|expire),🏳️🌈
|
||||
;rule=AC,🇦🇨
|
||||
|
||||
rule=!!import:snippets/emoji.txt
|
||||
|
||||
[ruleset]
|
||||
;Enable generating rules with rulesets
|
||||
@@ -189,34 +108,11 @@ update_ruleset_on_request=false
|
||||
; Group name,[]Rule
|
||||
|
||||
;surge_ruleset=DIRECT,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Unbreak.list
|
||||
;surge_ruleset=⛔️ 广告拦截,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Advertising.list
|
||||
;surge_ruleset=🚫 运营劫持,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Hijacking.list
|
||||
;surge_ruleset=🌌 YouTube,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/YouTube.list
|
||||
;surge_ruleset=🎥 NETFLIX,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/Netflix.list
|
||||
;surge_ruleset=HBO,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/HBO.list
|
||||
;surge_ruleset=Fox,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/Fox.list
|
||||
;surge_ruleset=🌍 国外媒体,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/GlobalMedia.list
|
||||
;surge_ruleset=🌏 港台媒体,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/HKMTMedia.list
|
||||
;surge_ruleset=📲 电报信息,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Telegram.list
|
||||
;surge_ruleset=🔰 节点选择,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Global.list
|
||||
;surge_ruleset=🍎 苹果服务,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Apple.list
|
||||
;surge_ruleset=DIRECT,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/China.list
|
||||
;surge_ruleset=🎯 全球直连,rules/LocalAreaNetwork.list
|
||||
;surge_ruleset=🎯 全球直连,[]GEOIP,CN
|
||||
;surge_ruleset=🐟 漏网之鱼,[]FINAL
|
||||
|
||||
surge_ruleset=🎯 全球直连,rules/LocalAreaNetwork.list
|
||||
surge_ruleset=Ⓜ️ 微软服务,rules/MSServices.list
|
||||
surge_ruleset=🎯 全球直连,rules/ConnersHua/Surge/Ruleset/Unbreak.list
|
||||
surge_ruleset=🛑 全球拦截,rules/NobyDa/Surge/AdRule.list
|
||||
surge_ruleset=🛑 全球拦截,rules/ConnersHua/Surge/Ruleset/Hijacking.list
|
||||
;surge_ruleset=🎥 NETFLIX,rules/ConnersHua/Surge/Ruleset/Media/Netflix.list
|
||||
surge_ruleset=🌍 国外媒体,rules/ConnersHua/Surge/Ruleset/GlobalMedia.list
|
||||
surge_ruleset=🌏 国内媒体,rules/lhie1/Surge/Surge 3/Provider/AsianTV.list
|
||||
surge_ruleset=📲 电报信息,rules/ConnersHua/Surge/Ruleset/Telegram.list
|
||||
surge_ruleset=🔰 节点选择,rules/ConnersHua/Surge/Ruleset/Global.list
|
||||
surge_ruleset=🍎 苹果服务,rules/ConnersHua/Surge/Ruleset/Apple.list
|
||||
surge_ruleset=🎯 全球直连,rules/ConnersHua/Surge/Ruleset/China.list
|
||||
surge_ruleset=🎯 全球直连,rules/NobyDa/Surge/Download.list
|
||||
surge_ruleset=🎯 全球直连,[]GEOIP,CN
|
||||
surge_ruleset=🐟 漏网之鱼,[]FINAL
|
||||
surge_ruleset=!!import:snippets/rulesets.txt
|
||||
|
||||
[clash_proxy_group]
|
||||
;Generate Clash Proxy Group with the following patterns. Node filterting rule supports regular expression.
|
||||
@@ -224,6 +120,7 @@ surge_ruleset=🐟 漏网之鱼,[]FINAL
|
||||
; Group_Name`url-test|fallback|load-balance`Rule_1`Rule_2`...`test_url`interval
|
||||
;Rule with "[]" prefix will be added directly.
|
||||
|
||||
;custom_proxy_group=Proxy`select`.*`[]AUTO`[]DIRECT`.*
|
||||
;custom_proxy_group=UrlTest`url-test`.*`http://www.gstatic.com/generate_204`300
|
||||
;custom_proxy_group=FallBack`fallback`.*`http://www.gstatic.com/generate_204`300
|
||||
;custom_proxy_group=LoadBalance`load-balance`.*`http://www.gstatic.com/generate_204`300
|
||||
@@ -236,35 +133,10 @@ surge_ruleset=🐟 漏网之鱼,[]FINAL
|
||||
;custom_proxy_group=sstw`select`!!GROUP=V2RayProvider!!(深台|彰化|新北|台|tw)
|
||||
|
||||
;for forcerule.yml
|
||||
;custom_proxy_group=Proxy`select`.*`[]AUTO`[]DIRECT`.*
|
||||
;custom_proxy_group=AUTO`url-test`.*`http://www.gstatic.com/generate_204`300
|
||||
;custom_proxy_group=google`select`.*
|
||||
;custom_proxy_group=netflix`select`.*
|
||||
;custom_proxy_group=动画疯`select`(深台|彰化|新北|台)
|
||||
;custom_proxy_group=fox+`select`(HGC|HKBN|PCCW|HKT|深台|彰化|新北|台|新加坡|sg|hk|tw)
|
||||
;custom_proxy_group=美区影视`select`(美|美国)
|
||||
;custom_proxy_group=Global_media`select`.*
|
||||
;custom_proxy_group=Domestic`select`[]DIRECT`[]Proxy
|
||||
;custom_proxy_group=Apple`select`[]DIRECT`[]Proxy
|
||||
;custom_proxy_group=Final`select`[]Proxy`[]DIRECT
|
||||
;custom_proxy_group=屏蔽广告`select`[]REJECT`[]DIRECT
|
||||
;custom_proxy_group=UnblockNeteaseMusic`select`云音乐解锁`[]DIRECT
|
||||
;custom_proxy_group=Telegram`select`新加坡`[]Proxy
|
||||
;custom_proxy_group=!!import:snippets/groups_forcerule.txt
|
||||
|
||||
;for Surge rulesets
|
||||
custom_proxy_group=🔰 节点选择`select`[]♻️ 自动选择`[]🎯 全球直连`.*
|
||||
custom_proxy_group=♻️ 自动选择`url-test`.*`http://www.gstatic.com/generate_204`300
|
||||
;custom_proxy_group=🎥 NETFLIX`select`[]🔰 节点选择`[]♻️ 自动选择`[]🎯 全球直连`.*
|
||||
;custom_proxy_group=⛔️ 广告拦截`select`[]🛑 全球拦截`[]🎯 全球直连`[]🔰 节点选择
|
||||
;custom_proxy_group=🚫 运营劫持`select`[]🛑 全球拦截`[]🎯 全球直连`[]🔰 节点选择
|
||||
custom_proxy_group=🌍 国外媒体`select`[]🔰 节点选择`[]♻️ 自动选择`[]🎯 全球直连`.*
|
||||
custom_proxy_group=🌏 国内媒体`select`[]🎯 全球直连`(HGC|HKBN|PCCW|HKT|深台|彰化|新北|台|hk|港|tw)`[]🔰 节点选择
|
||||
custom_proxy_group=Ⓜ️ 微软服务`select`[]🎯 全球直连`[]🔰 节点选择`.*
|
||||
custom_proxy_group=📲 电报信息`select`[]🔰 节点选择`[]🎯 全球直连`.*
|
||||
custom_proxy_group=🍎 苹果服务`select`[]🔰 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*
|
||||
custom_proxy_group=🎯 全球直连`select`[]DIRECT
|
||||
custom_proxy_group=🛑 全球拦截`select`[]REJECT`[]DIRECT
|
||||
custom_proxy_group=🐟 漏网之鱼`select`[]🔰 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*
|
||||
custom_proxy_group=!!import:snippets/groups.txt
|
||||
|
||||
[server]
|
||||
;Address to bind on for Web Server
|
||||
|
||||
39
base/snippets/emoji.txt
Normal file
39
base/snippets/emoji.txt
Normal file
@@ -0,0 +1,39 @@
|
||||
(流量|时间|应急|过期|Bandwidth|expire),🏳️🌈
|
||||
AC,🇦🇨
|
||||
(AR|阿根廷),🇦🇷
|
||||
(奥地利|维也纳),🇦🇹
|
||||
(AU|Australia|Sydney|澳大利亚|悉尼),🇦🇺
|
||||
BE,🇧🇪
|
||||
(BR|Brazil|巴西|圣保罗),🇧🇷
|
||||
(Canada|加拿大|蒙特利尔|温哥华|楓葉|枫叶),🇨🇦
|
||||
(瑞士|苏黎世),🇨🇭
|
||||
(DE|Germany|德国|法兰克福|德),🇩🇪
|
||||
丹麦,🇩🇰
|
||||
ES,🇪🇸
|
||||
EU,🇪🇺
|
||||
(Finland|芬兰|赫尔辛基),🇫🇮
|
||||
(FR|France|法国|巴黎),🇫🇷
|
||||
(UK|England|United.*?Kingdom|英国|英|伦敦),🇬🇧
|
||||
(?i)(HK|Hong.*?Kong|香港|深港|沪港|呼港|HKT|HKBN|HGC|WTT|CMI|穗港|京港|港),🇭🇰
|
||||
(Indonesia|印尼|印度尼西亚|雅加达),🇮🇩
|
||||
(Ireland|爱尔兰|都柏林),🇮🇪
|
||||
(India|印度|孟买),🇮🇳
|
||||
(Italy|意大利|米兰),🇮🇹
|
||||
(JP|Japan|日本|东京|大阪|埼玉|沪日|穗日|川日|中日|泉日|杭日),🇯🇵
|
||||
(KP|朝鲜),🇰🇵
|
||||
(KR|Korea|KOR|韩国|首尔|韩|韓),🇰🇷
|
||||
(MO|Macao|澳门|CTM),🇲🇴
|
||||
(MY|Malaysia|马来西亚),🇲🇾
|
||||
(NL|Netherlands|荷兰|阿姆斯特丹),🇳🇱
|
||||
(PH|Philippines|菲律宾),🇵🇭
|
||||
(RO|罗马尼亚),🇷🇴
|
||||
(RU|Russia|俄罗斯|伯力|莫斯科|圣彼得堡|西伯利亚|新西伯利亚|京俄|杭俄),🇷🇺
|
||||
(沙特|迪拜),🇸🇦
|
||||
(SE|Sweden),🇸🇪
|
||||
(SG|Singapore|新加坡|狮城|沪新|京新|泉新|穗新|深新|杭新),🇸🇬
|
||||
(TH|Thailand|泰国|曼谷),🇹🇭
|
||||
(TR|Turkey|土耳其|伊斯坦布尔),🇹🇷
|
||||
(US|America|UnitedStates|美国|美|京美|波特兰|达拉斯|俄勒冈|凤凰城|费利蒙|硅谷|拉斯维加斯|洛杉矶|圣何塞|圣克拉拉|西雅图|芝加哥|沪美),🇺🇲
|
||||
(VN|越南),🇻🇳
|
||||
(ZA|南非),🇿🇦
|
||||
(CN|China|回国|中国|江苏|北京|上海|广州|深圳|杭州|徐州|青岛|宁波|镇江|back|TW|Taiwan|台湾|台北|台中|新北|彰化|CHT|新北|台|HINET),🇨🇳
|
||||
13
base/snippets/groups.txt
Normal file
13
base/snippets/groups.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
🔰 节点选择`select`[]♻️ 自动选择`[]🎯 全球直连`.*
|
||||
♻️ 自动选择`url-test`.*`http://www.gstatic.com/generate_204`300
|
||||
;🎥 NETFLIX`select`[]🔰 节点选择`[]♻️ 自动选择`[]🎯 全球直连`.*
|
||||
;⛔️ 广告拦截`select`[]🛑 全球拦截`[]🎯 全球直连`[]🔰 节点选择
|
||||
;🚫 运营劫持`select`[]🛑 全球拦截`[]🎯 全球直连`[]🔰 节点选择
|
||||
🌍 国外媒体`select`[]🔰 节点选择`[]♻️ 自动选择`[]🎯 全球直连`.*
|
||||
🌏 国内媒体`select`[]🎯 全球直连`(HGC|HKBN|PCCW|HKT|深台|彰化|新北|台|hk|港|tw)`[]🔰 节点选择
|
||||
Ⓜ️ 微软服务`select`[]🎯 全球直连`[]🔰 节点选择`.*
|
||||
📲 电报信息`select`[]🔰 节点选择`[]🎯 全球直连`.*
|
||||
🍎 苹果服务`select`[]🔰 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*
|
||||
🎯 全球直连`select`[]DIRECT
|
||||
🛑 全球拦截`select`[]REJECT`[]DIRECT
|
||||
🐟 漏网之鱼`select`[]🔰 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*
|
||||
15
base/snippets/groups_forcerule.txt
Normal file
15
base/snippets/groups_forcerule.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
;for forcerule.yml
|
||||
Proxy`select`.*`[]AUTO`[]DIRECT`.*
|
||||
AUTO`url-test`.*`http://www.gstatic.com/generate_204`300
|
||||
google`select`.*
|
||||
netflix`select`.*
|
||||
动画疯`select`(深台|彰化|新北|台)
|
||||
fox+`select`(HGC|HKBN|PCCW|HKT|深台|彰化|新北|台|新加坡|sg|hk|tw)
|
||||
美区影视`select`(美|美国)
|
||||
Global_media`select`.*
|
||||
Domestic`select`[]DIRECT`[]Proxy
|
||||
Apple`select`[]DIRECT`[]Proxy
|
||||
Final`select`[]Proxy`[]DIRECT
|
||||
屏蔽广告`select`[]REJECT`[]DIRECT
|
||||
UnblockNeteaseMusic`select`云音乐解锁`[]DIRECT
|
||||
Telegram`select`新加坡`[]Proxy
|
||||
47
base/snippets/rename_node.txt
Normal file
47
base/snippets/rename_node.txt
Normal file
@@ -0,0 +1,47 @@
|
||||
;short names
|
||||
;中国@中
|
||||
;徐州@徐
|
||||
;深圳@深
|
||||
;上海@沪
|
||||
;广州@穗
|
||||
;宁波@甬
|
||||
;贵阳@筑
|
||||
;武汉@汉
|
||||
;南京@宁
|
||||
;天津@津
|
||||
;北京@京
|
||||
;沈阳@沈
|
||||
;江苏@苏
|
||||
;浙江@浙
|
||||
;安徽@皖
|
||||
;福建@闽
|
||||
;湖南@湘
|
||||
;广东@粤
|
||||
;海南@琼
|
||||
;四川@川
|
||||
;贵州@贵
|
||||
;云南@云
|
||||
;青海@青
|
||||
;台湾@台
|
||||
;香港@港
|
||||
;澳门@澳
|
||||
;美国@美
|
||||
;英国@英
|
||||
;加拿大@加
|
||||
;法国@法
|
||||
;德国@德
|
||||
;瑞士@瑞
|
||||
;日本@日
|
||||
;韩国@韩
|
||||
;芬兰@芬
|
||||
;印度@印
|
||||
;泰国@泰
|
||||
;越南@越
|
||||
;新加坡@新
|
||||
;意大利@意
|
||||
;菲律宾@菲
|
||||
;俄罗斯@俄
|
||||
;土耳其@土
|
||||
|
||||
;times RE
|
||||
\(?((x|X)?(\d+)(\.?\d+)?)((\s?倍率?)|(x|X))\)?@$1x
|
||||
15
base/snippets/rulesets.txt
Normal file
15
base/snippets/rulesets.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
🎯 全球直连,rules/LocalAreaNetwork.list
|
||||
Ⓜ️ 微软服务,rules/MSServices.list
|
||||
🎯 全球直连,rules/ConnersHua/Surge/Ruleset/Unbreak.list
|
||||
🛑 全球拦截,rules/NobyDa/Surge/AdRule.list
|
||||
🛑 全球拦截,rules/ConnersHua/Surge/Ruleset/Hijacking.list
|
||||
;🎥 NETFLIX,rules/ConnersHua/Surge/Ruleset/Media/Netflix.list
|
||||
🌍 国外媒体,rules/ConnersHua/Surge/Ruleset/GlobalMedia.list
|
||||
🌏 国内媒体,rules/lhie1/Surge/Surge 3/Provider/AsianTV.list
|
||||
📲 电报信息,rules/ConnersHua/Surge/Ruleset/Telegram.list
|
||||
🔰 节点选择,rules/ConnersHua/Surge/Ruleset/Global.list
|
||||
🍎 苹果服务,rules/ConnersHua/Surge/Ruleset/Apple.list
|
||||
🎯 全球直连,rules/ConnersHua/Surge/Ruleset/China.list
|
||||
🎯 全球直连,rules/NobyDa/Surge/Download.list
|
||||
🎯 全球直连,[]GEOIP,CN
|
||||
🐟 漏网之鱼,[]FINAL
|
||||
12
base/snippets/rulesets_remote.txt
Normal file
12
base/snippets/rulesets_remote.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
⛔️ 广告拦截,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Advertising.list
|
||||
🚫 运营劫持,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Hijacking.list
|
||||
🌌 YouTube,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/YouTube.list
|
||||
🎥 NETFLIX,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/Netflix.list
|
||||
HBO,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/HBO.list
|
||||
Fox,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Media/Fox.list
|
||||
🌍 国外媒体,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/GlobalMedia.list
|
||||
🌏 港台媒体,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/HKMTMedia.list
|
||||
📲 电报信息,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Telegram.list
|
||||
🔰 节点选择,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Global.list
|
||||
🍎 苹果服务,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/Apple.list
|
||||
DIRECT,https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset/China.list
|
||||
97
src/main.cpp
97
src/main.cpp
@@ -16,6 +16,7 @@
|
||||
#include "subexport.h"
|
||||
#include "multithread.h"
|
||||
#include "version.h"
|
||||
#include "logger.h"
|
||||
|
||||
//common settings
|
||||
std::string pref_path = "pref.ini";
|
||||
@@ -56,28 +57,63 @@ void SetConsoleTitle(std::string title)
|
||||
}
|
||||
#endif // _WIN32
|
||||
|
||||
void setcd(char *argv[])
|
||||
void setcd(std::string &file)
|
||||
{
|
||||
char szTemp[1024] = {};
|
||||
std::string path;
|
||||
char szTmp[1024];
|
||||
#ifndef _WIN32
|
||||
path.assign(argv[0]);
|
||||
if(path[0] != '/')
|
||||
{
|
||||
getcwd(szTmp, 1023);
|
||||
path.assign(szTmp);
|
||||
path.append("/");
|
||||
path.append(argv[0]);
|
||||
}
|
||||
path = path.substr(0, path.rfind("/") + 1);
|
||||
#ifdef _WIN32
|
||||
DWORD retVal = GetFullPathName(file.data(), 1023, szTemp, NULL);
|
||||
if(!retVal)
|
||||
return;
|
||||
#else
|
||||
GetModuleFileName(NULL, szTmp, 1023);
|
||||
strrchr(szTmp, '\\')[1] = '\0';
|
||||
path.assign(szTmp);
|
||||
char *ret = realpath(file.data(), &szTemp);
|
||||
if(ret == NULL)
|
||||
return;
|
||||
#endif // _WIN32
|
||||
path.assign(szTemp);
|
||||
chdir(path.data());
|
||||
}
|
||||
|
||||
int importItems(string_array &target)
|
||||
{
|
||||
string_array result;
|
||||
std::stringstream ss;
|
||||
std::string path, content, strLine;
|
||||
unsigned int itemCount = 0;
|
||||
for(std::string &x : target)
|
||||
{
|
||||
if(x.find("!!import:") == x.npos)
|
||||
{
|
||||
result.emplace_back(x);
|
||||
continue;
|
||||
}
|
||||
path = x.substr(x.find(":") + 1);
|
||||
writeLog(0, "Trying to import items from " + path);
|
||||
|
||||
if(fileExist(path))
|
||||
content = fileGet(path, false, api_mode);
|
||||
else
|
||||
content = webGet(path, "");
|
||||
if(!content.size())
|
||||
return -1;
|
||||
|
||||
ss << content;
|
||||
char delimiter = count(content.begin(), content.end(), '\n') < 1 ? '\r' : '\n';
|
||||
std::string::size_type lineSize;
|
||||
while(getline(ss, strLine, delimiter))
|
||||
{
|
||||
lineSize = strLine.size();
|
||||
if(!lineSize || strLine[0] == ';' || strLine[0] == '#' || (lineSize >= 2 && strLine[0] == '/' && strLine[1] == '/')) //empty lines and comments are ignored
|
||||
continue;
|
||||
result.emplace_back(strLine);
|
||||
itemCount++;
|
||||
}
|
||||
}
|
||||
target.swap(result);
|
||||
writeLog(0, "Imported " + std::to_string(itemCount) + " item(s).");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void refreshRulesets(string_array &ruleset_list, std::vector<ruleset_content> &rca)
|
||||
{
|
||||
eraseElements(rca);
|
||||
@@ -206,6 +242,7 @@ void readConf()
|
||||
if(ini.ItemPrefixExist("rename_node"))
|
||||
{
|
||||
ini.GetAll("rename_node", tempArray);
|
||||
importItems(tempArray);
|
||||
safe_set_renames(tempArray);
|
||||
eraseElements(tempArray);
|
||||
}
|
||||
@@ -217,12 +254,14 @@ void readConf()
|
||||
if(ini.ItemPrefixExist("stream_rule"))
|
||||
{
|
||||
ini.GetAll("stream_rule", tempArray);
|
||||
importItems(tempArray);
|
||||
safe_set_streams(tempArray);
|
||||
eraseElements(tempArray);
|
||||
}
|
||||
if(ini.ItemPrefixExist("time_rule"))
|
||||
{
|
||||
ini.GetAll("time_rule", tempArray);
|
||||
importItems(tempArray);
|
||||
safe_set_times(tempArray);
|
||||
eraseElements(tempArray);
|
||||
}
|
||||
@@ -242,6 +281,7 @@ void readConf()
|
||||
if(ini.ItemPrefixExist("rule"))
|
||||
{
|
||||
ini.GetAll("rule", tempArray);
|
||||
importItems(tempArray);
|
||||
safe_set_emojis(tempArray);
|
||||
eraseElements(tempArray);
|
||||
}
|
||||
@@ -254,7 +294,11 @@ void readConf()
|
||||
if(ini.ItemExist("update_ruleset_on_request"))
|
||||
update_ruleset_on_request = ini.GetBool("update_ruleset_on_request");
|
||||
if(ini.ItemPrefixExist("surge_ruleset"))
|
||||
{
|
||||
ini.GetAll("surge_ruleset", rulesets);
|
||||
importItems(rulesets);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -264,7 +308,10 @@ void readConf()
|
||||
|
||||
ini.EnterSection("clash_proxy_group");
|
||||
if(ini.ItemPrefixExist("custom_proxy_group"))
|
||||
{
|
||||
ini.GetAll("custom_proxy_group", clash_extra_group);
|
||||
importItems(clash_extra_group);
|
||||
}
|
||||
|
||||
ini.EnterSection("server");
|
||||
if(ini.ItemExist("listen"))
|
||||
@@ -303,7 +350,7 @@ int loadExternalConfig(std::string &path, ExternalConfig &ext, std::string proxy
|
||||
{
|
||||
std::string base_content;
|
||||
if(fileExist(path))
|
||||
base_content = fileGet(path, false);
|
||||
base_content = fileGet(path, false, api_mode);
|
||||
else
|
||||
base_content = webGet(path, proxy);
|
||||
|
||||
@@ -318,9 +365,15 @@ int loadExternalConfig(std::string &path, ExternalConfig &ext, std::string proxy
|
||||
|
||||
ini.EnterSection("custom");
|
||||
if(ini.ItemPrefixExist("custom_proxy_group"))
|
||||
{
|
||||
ini.GetAll("custom_proxy_group", ext.custom_proxy_group);
|
||||
importItems(ext.custom_proxy_group);
|
||||
}
|
||||
if(ini.ItemPrefixExist("surge_ruleset"))
|
||||
{
|
||||
ini.GetAll("surge_ruleset", ext.surge_ruleset);
|
||||
importItems(ext.surge_ruleset);
|
||||
}
|
||||
|
||||
if(ini.ItemExist("clash_rule_base"))
|
||||
ext.clash_rule_base = ini.Get("clash_rule_base");
|
||||
@@ -341,9 +394,15 @@ int loadExternalConfig(std::string &path, ExternalConfig &ext, std::string proxy
|
||||
ext.enable_rule_generator = ini.GetBool("enable_rule_generator");
|
||||
|
||||
if(ini.ItemPrefixExist("rename"))
|
||||
{
|
||||
ini.GetAll("rename", ext.rename);
|
||||
importItems(ext.rename);
|
||||
}
|
||||
if(ini.ItemPrefixExist("emoji"))
|
||||
{
|
||||
ini.GetAll("emoji", ext.emoji);
|
||||
importItems(ext.emoji);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -818,11 +877,9 @@ int main(int argc, char *argv[])
|
||||
SetConsoleOutputCP(65001);
|
||||
#endif // _WIN32
|
||||
|
||||
#ifndef _DEBUG
|
||||
setcd(argv);
|
||||
#endif // _DEBUG
|
||||
SetConsoleTitle("subconverter " VERSION);
|
||||
chkArg(argc, argv);
|
||||
setcd(pref_path);
|
||||
readConf();
|
||||
if(!update_ruleset_on_request)
|
||||
refreshRulesets(rulesets, ruleset_content_array);
|
||||
@@ -955,7 +1012,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
append_response("GET", "/getlocal", "text/plain;charset=utf-8", [](RESPONSE_CALLBACK_ARGS) -> std::string
|
||||
{
|
||||
return fileGet(UrlDecode(getUrlArg(argument, "path")));
|
||||
return fileGet(UrlDecode(getUrlArg(argument, "path")), false);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
31
src/misc.cpp
31
src/misc.cpp
@@ -446,6 +446,7 @@ std::string getUrlArg(std::string url, std::string request)
|
||||
return std::string();
|
||||
}
|
||||
*/
|
||||
/*
|
||||
std::string::size_type spos = url.find("?");
|
||||
if(spos != url.npos)
|
||||
url.erase(0, spos + 1);
|
||||
@@ -453,10 +454,6 @@ std::string getUrlArg(std::string url, std::string request)
|
||||
string_array vArray, arglist = split(url, "&");
|
||||
for(std::string &x : arglist)
|
||||
{
|
||||
/*
|
||||
if(regex_search(x.cbegin(), x.cend(), result, std::regex("^" + request + "=(.*)$")))
|
||||
return result[1];
|
||||
*/
|
||||
std::string::size_type epos = x.find("=");
|
||||
if(epos != x.npos)
|
||||
{
|
||||
@@ -464,6 +461,14 @@ std::string getUrlArg(std::string url, std::string request)
|
||||
return x.substr(epos + 1);
|
||||
}
|
||||
}
|
||||
*/
|
||||
std::string pattern = request + "=";
|
||||
std::string::size_type pos = url.rfind(pattern);
|
||||
if(pos != url.npos)
|
||||
{
|
||||
pos += pattern.size();
|
||||
return url.substr(pos, url.find("&", pos) - pos);
|
||||
}
|
||||
return std::string();
|
||||
}
|
||||
|
||||
@@ -659,12 +664,24 @@ std::string getMD5(std::string data)
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string fileGet(std::string path, bool binary)
|
||||
std::string fileGet(std::string path, bool binary, bool scope_limit)
|
||||
{
|
||||
std::ifstream infile;
|
||||
std::stringstream strstrm;
|
||||
std::ios::openmode mode = binary ? std::ios::binary : std::ios::in;
|
||||
|
||||
if(scope_limit)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if(path.find(":/") != path.npos || path.find("..") != path.npos)
|
||||
return std::string();
|
||||
#else
|
||||
if(path.find("/") == 0 || path.find("..") != path.npos)
|
||||
return std::string();
|
||||
#endif // _WIN32
|
||||
}
|
||||
|
||||
|
||||
infile.open(path, mode);
|
||||
if(infile)
|
||||
{
|
||||
@@ -707,12 +724,12 @@ bool fileCopy(std::string source, std::string dest)
|
||||
|
||||
std::string fileToBase64(std::string filepath)
|
||||
{
|
||||
return base64_encode(fileGet(filepath));
|
||||
return base64_encode(fileGet(filepath, true));
|
||||
}
|
||||
|
||||
std::string fileGetMD5(std::string filepath)
|
||||
{
|
||||
return getMD5(fileGet(filepath));
|
||||
return getMD5(fileGet(filepath, true));
|
||||
}
|
||||
|
||||
int fileWrite(std::string path, std::string content, bool overwrite)
|
||||
|
||||
@@ -56,7 +56,7 @@ int to_int(std::string str, int def_vaule = 0);
|
||||
std::string UTF8ToCodePoint(std::string data);
|
||||
std::string GetEnv(std::string name);
|
||||
|
||||
std::string fileGet(std::string path, bool binary = true);
|
||||
std::string fileGet(std::string path, bool binary, bool scope_limit = false);
|
||||
int fileWrite(std::string path, std::string content, bool overwrite);
|
||||
bool fileExist(std::string path);
|
||||
bool fileCopy(std::string source,std::string dest);
|
||||
|
||||
Reference in New Issue
Block a user