Add support for importing snippets

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

No files matched your search

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+21 -20
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
+18 -146
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
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
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`[]🔰 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*
+15
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
+47
View File
@@ -0,0 +1,47 @@
;short names
;中国@中
;徐州@徐
;深圳@深
;上海@沪
;广州@穗
;宁波@甬
;贵阳@筑
;武汉@汉
;南京@宁
;天津@津
;北京@京
;沈阳@沈
;江苏@苏
;浙江@浙
;安徽@皖
;福建@闽
;湖南@湘
;广东@粤
;海南@琼
;四川@川
;贵州@贵
;云南@云
;青海@青
;台湾@台
;香港@港
;澳门@澳
;美国@美
;英国@英
;加拿大@加
;法国@法
;德国@德
;瑞士@瑞
;日本@日
;韩国@韩
;芬兰@芬
;印度@印
;泰国@泰
;越南@越
;新加坡@新
;意大利@意
;菲律宾@菲
;俄罗斯@俄
;土耳其@土
;times RE
\(?((x|X)?(\d+)(\.?\d+)?)((\s?倍率?)|(x|X))\)?@$1x
+15
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
+12
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
+77 -20
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);
});
}
+24 -7
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)
+1 -1
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);