3 Commits

Author SHA1 Message Date
juewuy
c5da0da08a feat(i18n): localize uninstall and subconverter menus 2026-03-11 17:56:55 +08:00
juewuy
ed635b871a Merge pull request #1229 from DustinWin/dev
删除 games(GEOIP)和 gamesip 规则集
2026-03-04 17:38:31 +08:00
DustinWin
a32b05a391 删除 games(GEOIP)和 gamesip 规则集 2026-03-04 17:27:21 +08:00
14 changed files with 155 additions and 114 deletions

View File

@@ -48,6 +48,5 @@ rules:
- GEOIP,private,🔒 私有网络,no-resolve - GEOIP,private,🔒 私有网络,no-resolve
- GEOIP,cn,🀄️ 国内 IP - GEOIP,cn,🀄️ 国内 IP
- GEOIP,telegram,📲 电报消息,no-resolve - GEOIP,telegram,📲 电报消息,no-resolve
- GEOIP,games,🕹️ 游戏平台
- GEOIP,media,🌍 国外媒体 - GEOIP,media,🌍 国外媒体
- MATCH,🐟 漏网之鱼 - MATCH,🐟 漏网之鱼

View File

@@ -44,6 +44,5 @@ rules:
- GEOIP,private,🔒 私有网络,no-resolve - GEOIP,private,🔒 私有网络,no-resolve
- GEOIP,cn,🀄️ 国内 IP - GEOIP,cn,🀄️ 国内 IP
- GEOIP,telegram,📲 电报消息,no-resolve - GEOIP,telegram,📲 电报消息,no-resolve
- GEOIP,games,🕹️ 游戏平台
- GEOIP,media,🌍 国外媒体 - GEOIP,media,🌍 国外媒体
- MATCH,🐟 漏网之鱼 - MATCH,🐟 漏网之鱼

View File

@@ -178,14 +178,6 @@ rule-providers:
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs" url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
interval: 86400 interval: 86400
gamesip:
type: http
behavior: ipcidr
format: mrs
path: ./ruleset/gamesip.mrs
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/gamesip.mrs"
interval: 86400
netflixip: netflixip:
type: http type: http
behavior: ipcidr behavior: ipcidr
@@ -221,7 +213,6 @@ rules:
- RULE-SET,privateip,🔒 私有网络,no-resolve - RULE-SET,privateip,🔒 私有网络,no-resolve
- RULE-SET,cnip,🀄️ 国内 IP - RULE-SET,cnip,🀄️ 国内 IP
- RULE-SET,telegramip,📲 电报消息,no-resolve - RULE-SET,telegramip,📲 电报消息,no-resolve
- RULE-SET,gamesip,🕹️ 游戏平台
- RULE-SET,netflixip,🎥 奈飞视频 - RULE-SET,netflixip,🎥 奈飞视频
- RULE-SET,mediaip,🌍 国外媒体 - RULE-SET,mediaip,🌍 国外媒体
- MATCH,🐟 漏网之鱼 - MATCH,🐟 漏网之鱼

View File

@@ -167,14 +167,6 @@ rule-providers:
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs" url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
interval: 86400 interval: 86400
gamesip:
type: http
behavior: ipcidr
format: mrs
path: ./ruleset/gamesip.mrs
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/gamesip.mrs"
interval: 86400
netflixip: netflixip:
type: http type: http
behavior: ipcidr behavior: ipcidr
@@ -209,7 +201,6 @@ rules:
- RULE-SET,privateip,🔒 私有网络,no-resolve - RULE-SET,privateip,🔒 私有网络,no-resolve
- RULE-SET,cnip,🀄️ 国内 IP - RULE-SET,cnip,🀄️ 国内 IP
- RULE-SET,telegramip,📲 电报消息,no-resolve - RULE-SET,telegramip,📲 电报消息,no-resolve
- RULE-SET,gamesip,🕹️ 游戏平台
- RULE-SET,netflixip,🎥 奈飞视频 - RULE-SET,netflixip,🎥 奈飞视频
- RULE-SET,mediaip,🌍 国外媒体 - RULE-SET,mediaip,🌍 国外媒体
- MATCH,🐟 漏网之鱼 - MATCH,🐟 漏网之鱼

View File

@@ -169,13 +169,6 @@ rule-providers:
behavior: domain behavior: domain
proxy: DIRECT proxy: DIRECT
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games.mrs" url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games.mrs"
gamesip:
type: http
format: mrs
interval: 86400
behavior: ipcidr
proxy: DIRECT
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/gamesip.mrs"
mediaip: mediaip:
type: http type: http
format: mrs format: mrs
@@ -247,7 +240,6 @@ rules:
- RULE-SET,proxy,🌐 国际流量 - RULE-SET,proxy,🌐 国际流量
- RULE-SET,cn,🀄️ 国内流量 - RULE-SET,cn,🀄️ 国内流量
- RULE-SET,gamesip,🎮 外服游戏
- RULE-SET,mediaip,🌍 国际媒体 - RULE-SET,mediaip,🌍 国际媒体
- RULE-SET,cnip,🀄️ 国内流量 - RULE-SET,cnip,🀄️ 国内流量

View File

@@ -54,7 +54,6 @@
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true}, { "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }, { "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" },
{ "rule_set": [ "gamesip" ], "outbound": "🕹️ 游戏平台" },
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" }, { "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" } { "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
], ],
@@ -195,14 +194,6 @@
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs", "url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
"download_detour": "DIRECT" "download_detour": "DIRECT"
}, },
{
"tag": "gamesip",
"type": "remote",
"format": "binary",
"path": "./ruleset/gamesip.srs",
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/gamesip.srs",
"download_detour": "DIRECT"
},
{ {
"tag": "netflixip", "tag": "netflixip",
"type": "remote", "type": "remote",

View File

@@ -51,7 +51,6 @@
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true}, { "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }, { "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" },
{ "rule_set": [ "gamesip" ], "outbound": "🕹️ 游戏平台" },
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" }, { "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" } { "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
], ],
@@ -184,14 +183,6 @@
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs", "url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
"download_detour": "DIRECT" "download_detour": "DIRECT"
}, },
{
"tag": "gamesip",
"type": "remote",
"format": "binary",
"path": "./ruleset/gamesip.srs",
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/gamesip.srs",
"download_detour": "DIRECT"
},
{ {
"tag": "netflixip", "tag": "netflixip",
"type": "remote", "type": "remote",

View File

@@ -11,7 +11,7 @@
{ "tag": "🎬 奈飞视频", "type": "selector", "outbounds": ["🚀 节点选择", "🎬 奈飞节点", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] }, { "tag": "🎬 奈飞视频", "type": "selector", "outbounds": ["🚀 节点选择", "🎬 奈飞节点", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
{ "tag": "🎬 奈飞节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(NF|奈飞|解锁|Netflix|NETFLIX|Media)" }, { "tag": "🎬 奈飞节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(NF|奈飞|解锁|Netflix|NETFLIX|Media)" },
{ "tag": "▶️ 油管视频", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] }, { "tag": "▶️ 油管视频", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
{ "tag": "📢 谷歌推送", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] }, { "tag": "📢 谷歌推送", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
{ "tag": "📲 电报消息", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] }, { "tag": "📲 电报消息", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
{ "tag": "🌍 国际媒体", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] }, { "tag": "🌍 国际媒体", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
{ "tag": "🌐 国际流量", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] }, { "tag": "🌐 国际流量", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
@@ -77,7 +77,6 @@
{ "rule_set": ["telegramip"], "outbound": "📲 电报消息" }, { "rule_set": ["telegramip"], "outbound": "📲 电报消息" },
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4" }, { "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4" },
{ "rule_set": ["gamesip"], "outbound": "🎮 外服游戏" },
{ "rule_set": ["mediaip"], "outbound": "🌍 国际媒体" }, { "rule_set": ["mediaip"], "outbound": "🌍 国际媒体" },
{ "rule_set": ["cnip"], "outbound": "🀄️ 国内流量" } { "rule_set": ["cnip"], "outbound": "🀄️ 国内流量" }
], ],
@@ -242,14 +241,6 @@
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/telegramip.srs", "url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/telegramip.srs",
"download_detour": "DIRECT" "download_detour": "DIRECT"
}, },
{
"tag": "gamesip",
"type": "remote",
"format": "binary",
"path": "./ruleset/gamesip.srs",
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/gamesip.srs",
"download_detour": "DIRECT"
},
{ {
"tag": "mediaip", "tag": "mediaip",
"type": "remote", "type": "remote",

View File

@@ -0,0 +1,33 @@
SUBCONVERTER_MENU_GEN="生成包含全部节点、订阅的配置文件"
SUBCONVERTER_MENU_EXCLUDE="设置\033[31m排除节点正则\033[0m"
SUBCONVERTER_MENU_INCLUDE="设置\033[32m包含节点正则\033[0m"
SUBCONVERTER_MENU_RULE="选择\033[33m在线规则模版\033[0m"
SUBCONVERTER_MENU_SERVER="选择Subconverter服务器"
SUBCONVERTER_MENU_UA="自定义浏览器UA"
SUBCONVERTER_INPUT="请输入"
SUBCONVERTER_BACK="或输入 0 返回上级菜单"
SUBCONVERTER_EXCLUDE_HINT1="匹配关键字的节点会在导入时被【屏蔽】!"
SUBCONVERTER_INCLUDE_HINT1="仅有匹配关键字的节点才会被【导入】!!!"
SUBCONVERTER_KEYWORD_SPLIT="多个关键字可以用\033[30;47m | \033[0m号分隔"
SUBCONVERTER_REGEX_HINT="\033[32m支持正则表达式\033[0m空格请使用\033[30;47m + \033[0m号替代"
SUBCONVERTER_EXCLUDE_INPUT="请直接输入节点过滤关键字"
SUBCONVERTER_INCLUDE_INPUT="请直接输入节点匹配关键字"
SUBCONVERTER_EXCLUDE_CLEAR="或输入 d \033[31m清空\033[0m节点过滤关键字"
SUBCONVERTER_INCLUDE_CLEAR="或输入 d \033[31m清空\033[0m节点匹配关键字"
SUBCONVERTER_RULE_CURRENT="当前使用规则为:"
SUBCONVERTER_SERVER_HINT="以下为互联网采集的第三方服务器,具体安全性请自行斟酌!"
SUBCONVERTER_SERVER_THANKS="感谢以下作者的无私奉献!!!"
SUBCONVERTER_SERVER_CURRENT="当前使用后端为:"
SUBCONVERTER_SET_OK="设置成功!返回上级菜单"
SUBCONVERTER_UA_HINT="无法正确获取配置文件时可尝试使用"
SUBCONVERTER_UA_CURRENT="当前UA"
SUBCONVERTER_UA_AUTO="使用自动UA默认"
SUBCONVERTER_UA_NONE="不使用UA"
SUBCONVERTER_UA_CUSTOM="使用自定义UA"
SUBCONVERTER_UA_CLEAR="清空UA"
SUBCONVERTER_UA_CUSTOM_WARN="注意:\n自定义UA不可包含空格或特殊符号"
SUBCONVERTER_UA_CUSTOM_INPUT="请直接输入自定义UA"

View File

@@ -0,0 +1,13 @@
UNINSTALL_WARN="警告:该操作不可逆!"
UNINSTALL_CONFIRM="是否确认卸载ShellCrash"
UNINSTALL_YES="是"
UNINSTALL_NO="否"
UNINSTALL_KEEP_CONFIRM="是否保留脚本配置及订阅文件?"
UNINSTALL_ENV_ERROR="环境变量配置有误,请尝试手动移除安装目录!"
UNINSTALL_DONE="已卸载ShellCrash相关文件有缘再会"
UNINSTALL_CLOSE_HINT="请手动关闭当前窗口以重置环境变量!"
UNINSTALL_CANCELED="操作已取消!"
UNINSTALL_CRON_CLASH="clash服务"
UNINSTALL_CRON_SUB="订阅链接"
UNINSTALL_CRON_INIT="ShellCrash初始化"
UNINSTALL_SSH_MARK="启用外网访问SSH服务"

View File

@@ -0,0 +1,33 @@
SUBCONVERTER_MENU_GEN="Generate config including all nodes and subscriptions"
SUBCONVERTER_MENU_EXCLUDE="Set \033[31mexclude node regex\033[0m"
SUBCONVERTER_MENU_INCLUDE="Set \033[32minclude node regex\033[0m"
SUBCONVERTER_MENU_RULE="Select \033[33monline rule template\033[0m"
SUBCONVERTER_MENU_SERVER="Select Subconverter server"
SUBCONVERTER_MENU_UA="Custom browser UA"
SUBCONVERTER_INPUT="Please enter"
SUBCONVERTER_BACK="or enter 0 to return"
SUBCONVERTER_EXCLUDE_HINT1="Nodes matching keywords will be blocked during import!"
SUBCONVERTER_INCLUDE_HINT1="Only nodes matching keywords will be imported!!!"
SUBCONVERTER_KEYWORD_SPLIT="Use \033[30;47m | \033[0m to separate multiple keywords"
SUBCONVERTER_REGEX_HINT="\033[32mRegex is supported\033[0m. Use \033[30;47m + \033[0m instead of spaces"
SUBCONVERTER_EXCLUDE_INPUT="Enter exclude keyword(s) directly"
SUBCONVERTER_INCLUDE_INPUT="Enter include keyword(s) directly"
SUBCONVERTER_EXCLUDE_CLEAR="or enter d to \033[31mclear\033[0m exclude keywords"
SUBCONVERTER_INCLUDE_CLEAR="or enter d to \033[31mclear\033[0m include keywords"
SUBCONVERTER_RULE_CURRENT="Current rule: "
SUBCONVERTER_SERVER_HINT="The following third-party servers are collected from the internet. Please evaluate their security by yourself!"
SUBCONVERTER_SERVER_THANKS="Thanks to the contributors below for their great work!!!"
SUBCONVERTER_SERVER_CURRENT="Current backend: "
SUBCONVERTER_SET_OK="Settings saved. Returning to previous menu"
SUBCONVERTER_UA_HINT="Try this if the config file cannot be fetched correctly"
SUBCONVERTER_UA_CURRENT="Current UA: "
SUBCONVERTER_UA_AUTO="Use auto UA (default)"
SUBCONVERTER_UA_NONE="Do not use UA"
SUBCONVERTER_UA_CUSTOM="Use custom UA"
SUBCONVERTER_UA_CLEAR="Clear UA"
SUBCONVERTER_UA_CUSTOM_WARN="Note:\nCustom UA cannot contain spaces or special symbols!"
SUBCONVERTER_UA_CUSTOM_INPUT="Enter custom UA"

View File

@@ -0,0 +1,13 @@
UNINSTALL_WARN="Warning: this action is irreversible!"
UNINSTALL_CONFIRM="Are you sure you want to uninstall ShellCrash?"
UNINSTALL_YES="Yes"
UNINSTALL_NO="No"
UNINSTALL_KEEP_CONFIRM="Keep script configs and subscription files?"
UNINSTALL_ENV_ERROR="Environment variable configuration is incorrect. Please remove the installation directory manually!"
UNINSTALL_DONE="ShellCrash related files have been removed. Goodbye!"
UNINSTALL_CLOSE_HINT="Please close the current terminal window manually to reset environment variables!"
UNINSTALL_CANCELED="Operation canceled!"
UNINSTALL_CRON_CLASH="clash service"
UNINSTALL_CRON_SUB="subscription link"
UNINSTALL_CRON_INIT="ShellCrash initialization"
UNINSTALL_SSH_MARK="Enable SSH access from WAN"

View File

@@ -7,18 +7,20 @@ __IS_MODULE_SUBCONVERTER=1
[ -z "$rule_link" ] && rule_link=1 [ -z "$rule_link" ] && rule_link=1
[ -z "$server_link" ] && server_link=1 [ -z "$server_link" ] && server_link=1
load_lang subconverter
# Subconverter在线订阅转换 # Subconverter在线订阅转换
subconverter() { subconverter() {
while true; do while true; do
comp_box "1) \033[32m生成\033[0m包含全部节点、订阅的配置文件"\ comp_box "1) \033[32m$SUBCONVERTER_MENU_GEN\033[0m"\
"2) 设置\033[31m排除节点正则\033[0m \033[47;30m$exclude\033[0m"\ "2) $SUBCONVERTER_MENU_EXCLUDE \033[47;30m$exclude\033[0m"\
"3) 设置\033[32m包含节点正则\033[0m \033[47;30m$include\033[0m"\ "3) $SUBCONVERTER_MENU_INCLUDE \033[47;30m$include\033[0m"\
"4) 选择\033[33m在线规则模版\033[0m"\ "4) $SUBCONVERTER_MENU_RULE"\
"5) 选择\033[0mSubconverter服务器\033[0m"\ "5) $SUBCONVERTER_MENU_SERVER"\
"6) 自定义浏览器UA \033[32m$user_agent\033[0m"\ "6) $SUBCONVERTER_MENU_UA \033[32m$user_agent\033[0m"\
""\ ""\
"0) $COMMON_BACK" "0) $COMMON_BACK"
read -r -p "请输入对应数字> " num read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
"" | 0) "" | 0)
break break
@@ -57,13 +59,13 @@ subconverter() {
# 排除节点正则 # 排除节点正则
gen_link_flt() { gen_link_flt() {
comp_box "\033[33m匹配关键字的节点会在导入时被【屏蔽】!\033[0m" \ comp_box "\033[33m$SUBCONVERTER_EXCLUDE_HINT1\033[0m" \
"多个关键字可以用\033[30;47m | \033[0m号分隔" \ "$SUBCONVERTER_KEYWORD_SPLIT" \
"\033[32m支持正则表达式\033[0m空格请使用\033[30;47m + \033[0m号替代" "$SUBCONVERTER_REGEX_HINT"
btm_box "\033[36m请直接输入节点过滤关键字\033[0m" \ btm_box "\033[36m$SUBCONVERTER_EXCLUDE_INPUT\033[0m" \
"或输入 d \033[31m清空\033[0m节点过滤关键字" \ "$SUBCONVERTER_EXCLUDE_CLEAR" \
"或输入 0 返回上级菜单" "$SUBCONVERTER_BACK"
read -r -p "请输入> " res read -r -p "$SUBCONVERTER_INPUT> " res
case "$res" in case "$res" in
0) 0)
return 0 return 0
@@ -85,13 +87,13 @@ gen_link_flt() {
# 包含节点正则 # 包含节点正则
gen_link_ele() { gen_link_ele() {
comp_box "\033[33m仅有匹配关键字的节点才会被【导入】!!!\033[0m" \ comp_box "\033[33m$SUBCONVERTER_INCLUDE_HINT1\033[0m" \
"多个关键字可以用\033[30;47m | \033[0m号分隔" \ "$SUBCONVERTER_KEYWORD_SPLIT" \
"\033[32m支持正则表达式\033[0m空格请使用\033[30;47m + \033[0m号替代" "$SUBCONVERTER_REGEX_HINT"
btm_box "\033[36m请直接输入节点匹配关键字\033[0m" \ btm_box "\033[36m$SUBCONVERTER_INCLUDE_INPUT\033[0m" \
"或输入 d \033[31m清空\033[0m节点匹配关键字" \ "$SUBCONVERTER_INCLUDE_CLEAR" \
"或输入 0 返回上级菜单" "$SUBCONVERTER_BACK"
read -r -p "请输入> " res read -r -p "$SUBCONVERTER_INPUT> " res
case "$res" in case "$res" in
0) 0)
return 0 return 0
@@ -115,11 +117,11 @@ gen_link_ele() {
gen_link_config() { gen_link_config() {
list=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | awk '{print $2$4}') list=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | awk '{print $2$4}')
now=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $2}') now=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $2}')
comp_box "当前使用规则为:\033[33m$now\033[0m" comp_box "$SUBCONVERTER_RULE_CURRENT\033[33m$now\033[0m"
list_box "$list" list_box "$list"
content_line "" content_line ""
common_back common_back
read -r -p "请输入对应数字> " num read -r -p "$COMMON_INPUT> " num
totalnum=$(grep -acE '^5' "$CRASHDIR"/configs/servers.list) totalnum=$(grep -acE '^5' "$CRASHDIR"/configs/servers.list)
if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then
errornum errornum
@@ -129,7 +131,7 @@ gen_link_config() {
# 将对应标记值写入配置 # 将对应标记值写入配置
rule_link=$num rule_link=$num
if setconfig rule_link "$rule_link"; then if setconfig rule_link "$rule_link"; then
msg_alert "\033[32m设置成功!返回上级菜单\033[0m" msg_alert "\033[32m$SUBCONVERTER_SET_OK\033[0m"
else else
common_failed common_failed
fi fi
@@ -141,14 +143,14 @@ gen_link_server() {
list=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | awk '{print $3" "$2}') list=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | awk '{print $3" "$2}')
now=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}') now=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}')
comp_box "\033[36m以下为互联网采集的第三方服务器,具体安全性请自行斟酌!\033[0m" \ comp_box "\033[36m$SUBCONVERTER_SERVER_HINT\033[0m" \
"\033[32m感谢以下作者的无私奉献!!!\033[0m" \ "\033[32m$SUBCONVERTER_SERVER_THANKS\033[0m" \
"" \ "" \
"当前使用后端为:\033[33m$now\033[0m" "$SUBCONVERTER_SERVER_CURRENT\033[33m$now\033[0m"
list_box "$list" list_box "$list"
content_line "" content_line ""
common_back common_back
read -r -p "请输入对应数字> " num read -r -p "$COMMON_INPUT> " num
totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list) totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list)
if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then
errornum errornum
@@ -158,7 +160,7 @@ gen_link_server() {
# 将对应标记值写入配置 # 将对应标记值写入配置
server_link=$num server_link=$num
if setconfig server_link "$server_link"; then if setconfig server_link "$server_link"; then
content_line "\033[32m设置成功!返回上级菜单\033[0m" content_line "\033[32m$SUBCONVERTER_SET_OK\033[0m"
else else
common_failed common_failed
fi fi
@@ -167,16 +169,16 @@ gen_link_server() {
set_sub_ua() { set_sub_ua() {
while true; do while true; do
comp_box "\033[36m无法正确获取配置文件时可尝试使用\033[0m" \ comp_box "\033[36m$SUBCONVERTER_UA_HINT\033[0m" \
"" \ "" \
"当前UA$user_agent" "$SUBCONVERTER_UA_CURRENT$user_agent"
btm_box "1) 使用自动UA默认"\ btm_box "1) $SUBCONVERTER_UA_AUTO"\
"2) 不使用UA"\ "2) $SUBCONVERTER_UA_NONE"\
"3) 使用自定义UA"\ "3) $SUBCONVERTER_UA_CUSTOM"\
"4) 清空UA"\ "4) $SUBCONVERTER_UA_CLEAR"\
""\ ""\
"0) 返回上级菜单" "0) $COMMON_BACK"
read -r -p "请输入对应数字> " num read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
0) 0)
break break
@@ -188,10 +190,10 @@ set_sub_ua() {
user_agent='none' user_agent='none'
;; ;;
3) 3)
comp_box "\033[33m注意:\n自定义UA不可包含空格或特殊符号\033[0m" comp_box "\033[33m$SUBCONVERTER_UA_CUSTOM_WARN\033[0m"
btm_box "\033[36m请直接输入自定义UA\033[0m" \ btm_box "\033[36m$SUBCONVERTER_UA_CUSTOM_INPUT\033[0m" \
"或输入 0 返回上级菜单" "$SUBCONVERTER_BACK"
read -r -p "请输入> " text read -r -p "$SUBCONVERTER_INPUT> " text
if [ "$text" = 0 ]; then if [ "$text" = 0 ]; then
continue continue
elif [ -n "$text" ]; then elif [ -n "$text" ]; then

View File

@@ -1,26 +1,28 @@
#!/bin/sh #!/bin/sh
# Copyright (C) Juewuy # Copyright (C) Juewuy
load_lang uninstall
# 卸载 # 卸载
uninstall() { uninstall() {
comp_box "\033[31m警告:该操作不可逆!\033[0m" \ comp_box "\033[31m$UNINSTALL_WARN\033[0m" \
"是否确认卸载ShellCrash" "$UNINSTALL_CONFIRM"
btm_box "1) " \ btm_box "1) $UNINSTALL_YES" \
"0) " "0) $UNINSTALL_NO"
read -r -p "$COMMON_INPUT> " res read -r -p "$COMMON_INPUT> " res
if [ "$res" = '1' ]; then if [ "$res" = '1' ]; then
# 停止服务 # 停止服务
"$CRASHDIR"/start.sh stop 2>/dev/null "$CRASHDIR"/start.sh stop 2>/dev/null
"$CRASHDIR"/start.sh cronset "clash服务" 2>/dev/null "$CRASHDIR"/start.sh cronset "$UNINSTALL_CRON_CLASH" 2>/dev/null
"$CRASHDIR"/start.sh cronset "订阅链接" 2>/dev/null "$CRASHDIR"/start.sh cronset "$UNINSTALL_CRON_SUB" 2>/dev/null
"$CRASHDIR"/start.sh cronset "ShellCrash初始化" 2>/dev/null "$CRASHDIR"/start.sh cronset "$UNINSTALL_CRON_INIT" 2>/dev/null
"$CRASHDIR"/start.sh cronset "task.sh" 2>/dev/null "$CRASHDIR"/start.sh cronset "task.sh" 2>/dev/null
# 移除安装目录 # 移除安装目录
if [ -n "$CRASHDIR" ] && [ "$CRASHDIR" != '/' ]; then if [ -n "$CRASHDIR" ] && [ "$CRASHDIR" != '/' ]; then
comp_box "是否保留脚本配置及订阅文件?" comp_box "$UNINSTALL_KEEP_CONFIRM"
btm_box "1) " \ btm_box "1) $UNINSTALL_YES" \
"0) " "0) $UNINSTALL_NO"
read -r -p "$COMMON_INPUT> " res read -r -p "$COMMON_INPUT> " res
if [ "$res" = '1' ]; then if [ "$res" = '1' ]; then
mv -f "$CRASHDIR"/configs /tmp/ShellCrash/configs_bak mv -f "$CRASHDIR"/configs /tmp/ShellCrash/configs_bak
@@ -34,7 +36,7 @@ uninstall() {
rm -rf "$CRASHDIR" rm -rf "$CRASHDIR"
fi fi
else else
msg_alert "\033[31m环境变量配置有误,请尝试手动移除安装目录!\033[0m" msg_alert "\033[31m$UNINSTALL_ENV_ERROR\033[0m"
fi fi
# 移除其他内容 # 移除其他内容
@@ -48,9 +50,9 @@ uninstall() {
} }
sed -i '/all_proxy/'d /etc/profile 2>/dev/null sed -i '/all_proxy/'d /etc/profile 2>/dev/null
sed -i '/ALL_PROXY/'d /etc/profile 2>/dev/null sed -i '/ALL_PROXY/'d /etc/profile 2>/dev/null
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user 2>/dev/null sed -i "/$UNINSTALL_SSH_MARK/d" /etc/firewall.user 2>/dev/null
sed -i '/ShellCrash初始化/'d /etc/storage/started_script.sh 2>/dev/null sed -i "/$UNINSTALL_CRON_INIT/d" /etc/storage/started_script.sh 2>/dev/null
sed -i '/ShellCrash初始化/'d /jffs/.asusrouter 2>/dev/null sed -i "/$UNINSTALL_CRON_INIT/d" /jffs/.asusrouter 2>/dev/null
[ "$BINDIR" != "$CRASHDIR" ] && rm -rf "$BINDIR" [ "$BINDIR" != "$CRASHDIR" ] && rm -rf "$BINDIR"
rm -rf /etc/init.d/shellcrash rm -rf /etc/init.d/shellcrash
rm -rf /etc/systemd/system/shellcrash.service rm -rf /etc/systemd/system/shellcrash.service
@@ -62,12 +64,12 @@ uninstall() {
userdel -r shellcrash 2>/dev/null userdel -r shellcrash 2>/dev/null
nvram set script_usbmount="" 2>/dev/null nvram set script_usbmount="" 2>/dev/null
nvram commit 2>/dev/null nvram commit 2>/dev/null
comp_box "\033[36m已卸载ShellCrash相关文件有缘再会\033[0m" \ comp_box "\033[36m$UNINSTALL_DONE\033[0m" \
"\033[33m请手动关闭当前窗口以重置环境变量!\033[0m" "\033[33m$UNINSTALL_CLOSE_HINT\033[0m"
line_break line_break
sleep 1 sleep 1
exit 0 exit 0
else else
msg_alert "\033[31m操作已取消!\033[0m" msg_alert "\033[31m$UNINSTALL_CANCELED\033[0m"
fi fi
} }