Add support for importing snippets

Clean up file structure.
This commit is contained in:
Tindy X
2020-02-02 13:56:14 +08:00
parent 5634df6a7f
commit e78bb6df47
19 changed files with 282 additions and 194 deletions

View File

@@ -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

View File

@@ -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
View 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
View 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`[]🔰 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*

View 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

View File

@@ -0,0 +1,47 @@
;short names
;中国@中
;徐州@徐
;深圳@深
;上海@沪
;广州@穗
;宁波@甬
;贵阳@筑
;武汉@汉
;南京@宁
;天津@津
;北京@京
;沈阳@沈
;江苏@苏
;浙江@浙
;安徽@皖
;福建@闽
;湖南@湘
;广东@粤
;海南@琼
;四川@川
;贵州@贵
;云南@云
;青海@青
;台湾@台
;香港@港
;澳门@澳
;美国@美
;英国@英
;加拿大@加
;法国@法
;德国@德
;瑞士@瑞
;日本@日
;韩国@韩
;芬兰@芬
;印度@印
;泰国@泰
;越南@越
;新加坡@新
;意大利@意
;菲律宾@菲
;俄罗斯@俄
;土耳其@土
;times RE
\(?((x|X)?(\d+)(\.?\d+)?)((\s?倍率?)|(x|X))\)?@$1x

View 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

View 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

View File

@@ -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);
});
}

View File

@@ -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)

View File

@@ -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);