diff --git a/scripts/menus/override.sh b/scripts/menus/override.sh index 785469b0..39383e6c 100644 --- a/scripts/menus/override.sh +++ b/scripts/menus/override.sh @@ -218,7 +218,7 @@ setrules() { fi ;; 3) - comp_box "是否确认清空全部自定义规则:" + comp_box "是否确认清空全部自定义规则?" btm_box "1) 是" \ "0) 否,返回上级菜单" read -r -p "$COMMON_INPUT> " res @@ -233,10 +233,11 @@ setrules() { 4) if [ "$proxies_bypass" = "OFF" ]; then comp_box "\033[33m本功能会自动将当前配置文件中的节点域名或IP设置为直连规则以防止出现双重流量!\033[0m" \ - "\033[33m请确保下游设备使用的节点与ShellCrash中使用的节点相同,否则无法生效!\033[0m" - btm_box "是否启用节点绕过?" \ + "\033[33m请确保下游设备使用的节点与ShellCrash中使用的节点相同,否则无法生效!\033[0m" \ "" \ - "1) 是" \ + "是否启用节点绕过?" + btm_box + "1) 是" \ "0) 否,返回上级菜单" read -r -p "$COMMON_INPUT> " res if [ "$res" = "1" ]; then @@ -503,10 +504,10 @@ setproxies() { 4) if [ "$proxies_bypass" = "OFF" ]; then comp_box "\033[33m本功能会自动将当前配置文件中的节点域名或IP设置为直连规则以防止出现双重流量!\033[0m" \ - "\033[33m请确保下游设备使用的节点与ShellCrash中使用的节点相同,否则无法生效!\033[0m" - btm_box "是否确定启用节点绕过:" \ + "\033[33m请确保下游设备使用的节点与ShellCrash中使用的节点相同,否则无法生效!\033[0m" \ "" \ - "1) 是" \ + "是否确定启用节点绕过:" + btm_box "1) 是" \ "0) 否,返回上级菜单" read -r -p "$COMMON_INPUT> " res if [ "$res" = "1" ]; then diff --git a/scripts/menus/providers.sh b/scripts/menus/providers.sh index 92e7a8ac..c8cb266e 100644 --- a/scripts/menus/providers.sh +++ b/scripts/menus/providers.sh @@ -5,86 +5,98 @@ __IS_MODULE_PROVIDERS=1 if [ "$crashcore" = singboxr ]; then - CORE_TYPE=singbox + CORE_TYPE=singbox else - CORE_TYPE=clash + CORE_TYPE=clash fi providers() { while true; do # 获取模版名称 if [ -z "$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg)" ]; then - provider_temp_des=$(sed -n "1 p" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list | awk '{print $1}') + provider_temp_des=$(sed -n "1 p" "$CRASHDIR"/configs/"${CORE_TYPE}"_providers.list | awk '{print $1}') else provider_temp_file=$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}') - provider_temp_des=$(grep "$provider_temp_file" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list | awk '{print $1}') + provider_temp_des=$(grep "$provider_temp_file" "$CRASHDIR"/configs/"${CORE_TYPE}"_providers.list | awk '{print $1}') [ -z "$provider_temp_des" ] && provider_temp_des=$provider_temp_file fi - separator_line "-" - content_line "1) \033[32m生成\033[0m包含全部提供者的配置文件" - content_line "2) 选择\033[33m规则模版\033[0m \033[32m$provider_temp_des\033[0m" - content_line "3) \033[33m清理\033[0mproviders目录文件" - separator_line "-" + + top_box "1) \033[32m生成\033[0m包含全部提供者的配置文件" \ + "2) 选择\033[33m规则模版\033[0m \033[32m$provider_temp_des\033[0m" \ + "3) \033[33m清理\033[0mproviders目录文件" \ + "" common_back - read -p "请输入对应字母或数字 > " num + read -r -p "请输入对应字母或数字> " num case "$num" in "" | 0) break ;; 1) - separator_line "-" if [ -s "$CRASHDIR"/configs/providers.cfg ] || [ -s "$CRASHDIR"/configs/providers_uri.cfg ]; then - . "$CRASHDIR/menus/providers_$CORE_TYPE.sh" - gen_providers + . "$CRASHDIR/menus/providers_$CORE_TYPE.sh" + gen_providers else - content_line "\033[31m你还未添加链接或本地配置文件,请先添加!\033[0m" - sleep 1 + msg_alert "\033[31m你还未添加链接或本地配置文件,请先添加!\033[0m" fi ;; 2) - list=$(cat "$CRASHDIR/configs/${CORE_TYPE}_providers.list" | awk '{print $1}') - separator_line "-" - content_line "当前规则模版为:\033[32m$provider_temp_des\033[0m" - content_line "\033[33m请选择在线模版:\033[0m" - separator_line "-" + list=$(cat "$CRASHDIR/configs/${CORE_TYPE}_providers.list" | awk '{print $1}') + + comp_box "当前规则模版为:\033[32m$provider_temp_des\033[0m" \ + "\033[33m请选择在线模版:\033[0m" list_box "$list" - separator_line "-" + content_line "" content_line "a) 使用\033[36m本地模版\033[0m" + content_line "" common_back - read -p "请输入对应字母或数字 > " num + read -r -p "请输入对应字母或数字> " num case "$num" in "" | 0) ;; a) - read -p "请输入模版的路径(绝对路径) > " dir - if [ -s $dir ]; then + echo "" + read -r -p "请输入模版的路径(绝对路径)> " dir + if [ -s "$dir" ]; then provider_temp_file=$dir - setconfig provider_temp_"$CORE_TYPE" "$provider_temp_file" - content_line "\033[32m设置成功!\033[0m" + if setconfig provider_temp_"$CORE_TYPE" "$provider_temp_file"; then + common_success + else + common_failed + fi else - content_line "\033[31m输入错误,找不到对应模版文件!\033[0m" + msg_alert "\033[31m输入错误,找不到对应模版文件!\033[0m" fi - sleep 1 ;; *) - provider_temp_file=$(sed -n "$num p" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list 2>/dev/null | awk '{print $2}') + provider_temp_file=$(sed -n "$num p" "$CRASHDIR"/configs/"${CORE_TYPE}"_providers.list 2>/dev/null | awk '{print $2}') if [ -z "$provider_temp_file" ]; then errornum - sleep 1 else - setconfig provider_temp_"$CORE_TYPE" "$provider_temp_file" + if setconfig provider_temp_"$CORE_TYPE" "$provider_temp_file"; then + common_success + else + common_failed + fi fi ;; esac ;; 3) - content_line "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m" - read -p "是否继续?(1/0) > " res - [ "$res" = "1" ] && rm -rf "$CRASHDIR"/providers && common_success + comp_box "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m" \ + "" \ + "是否继续?" + btm_box "1) 是" \ + "0) 否" + read -r -p "$COMMON_INPUT> " res + if [ "$res" = "1" ]; then + if rm -rf "$CRASHDIR"/providers; then + common_success + else + common_failed + fi + fi ;; *) errornum - sleep 1 - break ;; esac done diff --git a/scripts/menus/providers_clash.sh b/scripts/menus/providers_clash.sh index 689905b7..d955f170 100644 --- a/scripts/menus/providers_clash.sh +++ b/scripts/menus/providers_clash.sh @@ -6,94 +6,97 @@ __IS_PROVIDERS_CLASH=1 . "$CRASHDIR"/libs/web_get_bin.sh -#生成clash的providers配置文件 -gen_providers(){ - if [ -z "$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg)" ];then - provider_temp_file="$(sed -n "1 p" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list | awk '{print $2}')" - else - provider_temp_file=$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}') - fi - echo "-----------------------------------------------" - if [ -s "$provider_temp_file" ];then - ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file - else - echo -e "\033[33m正在获取在线模版!\033[0m" - get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file" - [ -z "$(grep -o 'rules' "$TMPDIR"/provider_temp_file)" ] && { - echo -e "\033[31m下载失败,请尝试更换安装源!\033[0m" - . "$CRASHDIR"/menus/9_upgrade.sh && setserver - setproviders - } - fi - #生成proxy_providers模块 - mkdir -p "$TMPDIR"/providers - #预创建文件并写入对应文件头 - echo 'proxy-providers:' > "$TMPDIR"/providers/providers.yaml - #切割模版文件 - sed -n '/^proxy-groups:/,/^[a-z]/ { /^rule/d; p; }' "$TMPDIR"/provider_temp_file > "$TMPDIR"/providers/proxy-groups.yaml - sed -n '/^rule/,$p' "$TMPDIR"/provider_temp_file > "$TMPDIR"/providers/rules.yaml - rm -rf "$TMPDIR"/provider_temp_file - #基于单订阅生成providers模块 - if [ -n "$1" ];then - gen_providers_txt $@ - providers_tags=$1 - else - #基于全部订阅/本地文件生成 - [ -s "$CRASHDIR"/configs/providers.cfg ] && { - providers_tags='' - while read line;do - gen_providers_txt $line - providers_tags=$(echo "$providers_tags, $tag" | sed 's/^, //') - done < "$CRASHDIR"/configs/providers.cfg - } - #基于全部节点分享链接生成 - [ -s "$CRASHDIR"/configs/providers_uri.cfg ] && { - mkdir -p "$CRASHDIR"/providers - awk '{ print ($1=="vmess" ? $2 : $2 "#" $1) }' "$CRASHDIR"/configs/providers_uri.cfg > "$CRASHDIR"/providers/uri_group - gen_providers_txt "Uri_group" "./providers/uri_group" "3" "12" - providers_tags=$(echo "$providers_tags, Uri_group" | sed 's/^, //') - } - fi - #修饰模版文件并合并 - sed -i "s/{providers_tags}/$providers_tags/g" "$TMPDIR"/providers/proxy-groups.yaml - cut -c 1- "$TMPDIR"/providers/providers.yaml "$TMPDIR"/providers/proxy-groups.yaml "$TMPDIR"/providers/rules.yaml > "$TMPDIR"/config.yaml - rm -rf "$TMPDIR"/providers - #调用内核测试 - . "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml - if [ "$?" = 0 ];then - echo -e "\033[32m配置文件生成成功!\033[0m" - mkdir -p "$CRASHDIR"/yamls - mv -f "$TMPDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml - read -p "是否立即启动/重启服务?(1/0) > " res - [ "$res" = 1 ] && { - start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset '更新订阅' - exit - } - else - rm -rf "$TMPDIR"/CrashCore - rm -rf "$TMPDIR"/config.yaml - echo -e "\033[31m生成配置文件出错,请仔细检查输入!\033[0m" - fi +# 生成clash的providers配置文件 +gen_providers() { + if [ -z "$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg)" ]; then + provider_temp_file="$(sed -n "1 p" "$CRASHDIR"/configs/"${CORE_TYPE}"_providers.list | awk '{print $2}')" + else + provider_temp_file=$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}') + fi + + if [ -s "$provider_temp_file" ]; then + ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file + else + msg_alert "\033[33m正在获取在线模版......\033[0m" + get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file" + [ -z "$(grep -o 'rules' "$TMPDIR"/provider_temp_file)" ] && { + msg_alert "\033[31m下载失败,请尝试更换安装源!\033[0m" + . "$CRASHDIR"/menus/9_upgrade.sh && setserver + setproviders + } + fi + # 生成proxy_providers模块 + mkdir -p "$TMPDIR"/providers + # 预创建文件并写入对应文件头 + echo 'proxy-providers:' >"$TMPDIR"/providers/providers.yaml + # 切割模版文件 + sed -n '/^proxy-groups:/,/^[a-z]/ { /^rule/d; p; }' "$TMPDIR"/provider_temp_file >"$TMPDIR"/providers/proxy-groups.yaml + sed -n '/^rule/,$p' "$TMPDIR"/provider_temp_file >"$TMPDIR"/providers/rules.yaml + rm -rf "$TMPDIR"/provider_temp_file + # 基于单订阅生成providers模块 + if [ -n "$1" ]; then + gen_providers_txt "$@" + providers_tags=$1 + else + # 基于全部订阅/本地文件生成 + [ -s "$CRASHDIR"/configs/providers.cfg ] && { + providers_tags='' + while read -r line; do + gen_providers_txt $line + providers_tags=$(echo "$providers_tags, $tag" | sed 's/^, //') + done <"$CRASHDIR"/configs/providers.cfg + } + # 基于全部节点分享链接生成 + [ -s "$CRASHDIR"/configs/providers_uri.cfg ] && { + mkdir -p "$CRASHDIR"/providers + awk '{ print ($1=="vmess" ? $2 : $2 "#" $1) }' "$CRASHDIR"/configs/providers_uri.cfg >"$CRASHDIR"/providers/uri_group + gen_providers_txt "Uri_group" "./providers/uri_group" "3" "12" + providers_tags=$(echo "$providers_tags, Uri_group" | sed 's/^, //') + } + fi + # 修饰模版文件并合并 + sed -i "s/{providers_tags}/$providers_tags/g" "$TMPDIR"/providers/proxy-groups.yaml + cut -c 1- "$TMPDIR"/providers/providers.yaml "$TMPDIR"/providers/proxy-groups.yaml "$TMPDIR"/providers/rules.yaml >"$TMPDIR"/config.yaml + rm -rf "$TMPDIR"/providers + # 调用内核测试 + . "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml + if [ "$?" = 0 ]; then + msg_alert "\033[32m配置文件生成成功!\033[0m" + mkdir -p "$CRASHDIR"/yamls + mv -f "$TMPDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml + comp_box "是否立即启动/重启服务?" + btm_box "1) 是" \ + "0) 否" + read -r -p "$COMMON_INPUT> " res + [ "$res" = 1 ] && { + start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset '更新订阅' + exit + } + else + rm -rf "$TMPDIR"/CrashCore + rm -rf "$TMPDIR"/config.yaml + msg_alert "\033[31m生成配置文件出错,请仔细检查输入!\033[0m" + fi } -gen_providers_txt(){ - if [ -n "$(echo $2|grep -E '^./')" ];then - type=file - path=$2 - download_url= - else - type=http - path="./providers/$1.yaml" - download_url=$2 - fi - tag=$1 - interval=${3:-3} - interval2=${4:-12} - ua=${5:-clash.meta} - exclude=${6#\#} - include=${7#\#} - - cat >> "$TMPDIR"/providers/providers.yaml <>"$TMPDIR"/providers/providers.yaml <> "$TMPDIR"/providers/providers.yaml <>"$TMPDIR"/providers/providers.yaml <> "$TMPDIR"/providers/proxy-groups.yaml + } + # 写入提供者 + echo ' - {name: '"$tag"', type: url-test, tolerance: 100, lazy: true, use: ['"$tag"']}' >>"$TMPDIR"/providers/proxy-groups.yaml } - \ No newline at end of file diff --git a/scripts/menus/providers_singbox.sh b/scripts/menus/providers_singbox.sh index 13a7d7a0..316255c3 100644 --- a/scripts/menus/providers_singbox.sh +++ b/scripts/menus/providers_singbox.sh @@ -6,100 +6,102 @@ __IS_PROVIDERS_SINGBOX=1 . "$CRASHDIR"/libs/web_get_bin.sh -#生成singbox的providers配置文件 -gen_providers(){ - if [ -z "$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg)" ];then - provider_temp_file="$(sed -n "1 p" "$CRASHDIR"/configs/${CORE_TYPE}_providers.list | awk '{print $2}')" - else - provider_temp_file=$(grep "provider_temp_${CORE_TYPE}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}') - fi - echo "-----------------------------------------------" - if [ -s "$provider_temp_file" ];then - ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file - else - echo -e "\033[33m正在获取在线模版!\033[0m" - get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file" - [ -z "$(grep -o 'route' "$TMPDIR"/provider_temp_file)" ] && { - echo -e "\033[31m下载失败,请尝试更换安装源!\033[0m" - . "$CRASHDIR"/menus/9_upgrade.sh && setserver - setproviders - } - fi - #生成outbound_providers模块 - mkdir -p "$TMPDIR"/providers - #预创建文件并写入对应文件头 - cat > "$TMPDIR"/providers/providers.json <"$TMPDIR"/providers/providers.json < "$TMPDIR"/providers/outbounds_add.json <"$TMPDIR"/providers/outbounds_add.json < "$CRASHDIR"/providers/uri_group - gen_providers_txt "Uri_group" "./providers/uri_group" "3" "12" - providers_tags=$(echo "$providers_tags, \"Uri_group\"" | sed 's/^, //') - } - fi - #修复文件格式 - sed -i '$s/},/}]}/' "$TMPDIR"/providers/outbounds_add.json - sed -i '$s/},/}]}/' "$TMPDIR"/providers/providers.json - #使用模版生成outbounds和rules模块 - cat "$TMPDIR"/provider_temp_file | sed "s/{providers_tags}/$providers_tags/g" | sed "s/\"providers_tags\"/$providers_tags/g" > "$TMPDIR"/providers/outbounds.json - rm -rf "$TMPDIR"/provider_temp_file - #调用内核测试 - . "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore merge "$TMPDIR"/config.json -C "$TMPDIR"/providers - if [ "$?" = 0 ];then - echo -e "\033[32m配置文件生成成功!如果启动超时建议更新里手动安装Singbox-srs数据库常用包!\033[0m" - mkdir -p "$CRASHDIR"/jsons - mv -f "$TMPDIR"/config.json "$CRASHDIR"/jsons/config.json - rm -rf "$TMPDIR"/providers - read -p "是否立即启动/重启服务?(1/0) > " res - [ "$res" = 1 ] && { - start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset '更新订阅' - exit - } - else - echo -e "\033[31m生成配置文件出错,请仔细检查输入!\033[0m" - rm -rf "$TMPDIR"/CrashCore - #rm -rf "$TMPDIR"/providers - fi + # 基于单订阅生成providers模块 + if [ -n "$1" ]; then + gen_providers_txt "$@" + providers_tags=\"$1\" + else + # 基于全部订阅/本地文件生成 + [ -s "$CRASHDIR"/configs/providers.cfg ] && { + providers_tags='' + while read -r line; do + gen_providers_txt "$line" + providers_tags=$(echo "$providers_tags, \"$tag\"" | sed 's/^, //') + done <"$CRASHDIR"/configs/providers.cfg + } + # 基于全部节点分享链接生成 + [ -s "$CRASHDIR"/configs/providers_uri.cfg ] && { + mkdir -p "$CRASHDIR"/providers + awk '{ print ($1=="vmess" ? $2 : $2 "#" $1) }' "$CRASHDIR"/configs/providers_uri.cfg >"$CRASHDIR"/providers/uri_group + gen_providers_txt "Uri_group" "./providers/uri_group" "3" "12" + providers_tags=$(echo "$providers_tags, \"Uri_group\"" | sed 's/^, //') + } + fi + # 修复文件格式 + sed -i '$s/},/}]}/' "$TMPDIR"/providers/outbounds_add.json + sed -i '$s/},/}]}/' "$TMPDIR"/providers/providers.json + # 使用模版生成outbounds和rules模块 + cat "$TMPDIR"/provider_temp_file | sed "s/{providers_tags}/$providers_tags/g" | sed "s/\"providers_tags\"/$providers_tags/g" >"$TMPDIR"/providers/outbounds.json + rm -rf "$TMPDIR"/provider_temp_file + # 调用内核测试 + . "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore merge "$TMPDIR"/config.json -C "$TMPDIR"/providers + if [ "$?" = 0 ]; then + msg_alert "\033[32m配置文件生成成功!如果启动超时建议更新里手动安装Singbox-srs数据库常用包!\033[0m" + mkdir -p "$CRASHDIR"/jsons + mv -f "$TMPDIR"/config.json "$CRASHDIR"/jsons/config.json + rm -rf "$TMPDIR"/providerss + comp_box "是否立即启动/重启服务?" + btm_box "1) 是" \ + "0) 否" + read -r -p "$COMMON_INPUT> " res + [ "$res" = 1 ] && { + start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset '更新订阅' + exit + } + else + rm -rf "$TMPDIR"/CrashCore + msg_alert "\033[31m生成配置文件出错,请仔细检查输入!\033[0m" + # rm -rf "$TMPDIR"/providers + fi } -gen_providers_txt(){ - tag=$1 - interval=${3:-3} - interval2=${4:-12} - ua=${5:-clash.meta} - exclude=${6#\#} - include=${7#\#} - [ -n "$exclude" ] && exclude_ele="\"exclude\": \"$exclude\"," - [ -n "$include" ] && include_ele="\"include\": \"$include\"," - if [ -n "$(echo $2|grep -E '^./')" ];then - cat >> "$TMPDIR"/providers/providers.json <>"$TMPDIR"/providers/providers.json <> "$TMPDIR"/providers/providers.json <>"$TMPDIR"/providers/providers.json <> "$TMPDIR"/providers/providers.json <>"$TMPDIR"/providers/providers.json <> "$TMPDIR"/providers/outbounds_add.json + # 写入提供者 + echo '{ "tag": "'"$tag"'", "type": "urltest", "tolerance": 100, "providers": ["'"$tag"'"], "include": ".*" },' >>"$TMPDIR"/providers/outbounds_add.json } diff --git a/scripts/menus/subconverter.sh b/scripts/menus/subconverter.sh index e584a348..c91faf30 100644 --- a/scripts/menus/subconverter.sh +++ b/scripts/menus/subconverter.sh @@ -7,171 +7,222 @@ __IS_MODULE_SUBCONVERTER=1 [ -z "$rule_link" ] && rule_link=1 [ -z "$server_link" ] && server_link=1 -#Subconverter在线订阅转换 -subconverter() { - while true; do - separator_line "-" - content_line "1) \033[32m生成\033[0m包含全部节点/订阅的配置文件" - content_line "2) 设置\033[31m排除节点正则\033[0m \033[47;30m$exclude\033[0m" - content_line "3) 设置\033[32m包含节点正则\033[0m \033[47;30m$include\033[0m" - content_line "4) 选择\033[33m在线规则模版\033[0m" - content_line "5) 选择\033[0mSubconverter服务器\033[0m" - content_line "6) 自定义浏览器UA \033[32m$user_agent\033[0m" - common_back - read -r -p "请输入对应数字 > " num - case "$num" in - "" | 0) - break - ;; - 1) - providers_link=$(grep -v '\./providers/' "$CRASHDIR"/configs/providers.cfg 2>/dev/null |awk '{print $2}' |paste -sd '|') - uri_link=$(grep -v '^#' "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null |awk '{ print ($1=="vmess" ? $2 : $2 "#" $1) }' |paste -sd '|') - Url=$(echo "$providers_link|$uri_link" |sed 's/^|// ; s/|$//') - setconfig Url "'$Url'" - Https='' - setconfig Https - # 获取在线文件 - jump_core_config +# Subconverter在线订阅转换 +subconverter() { + while true; do + [ -z "$exclude" ] && exclude="未设置" + [ -z "$include" ] && include="未设置" + line_break + separator_line "=" + content_line "1) \033[32m生成\033[0m包含全部节点/订阅的配置文件" + content_line "2) 设置\033[31m排除节点正则\033[0m \033[47;30m$exclude\033[0m" + content_line "3) 设置\033[32m包含节点正则\033[0m \033[47;30m$include\033[0m" + content_line "4) 选择\033[33m在线规则模版\033[0m" + content_line "5) 选择\033[0mSubconverter服务器\033[0m" + content_line "6) 自定义浏览器UA \033[32m$user_agent\033[0m" + content_line "" + common_back + read -r -p "请输入对应数字> " num + case "$num" in + "" | 0) + break + ;; + 1) + providers_link=$(grep -v '\./providers/' "$CRASHDIR"/configs/providers.cfg 2>/dev/null | awk '{print $2}' | paste -sd '|') + uri_link=$(grep -v '^#' "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null | awk '{ print ($1=="vmess" ? $2 : $2 "#" $1) }' | paste -sd '|') + Url=$(echo "$providers_link|$uri_link" | sed 's/^|// ; s/|$//') + setconfig Url "'$Url'" + Https='' + setconfig Https + # 获取在线文件 + jump_core_config ;; 2) - gen_link_flt - ;; + gen_link_flt + ;; 3) - gen_link_ele - ;; + gen_link_ele + ;; 4) - gen_link_config - ;; + gen_link_config + ;; 5) - gen_link_server - ;; + gen_link_server + ;; 6) - set_sub_ua - ;; - *) - errornum - break - ;; - esac - done + set_sub_ua + ;; + *) + errornum + ;; + esac + done } -gen_link_flt() { # 排除节点正则 - [ -z "$exclude" ] && exclude="未设置" - separator_line "-" - content_line "\033[33m当前过滤关键字:\033[47;30m$exclude\033[0m" - separator_line "-" - content_line "\033[33m匹配关键字的节点会在导入时被【屏蔽】!!!\033[0m" - content_line "多个关键字可以用\033[30;47m | \033[0m号分隔" - content_line "\033[32m支持正则表达式\033[0m,空格请使用\033[30;47m + \033[0m号替代" - separator_line "-" - content_line " 000 \033[31m删除\033[0m关键字" - content_line " 回车 取消输入并返回上级菜单" - separator_line "-" - read -r -p "请输入关键字 > " exclude - if [ "$exclude" = '000' ]; then - separator_line "-" - exclude='' - content_line "\033[31m 已删除节点过滤关键字!!!\033[0m" - fi - setconfig exclude "'$exclude'" +# 排除节点正则 +gen_link_flt() { + comp_box "\033[33m当前过滤关键字:\033[47;30m$exclude\033[0m" \ + "" \ + "\033[33m匹配关键字的节点会在导入时被【屏蔽】!\033[0m" \ + "多个关键字可以用\033[30;47m | \033[0m号分隔" \ + "\033[32m支持正则表达式\033[0m,空格请使用\033[30;47m + \033[0m号替代" + btm_box "\033[36m请直接输入节点过滤关键字\033[0m" \ + "或输入 d \033[31m清空\033[0m节点过滤关键字" \ + "或输入 0 返回上级菜单" + read -r -p "请输入> " res + case "$res" in + 0) + return 0 + ;; + d) + exclude='' + ;; + *) + exclude="$res" + ;; + esac + + if setconfig exclude "'$exclude'"; then + common_success + else + common_failed + fi } -gen_link_ele() { # 包含节点正则 - [ -z "$include" ] && include="未设置" - separator_line "-" - content_line "\033[33m当前筛选关键字:\033[47;30m$include\033[0m" - separator_line "-" - content_line "\033[33m仅有匹配关键字的节点才会被【导入】!!!\033[0m" - content_line "多个关键字可以用\033[30;47m | \033[0m号分隔" - content_line "\033[32m支持正则表达式\033[0m,空格请使用\033[30;47m + \033[0m号替代" - separator_line "-" - content_line " 000 \033[31m删除\033[0m关键字" - content_line " 回车 取消输入并返回上级菜单" - separator_line "-" - read -r -p "请输入关键字 > " include - if [ "$include" = '000' ]; then - separator_line "-" - include='' - content_line "\033[31m 已删除节点匹配关键字!!!\033[0m" - fi - setconfig include "'$include'" +# 包含节点正则 +gen_link_ele() { + comp_box "\033[33m当前筛选关键字:\033[47;30m$include\033[0m" \ + "" \ + "\033[33m仅有匹配关键字的节点才会被【导入】!!!\033[0m" \ + "多个关键字可以用\033[30;47m | \033[0m号分隔" \ + "\033[32m支持正则表达式\033[0m,空格请使用\033[30;47m + \033[0m号替代" + btm_box "\033[36m请直接输入节点匹配关键字\033[0m" \ + "或输入 d \033[31m清空\033[0m节点匹配关键字" \ + "或输入 0 返回上级菜单" + read -r -p "请输入> " res + case "$res" in + 0) + return 0 + ;; + d) + include="" + ;; + *) + include="$res" + ;; + esac + + if setconfig exclude "'$include'"; then + common_success + else + common_failed + fi } -gen_link_config() { #选择在线规则模版 - 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}') - separator_line "-" - content_line "当前使用规则为:\033[33m$now\033[0m" - separator_line "-" - list_box "$list" - separator_line "-" - common_back - read -r -p "请输入对应数字 > " num - totalnum=$(grep -acE '^5' "$CRASHDIR"/configs/servers.list ) - if [ -z "$num" ] || [ "$num" -gt "$totalnum" ];then - errornum - elif [ "$num" = 0 ];then - echo - elif [ "$num" -le "$totalnum" ];then - #将对应标记值写入配置 - rule_link=$num - setconfig rule_link $rule_link - separator_line "-" - content_line "\033[32m设置成功!返回上级菜单\033[0m" - fi +# 选择在线规则模版 +gen_link_config() { + 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}') + comp_box "当前使用规则为:\033[33m$now\033[0m" + list_box "$list" + content_line "" + common_back + read -r -p "请输入对应数字> " num + totalnum=$(grep -acE '^5' "$CRASHDIR"/configs/servers.list) + if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then + errornum + elif [ "$num" = 0 ]; then + echo + elif [ "$num" -le "$totalnum" ]; then + # 将对应标记值写入配置 + rule_link=$num + if setconfig rule_link "$rule_link"; then + msg_alert "\033[32m设置成功!返回上级菜单\033[0m" + else + common_failed + fi + fi } -gen_link_server() { #选择Subconverter服务器 - 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}') - separator_line "-" - content_line "\033[36m以下为互联网采集的第三方服务器,具体安全性请自行斟酌!\033[0m" - content_line "\033[32m感谢以下作者的无私奉献!!!\033[0m" - content_line "当前使用后端为:\033[33m$now\033[0m" - separator_line "-" - list_box "$list" - common_back - read -r -p "请输入对应数字 > " num - totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list ) - if [ -z "$num" ] || [ "$num" -gt "$totalnum" ];then - errornum - elif [ "$num" = 0 ];then - echo - elif [ "$num" -le "$totalnum" ];then - #将对应标记值写入配置 - server_link=$num - setconfig server_link $server_link - separator_line "-" - content_line "\033[32m设置成功!返回上级菜单\033[0m" - fi +# 选择Subconverter服务器 +gen_link_server() { + 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}') + + comp_box "\033[36m以下为互联网采集的第三方服务器,具体安全性请自行斟酌!\033[0m" \ + "\033[32m感谢以下作者的无私奉献!!!\033[0m" \ + "" \ + "当前使用后端为:\033[33m$now\033[0m" + list_box "$list" + content_line "" + common_back + read -r -p "请输入对应数字> " num + totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list) + if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then + errornum + elif [ "$num" = 0 ]; then + echo + elif [ "$num" -le "$totalnum" ]; then + # 将对应标记值写入配置 + server_link=$num + if setconfig server_link "$server_link"; then + content_line "\033[32m设置成功!返回上级菜单\033[0m" + else + common_failed + fi + fi } set_sub_ua() { - separator_line "-" - content_line "\033[36m无法正确获取配置文件时可尝试使用\033[0m" - content_line " 1 使用自动UA(默认)" - content_line " 2 不使用UA" - content_line " 3 使用自定义UA:\033[32m$user_agent\033[0m" - separator_line "-" - read -r -p "请输入对应数字 > " num - case "$num" in - 0) - user_agent='' - ;; - 1) - user_agent='auto' - ;; - 2) - user_agent='none' - ;; - 3) - read -r -p "请输入自定义UA(不要包含空格和特殊符号!) > " text - [ -n "$text" ] && user_agent="$text" - ;; - *) - errornum - ;; - esac - [ "$num" -le 3 ] && setconfig user_agent "$user_agent" + while true; do + comp_box "\033[36m无法正确获取配置文件时可尝试使用\033[0m" \ + "" \ + "当前UA:$user_agent" + content_line "1) 使用自动UA(默认)" + content_line "2) 不使用UA" + content_line "3) 使用自定义UA" + content_line "4) 清空UA" + content_line "" + content_line "0) 返回上级菜单" + separator_line "=" + read -r -p "请输入对应数字> " num + case "$num" in + 0) + break + ;; + 1) + user_agent='auto' + ;; + 2) + user_agent='none' + ;; + 3) + comp_box "\033[33m注意:\n自定义UA不可包含空格或特殊符号!\033[0m" + btm_box "\033[36m请直接输入自定义UA\033[0m" \ + "或输入 0 返回上级菜单" + read -r -p "请输入> " text + if [ "$text" = 0 ]; then + continue + elif [ -n "$text" ]; then + user_agent="$text" + fi + ;; + 4) + user_agent='' + ;; + *) + errornum + continue + ;; + esac + + if [ "$num" -ge 1 ] && [ "$num" -le 4 ]; then + if setconfig user_agent "$user_agent"; then + common_success + else + common_failed + fi + fi + break + done }