#!/bin/sh # Copyright (C) Juewuy [ -n "$__IS_PROVIDERS_SINGBOX" ] && return __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 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 'route' "$TMPDIR"/provider_temp_file)" ] && { msg_alert "\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/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 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/outbounds_add.json }