Merge remote-tracking branch 'upstream/dev' into redesign-1

This commit is contained in:
sofia
2026-01-25 00:05:27 +08:00
15 changed files with 397 additions and 311 deletions

View File

@@ -5,10 +5,13 @@
__IS_MODULE_6_CORECONFIG_LOADED=1
if echo "$crashcore" | grep -q 'singbox'; then
CONFIG_PATH="$CRASHDIR"/yamls/config.json
CONFIG_PATH="$CRASHDIR"/jsons/config.json
CORE_TYPE=singbox
else
CONFIG_PATH="$CRASHDIR"/jsons/config.yaml
CONFIG_PATH="$CRASHDIR"/yamls/config.yaml
CORE_TYPE=clash
fi
URI_EXP='ss|vmess|vless|trojan|tuic|anytls|shadowtls|hysteria(2)?'
# 配置文件主界面
set_core_config() {
@@ -17,15 +20,14 @@ set_core_config() {
[ -s "$CRASHDIR"/configs/providers.cfg ] || [ -s "$CRASHDIR"/configs/providers_uri.cfg ] && {
echo -e "\033[36m输入数字可管理对应提供者\033[0m"
cat "$CRASHDIR"/configs/providers.cfg "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null |
awk '{print " " NR ") " $1 "\t" substr($2,1,30) "..."}'
awk '{print " " NR ") " $1 " \t\t" substr($2,1,30) "..."}'
separator_line "-"
}
content_line "a) \033[32m添加提供者\033[0m(支持订阅/节点/本地文件)"
content_line "b) \033[36m本地生成配置文件\033[0m(基于providers,推荐!)"
content_line "c) \033[33m在线生成配置文件\033[0m(Subconverter)"
content_line "a) \033[32m添加提供者\033[0m(支持订阅/分享链接及本地文件)"
content_line "b) \033[36m本地生成配置文件\033[0m(By Providers,推荐!)"
content_line "c) \033[33m在线生成配置文件\033[0m(By Subconverter)"
content_line "d) \033[31m清空提供者列表\033[0m"
content_line "e) \033[36m自定义配置文件\033[0m"
content_line "f) \033[33m还原配置文件\033[0m"
common_back
read -r -p "$COMMON_INPUT_L > " num
@@ -35,10 +37,9 @@ set_core_config() {
;;
[1-9] | [1-9][0-9])
line=$(cat "$CRASHDIR"/configs/providers.cfg "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null | sed -n "$num p")
setproviders
setproviders "$line"
;;
a)
line=''
setproviders
;;
b)
@@ -80,28 +81,6 @@ set_core_config() {
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
fi
;;
f)
if [ ! -f "$CONFIG_PATH".bak ]; then
echo "-----------------------------------------------"
content_line "\033[31m没有找到配置文件的备份\033[0m"
else
echo "-----------------------------------------------"
content_line "备份文件共有\033[32m$(wc -l <$"$CONFIG_PATH".bak)\033[0m行内容"
content_line "当前文件共有\033[32m$(wc -l <$"$CONFIG_PATH")\033[0m行内容"
read -p "确认还原配置文件?此操作不可逆![1/0] > " res
if [ "$res" = '1' ]; then
mv "$CONFIG_PATH".bak "$CONFIG_PATH"
echo "----------------------------------------------"
content_line "\033[32m配置文件已还原请手动重启服务\033[0m"
sleep 1
break
else
echo "-----------------------------------------------"
content_line "\033[31m操作已取消返回上级菜单\033[0m"
sleep 1
fi
fi
;;
*)
error_letter
@@ -112,23 +91,24 @@ set_core_config() {
}
setproviders() {
case "$(echo "$line" | cut -d ' ' -f 2)" in
case "$(echo "$@" | cut -d ' ' -f 2)" in
http* | ./providers*)
set -- $line
set -- $@
name=$1
link=$2
interval=$3
interval2=$4
ua=$5
exclude=$6
include=$7
exclude_w=${6#\#}
include_w=${7#\#}
;;
*)
*://*)
set -- $line
name=$1
link_uri=$2
;;
esac
last_name="$name"
[ -z "$interval" ] && interval=3
[ -z "$interval2" ] && interval2=12
[ -z "$ua" ] && ua='clash.meta'
@@ -141,13 +121,13 @@ setproviders() {
separator_line '-'
content_line "3) 设置\033[33m健康检查间隔\033[0m\t\033[47;30m$interval\033[0m"
content_line "4) 设置\033[36m自动更新间隔\033[0m\t\033[47;30m$interval2\033[0m"
content_line "5) 设置\033[31m排除节点正则\033[0m\t\033[47;30m$exclude\033[0m"
content_line "6) 设置\033[32m包含节点正则\033[0m\t\033[47;30m$include\033[0m"
content_line "5) 设置\033[31m排除节点正则\033[0m\t\033[47;30m$exclude_w\033[0m"
content_line "6) 设置\033[32m包含节点正则\033[0m\t\033[47;30m$include_w\033[0m"
echo "$link" | grep -q '^http' &&
content_line "7) 设置\033[33m虚拟浏览器UA\033[0m\t\033[47;30m$ua\033[0m"
}
separator_line "-"
content_line "a) \033[32m添加此提供者\033[0m"
content_line "a) \033[36m保存此提供者\033[0m"
[ -n "$link" ] &&
content_line "b) \033[32m本地生成\033[0m仅包含此提供者的配置文件"
echo "$link$link_uri" | grep -q '://' &&
@@ -175,23 +155,58 @@ setproviders() {
;;
2)
separator_line "="
content_line "订阅链接-支持https/http开头的clash配置文件订阅链接"
content_line "分享链接-支持ss|vmess|vless|trojan|tuic|anytls|shadowtls|hysteria(2)..."
content_line "本地文件-必须放在此目录下:\033[32m$CRASHDIR/providers\033[0m"
content_line "\033[33m订阅链接\033[0m: https/http开头的clash配置文件订阅链接"
content_line "\033[36m分享链接\033[0m: $URI_EXP"
content_line "\033[33m本地文件\033[0m: 必须放在此目录下:\033[32m$CRASHDIR/providers\033[0m"
content_line "\033[36m Base64 \033[0m: 请直接写入本地文件"
separator_line "-"
read -p "请输入具体链接或文件名 > " text
list=$(
for f in "$CRASHDIR"/providers/*; do
[ "$f" = "$CRASHDIR"/providers/uri_group ] && continue
[ -f "$f" ] || continue
printf '%s\n' "${f##*/}"
done | sort -V
)
if [ -n "$list" ];then
i=1
printf '%s\n' "$list" | while IFS= read -r f; do
content_line "$i) $f"
i=$((i+1))
done
separator_line "-"
read -r -p "请选择对应文件或输入具体链接 > " text
else
read -r -p "请输入具体链接 > " text
fi
text=$(echo "$text" | sed 's/ //g') #去空格
if echo "$text" | grep -q '^http'; then
case "$text" in
http*)
#处理订阅链接
text=$(echo "$text" | sed 's/ *(.*)//g; s/#.*//g') #处理注释及超链接
link="$text"
elif [ -n "$(echo $text | grep -E '^ss|vmess|vless|trojan|tuic|anytls|shadowtls|hysteria(2)')" ]; then
link_uri=$(echo "$text" | sed 's/#.*//g') # 删除注释
[ -z "$name" ] && name=$(echo "$text" | grep -o '#.*$' | cut -c2-)
elif [ -f "$CRASHDIR/providers/$text" ]; then
link="./providers/$text"
else
error_input
fi
common_success
;;
[1-9] | [1-9][0-9])
#处理本地文件
file=$(printf '%s\n' "$list" | sed -n "${text}p")
if [ -s "$CRASHDIR/providers/$file" ]; then
link="$file"
common_success
else
errornum
fi
;;
*)
#处理分享链接
if [ -n "$(echo $text | grep -E "^$URI_EXP")" ]; then
link_uri=$(echo "$text" | sed 's/#.*//g') # 删除注释
[ -z "$name" ] && name=$(echo "$text" | grep -o '#.*$' | cut -c2-)
common_success
else
error_input
fi
;;
esac
;;
3)
read -p "请输入健康检查间隔(单位:分钟) > " num
@@ -210,38 +225,49 @@ setproviders() {
fi
;;
5)
read -p "请输入需要排除的节点关键字(支持正则) > " text
if [ -n "$text" ]; then
exclude="$text"
else
error_input
fi
read -p "请输入需要排除的节点关键字(支持正则,不支持空格,输入0删除) > " text
text=$(echo "$text" | sed 's/ //g') #去空格
case "$text" in
0)
exclude_w=''
;;
*)
exclude_w="$text"
;;
esac
;;
6)
read -p "请输入需要筛选使用的节点关键字(支持正则) > " text
if [ -n "$text" ]; then
include="$text"
else
error_input
fi
read -p "请输入需要筛选使用的节点关键字(支持正则,不支持空格,输入0删除) > " text
text=$(echo "$text" | sed 's/ //g') #去空格
case "$text" in
0)
include_w=''
;;
*)
include_w="$text"
;;
esac
;;
7)
read -p "请输入浏览器UA > " text
if [ -n "$text" ]; then
ua="$text"
else
error_input
fi
read -p "请输入浏览器UA(输入0重置) > " text
case "$text" in
0)
include_w='clash.meta'
;;
*)
include_w="$text"
;;
esac
;;
a)
addproviders && common_success
break
;;
b)
if echo "$link" | grep -q '^http'; then
if [ -n "$name" ] && [ -n "$link" ]; then
addproviders
. "$CRASHDIR"/menus/providers.sh
gen_${coretype}_providers "$name" "$link" "$interval" "$interval2" "$exclude" "$include"
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
gen_providers "$name" "$link" "$interval" "$interval2" "$ua" "#$exclude_w" "#$include_w"
else
content_line "\033[31m$请先完成必填选项!\033[0m"
fi
@@ -302,11 +328,11 @@ setproviders() {
addproviders() {
[ -n "$name" ] && {
[ -s "$CRASHDIR"/configs/providers.cfg ] && sed -i "/^$name /d" "$CRASHDIR"/configs/providers.cfg
[ -s "$CRASHDIR"/configs/providers_uri.cfg ] && sed -i "/^$name /d" "$CRASHDIR"/configs/providers_uri.cfg
[ -s "$CRASHDIR"/configs/providers.cfg ] && sed -i "/^$last_name /d" "$CRASHDIR"/configs/providers.cfg
[ -s "$CRASHDIR"/configs/providers_uri.cfg ] && sed -i "/^$last_name /d" "$CRASHDIR"/configs/providers_uri.cfg
}
if [ -n "$name" ] && [ -n "$link" ]; then
echo "$name $link $interval $interval2 $ua $exclude $include" >>"$CRASHDIR"/configs/providers.cfg
echo "$name $link $interval $interval2 $ua #$exclude_w #$include_w" >>"$CRASHDIR"/configs/providers.cfg
return 0
elif [ -n "$name" ] && [ -n "$link_uri" ]; then
echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg