From 73ce94532f2084168fc07a55b69808a7098957d0 Mon Sep 17 00:00:00 2001 From: juewuy Date: Fri, 9 Feb 2024 10:22:45 +0800 Subject: [PATCH] =?UTF-8?q?~=E5=A2=9E=E5=8A=A0=E4=B8=80=E9=94=AE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0providers=E5=8A=9F=E8=83=BD=20~=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=AE=A1=E7=90=86=E7=95=8C=E9=9D=A2=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/getdate.sh | 350 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 318 insertions(+), 32 deletions(-) diff --git a/scripts/getdate.sh b/scripts/getdate.sh index 62b4d8a..68f8bb5 100644 --- a/scripts/getdate.sh +++ b/scripts/getdate.sh @@ -334,6 +334,270 @@ setproxies(){ #自定义clash节点 ;; esac } +gen_clash_providers(){ #生成clash的providers配置文件 + gen_clash_providers_txt(){ + cat >> $TMPDIR/providers/providers.yaml < ${TMPDIR}/providers/providers.yaml + #切割模版文件 + sed -n '/^proxy-groups:/,/^[a-z]/ { /^rule/d; p; }' ${CRASHDIR}/providers/${provider_temp_file} > ${TMPDIR}/providers/proxy-groups.yaml + sed -n '/^rule/,$p' ${CRASHDIR}/providers/${provider_temp_file} > ${TMPDIR}/providers/rules.yaml + #生成providers模块 + if [ -n "$2" ];then + gen_clash_providers_txt $1 $2 + else + providers_tags='' + while read line;do + tag=$(echo $line | awk '{print $1}') + url=$(echo $line | awk '{print $2}') + providers_tags=$(echo "$providers_tags, $tag" | sed 's/^, //') + gen_clash_providers_txt $tag $url + echo ' - {name: '${tag}', type: url-test, tolerance: 100, lazy: true, use: ['${tag}']}' >> ${TMPDIR}/providers/proxy-groups.yaml + done < ${CRASHDIR}/configs/providers.cfg + 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 + #调用内核测试 + ${TMPDIR}/CrashCore -t -d ${BINDIR} -f ${TMPDIR}/config.yaml >/dev/null + if [ "$?" = 0 ];then + echo -e "\033[32m配置文件生成成功!\033[0m" + mv -f ${TMPDIR}/config.yaml ${CRASHDIR}/yamls/config.yaml + read -p "是否立即启动/重启服务?(1/0) > " res + [ "$res" = 1 ] && { + start_core + exit + } + else + echo -e "\033[31m生成配置文件出错,请仔细检查输入!\033[0m" + fi +} +gen_singbox_providers(){ #生成singbox的providers配置文件 + gen_singbox_providers_txt(){ + cat >> ${TMPDIR}/providers/providers.json < ${TMPDIR}/providers/providers.json < ${TMPDIR}/providers/outbounds_add.json <> ${TMPDIR}/providers/outbounds_add.json + done < ${CRASHDIR}/configs/providers.cfg + fi + sed -i '$s/},/}]}/' ${TMPDIR}/providers/providers.json #修复文件格式 + sed -i '$s/},/}]}/' ${TMPDIR}/providers/outbounds_add.json #修复文件格式 + #使用模版生成outbounds和rules模块 + cat ${CRASHDIR}/providers/${provider_temp_file} | sed "s/{providers_tags}/$providers_tags/g" >> ${TMPDIR}/providers/outbounds.json + #调用内核测试 + ${TMPDIR}/CrashCore merge ${TMPDIR}/config.json -C ${TMPDIR}/providers + if [ "$?" = 0 ];then + echo -e "\033[32m配置文件生成成功!\033[0m" + mv -f ${TMPDIR}/config.json ${CRASHDIR}/jsons/config.json + rm -rf ${TMPDIR}/providers + read -p "是否立即启动/重启服务?(1/0) > " res + [ "$res" = 1 ] && { + start_core + exit + } + else + echo -e "\033[31m生成配置文件出错,请仔细检查输入!\033[0m" + rm -rf ${TMPDIR}/providers + fi +} +setproviders(){ #自定义providers + echo ----------------------------------------------- + echo -e "\033[33m你可以在这里快捷管理与生成自定义的providers提供者\033[0m" + [ -s $CRASHDIR/configs/providers.cfg ] && { + echo ----------------------------------------------- + echo -e "\033[36m输入对应数字可管理providers提供者\033[0m" + cat $CRASHDIR/configs/providers.cfg | awk -F "#" '{print " "NR" "$1" "$2}' + } + echo ----------------------------------------------- + echo -e " a \033[36m添加\033[0mproviders提供者" + echo -e " b \033[32m生成\033[0m基于providers的配置文件" + echo -e " c 选择\033[33m规则模版\033[0m" + echo -e " d \033[31m清空\033[0mproviders列表" + echo -e " 0 返回上级菜单" + read -p "请输入对应数字 > " num + case $num in + 0) + ;; + [1-9]|[1-9][0-9]) + provider_name=$(sed -n "$num p" $CRASHDIR/configs/providers.cfg | awk '{print $1}') + provider_url=$(sed -n "$num p" $CRASHDIR/configs/providers.cfg | awk '{print $2}') + if [ -z "$provider_name" ];then + errornum + else + echo ----------------------------------------------- + echo -e " 1 修改代理提供者:\033[36m$provider_name\033[0m" + echo -e " 2 修改链接地址:\033[32m$provider_url\033[0m" + echo -e " 3 生成\033[33m仅包含此提供者\033[0m的配置文件" + echo -e " 4 \033[31m移除此提供者\033[0m" + echo ----------------------------------------------- + echo -e " 0 返回上级菜单" + read -p "请选择需要执行的操作 > " num + case "$num" in + 0) + ;; + 1) + read -p "请输入代理提供者的名称或者代称(如有多个提供者不可重复) > " name + if [ -n "$name" ] && [ -z "$(grep "$name" $CRASHDIR/configs/providers.cfg)" ];then + sed -i "s|$provider_name $provider_url|$name $provider_url|" $CRASHDIR/configs/providers.cfg + else + echo -e "\033[31m输入错误,请重新输入!\033[0m" + fi + ;; + 2) + read -p "请输入http(s)格式的providers链接地址 > " link + if [ -n "$(echo $link | grep -E '.*\..*')" ] && [ -z "$(grep "$link" $CRASHDIR/configs/providers.cfg)" ];then + sed -i "s|$provider_name $provider_url|$provider_name $link|" $CRASHDIR/configs/providers.cfg + else + echo -e "\033[31m输入错误,请重新输入!\033[0m" + fi + ;; + 3) + gen_outbound_providers $provider_name $provider_url + ;; + 4) + sed -i "/$provider_name/d" $CRASHDIR/configs/providers.cfg + ;; + *) + errornum + ;; + esac + sleep 1 + fi + setproviders + ;; + a) + echo ----------------------------------------------- + read -p "请输入http(s)格式的providers链接地址 > " link + [ -n "$(echo $link | grep -E '.*\..*')" ] && { + read -p "请输入代理提供者的名称或者代号(不可重复) > " name + [ -n "$name" ] && [ -z "$(grep "name" $CRASHDIR/configs/providers.cfg)" ] && { + echo ----------------------------------------------- + echo -e "代理提供者:\033[36m$name\033[0m" + echo -e "链接地址:\033[32m$link\033[0m" + read -p "确认添加?(1/0) > " res + [ "$res" = 1 ] && { + echo "$name $link" >> $CRASHDIR/configs/providers.cfg + echo -e "\033[32mproviders已添加!\033[0m" + } + } + } + [ "$?" != 0 ] && echo -e "\033[31m操作已取消!\033[0m" + sleep 1 + setproviders + ;; + b) + echo ----------------------------------------------- + echo -e "\033[33msingboxp与mihomo内核的providers配置文件不互通!\033[0m" + echo ----------------------------------------------- + read -p "确认生成${coretype}配置文件?(1/0) > " res + [ "$res" = "1" ] && { + gen_${coretype}_providers + } + setproviders + ;; + c) + if [ -z "$(grep "provider_temp_${coretype}" ${CRASHDIR}/configs/ShellCrash.cfg)" ];then + provider_temp_des=$(sed -n "1 p" ${CRASHDIR}/configs/${coretype}_providers.list | awk '{print $1}') + else + provider_temp_file=$(grep "provider_temp_${coretype}" ${CRASHDIR}/configs/ShellCrash.cfg | awk -F '=' '{print $2}') + provider_temp_des=$(grep "$provider_temp_file" ${CRASHDIR}/configs/${coretype}_providers.list | awk '{print $1}') + fi + echo ----------------------------------------------- + echo -e "当前规则模版为:\033[32m$provider_temp_des\033[0m" + echo -e "\033[33m请选择在线模版:\033[0m" + echo ----------------------------------------------- + cat ${CRASHDIR}/configs/${coretype}_providers.list | awk '{print " "NR" "$1}' + echo ----------------------------------------------- + read -p "请输入对应数字 > " num + provider_temp_file=$(sed -n "$num p" ${CRASHDIR}/configs/${coretype}_providers.list | awk '{print $2}') + if [ -z "$provider_temp_file" ];then + errornum + else + setconfig provider_temp_${coretype} $provider_temp_file + fi + setproviders + ;; + d) + read -p "确认清空全部providers提供者?(1/0) > " res + [ "$res" = "1" ] && rm -rf $CRASHDIR/configs/providers.cfg + setproviders + ;; + *) + errornum + ;; + esac +} + set_clash_adv(){ #自定义clash高级规则 [ ! -f $YAMLSDIR/user.yaml ] && cat > $YAMLSDIR/user.yaml < " num @@ -684,7 +950,7 @@ set_core_config(){ #配置文件功能 ;; 2) echo ----------------------------------------------- - echo -e "\033[33m此功能可能会导致严重bug!!!\033[0m" + echo -e "\033[33m此功能可能会导致一些bug!!!\033[0m" echo -e "强烈建议你使用\033[32m在线生成配置文件功能!\033[0m" echo -e "\033[33m继续后如出现任何问题,请务必自行解决,一切提问恕不受理!\033[0m" echo ----------------------------------------------- @@ -700,27 +966,38 @@ set_core_config(){ #配置文件功能 fi ;; 3) - if [ ! -f ${config_path}.bak ];then - echo ----------------------------------------------- - echo -e "\033[31m没有找到配置文件的备份!\033[0m" - set_core_config + if [ "$crashcore" = meta -o "$crashcore" = clashpre ];then + coretype=clash + setproviders + elif [ "$crashcore" = singboxp ];then + coretype=singbox + setproviders else - echo ----------------------------------------------- - echo -e 备份文件共有"\033[32m`wc -l < ${config_path}.bak`\033[0m"行内容,当前文件共有"\033[32m`wc -l < ${config_path}`\033[0m"行内容 - read -p "确认还原配置文件?此操作不可逆![1/0] > " res - if [ "$res" = '1' ]; then - mv ${config_path}.bak ${config_path} - echo ----------------------------------------------- - echo -e "\033[32m配置文件已还原!请手动重启服务!\033[0m" - sleep 1 - else - echo ----------------------------------------------- - echo -e "\033[31m操作已取消!返回上级菜单!\033[0m" - set_core_config - fi + echo -e "\033[33msingbox官方内核及Clash基础内核不支持此功能,请先更换内核!\033[0m" + sleep 1 + checkupdate && setcore fi + set_core_config ;; 4) + echo ----------------------------------------------- + echo -e "\033[33m请将本地配置文件上传到/tmp目录并重命名为config.yaml或者config.json\033[0m" + echo -e "\033[32m之后重新运行本脚本即可自动弹出导入提示!\033[0m" + exit + ;; + 5) + source ${CRASHDIR}/task/task.sh && task_add + set_core_config + ;; + 6) + checkcfg=$(cat $CFG_PATH) + override + if [ -n "$PID" ];then + checkcfg_new=$(cat $CFG_PATH) + [ "$checkcfg" != "$checkcfg_new" ] && checkrestart + fi + ;; + 7) if [ -z "$Url" -a -z "$Https" ];then echo ----------------------------------------------- echo -e "\033[31m没有找到你的配置文件/订阅链接!请先输入链接!\033[0m" @@ -739,16 +1016,25 @@ set_core_config(){ #配置文件功能 fi fi ;; - 5) - source ${CRASHDIR}/task/task.sh && task_add - set_core_config - ;; - 6) - checkcfg=$(cat $CFG_PATH) - override - if [ -n "$PID" ];then - checkcfg_new=$(cat $CFG_PATH) - [ "$checkcfg" != "$checkcfg_new" ] && checkrestart + 8) + if [ ! -f ${config_path}.bak ];then + echo ----------------------------------------------- + echo -e "\033[31m没有找到配置文件的备份!\033[0m" + set_core_config + else + echo ----------------------------------------------- + echo -e 备份文件共有"\033[32m`wc -l < ${config_path}.bak`\033[0m"行内容,当前文件共有"\033[32m`wc -l < ${config_path}`\033[0m"行内容 + read -p "确认还原配置文件?此操作不可逆![1/0] > " res + if [ "$res" = '1' ]; then + mv ${config_path}.bak ${config_path} + echo ----------------------------------------------- + echo -e "\033[32m配置文件已还原!请手动重启服务!\033[0m" + sleep 1 + else + echo ----------------------------------------------- + echo -e "\033[31m操作已取消!返回上级菜单!\033[0m" + set_core_config + fi fi ;; *) @@ -1981,7 +2267,7 @@ debug(){ { sleep 4 ; kill $! >/dev/null 2>&1 & } wait else - $TMPDIR/CrashCore -t -d $BINDIR -f $TMPDIR/config.yaml + ${TMPDIR}/CrashCore -t -d ${BINDIR} -f ${TMPDIR}/config.yaml fi echo ----------------------------------------------- exit