Guest User

Untitled

a guest
Dec 7th, 2025
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.90 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # ==========================================
  4. # AIStudioBuildProxy 一键管理脚本
  5. # ==========================================
  6.  
  7. # 定义颜色
  8. RED='\033[0;31m'
  9. GREEN='\033[0;32m'
  10. YELLOW='\033[1;33m'
  11. CYAN='\033[0;36m'
  12. NC='\033[0m' # No Color
  13.  
  14. # 定义仓库地址
  15. REPO_URL="https://github.com/starowo/AIStudioBuildProxy.git"
  16. SERVER_BRANCH="server"
  17. CLIENT_BRANCH="client"
  18.  
  19. # 定义插件路径
  20. PLUGIN_DIR_NAME="AIStudioBuildProxy"
  21. SERVER_PATH="plugins/$PLUGIN_DIR_NAME"
  22. CLIENT_BASE="public/scripts/extensions/third-party"
  23. CLIENT_PATH="$CLIENT_BASE/$PLUGIN_DIR_NAME"
  24.  
  25. # ------------------------------------------
  26. # 工具函数
  27. # ------------------------------------------
  28.  
  29. log_info() {
  30. echo -e "${CYAN}[INFO]${NC} $1"
  31. }
  32.  
  33. log_success() {
  34. echo -e "${GREEN}[SUCCESS]${NC} $1"
  35. }
  36.  
  37. log_warn() {
  38. echo -e "${YELLOW}[WARN]${NC} $1"
  39. }
  40.  
  41. log_error() {
  42. echo -e "${RED}[ERROR]${NC} $1"
  43. }
  44.  
  45. # 检查 Git 是否安装
  46. check_git() {
  47. if ! command -v git &> /dev/null; then
  48. log_error "未检测到 Git!请先安装 Git 后再运行此脚本。"
  49. echo "Windows用户请下载: https://git-scm.com/download/win"
  50. exit 1
  51. fi
  52. }
  53.  
  54. # ------------------------------------------
  55. # 目录定位逻辑
  56. # ------------------------------------------
  57.  
  58. find_root_dir() {
  59. log_info "正在检测酒馆根目录..."
  60.  
  61. if [[ -f "config.yaml" && -d "plugins" ]]; then
  62. log_success "当前即为酒馆根目录。"
  63. return 0
  64. fi
  65.  
  66. if [[ -f "../config.yaml" && -d "../plugins" ]]; then
  67. cd ..
  68. log_success "在上一级找到酒馆根目录,已切换。"
  69. return 0
  70. fi
  71.  
  72. log_info "当前目录未找到,正在扫描子目录..."
  73. TARGET_ROOT=$(find . -maxdepth 2 -name "config.yaml" -type f -print -quit | xargs dirname 2>/dev/null)
  74.  
  75. if [[ -n "$TARGET_ROOT" && -d "$TARGET_ROOT/plugins" ]]; then
  76. cd "$TARGET_ROOT"
  77. log_success "在子目录 [$(pwd)] 找到酒馆根目录,已切换。"
  78. return 0
  79. fi
  80.  
  81. log_error "未找到酒馆根目录(必须包含 config.yaml 和 plugins 文件夹)。"
  82. log_error "请将此脚本放在 SillyTavern 的根目录或其子文件夹内运行。"
  83. return 1
  84. }
  85.  
  86. # ------------------------------------------
  87. # 核心功能
  88. # ------------------------------------------
  89.  
  90. enable_server_plugins() {
  91. if [ ! -f "config.yaml" ]; then
  92. log_error "config.yaml 文件不存在!"
  93. return
  94. fi
  95.  
  96. log_info "正在检查 config.yaml 设置..."
  97.  
  98. if grep -q "enableServerPlugins: true" config.yaml; then
  99. log_success "Server Plugins 已经开启,跳过修改。"
  100. else
  101. if [[ "$OSTYPE" == "darwin"* ]]; then
  102. sed -i '' 's/enableServerPlugins: false/enableServerPlugins: true/g' config.yaml
  103. else
  104. sed -i 's/enableServerPlugins: false/enableServerPlugins: true/g' config.yaml
  105. fi
  106.  
  107. if grep -q "enableServerPlugins: true" config.yaml; then
  108. log_success "config.yaml 修改成功:已开启 Server Plugins。"
  109. else
  110. log_warn "config.yaml 修改失败,请手动检查。"
  111. fi
  112. fi
  113. }
  114.  
  115. install_plugins() {
  116. echo -e "\n------------------------------------------"
  117. log_info "开始安装流程..."
  118.  
  119. enable_server_plugins
  120.  
  121. echo -e "\n>>> 处理服务端插件 (Server Side)..."
  122. if [ -d "$SERVER_PATH" ]; then
  123. log_warn "发现旧的服务端插件,正在删除..."
  124. rm -rf "$SERVER_PATH"
  125. fi
  126.  
  127. if [ -d "plugins" ]; then
  128. cd plugins
  129. log_info "正在克隆服务端仓库..."
  130. if git clone -b "$SERVER_BRANCH" "$REPO_URL"; then
  131. log_success "服务端插件安装成功。"
  132. else
  133. log_error "服务端插件下载失败,请检查网络或代理设置。"
  134. cd ..
  135. return 1
  136. fi
  137. cd ..
  138. else
  139. log_error "plugins 目录不存在,这是个正常的酒馆目录吗?"
  140. return 1
  141. fi
  142.  
  143. echo -e "\n>>> 处理客户端扩展 (Client Side)..."
  144.  
  145. if [ ! -d "$CLIENT_BASE" ]; then
  146. log_warn "未找到第三方扩展目录 ($CLIENT_BASE)。"
  147. log_info "尝试创建目录..."
  148. mkdir -p "$CLIENT_BASE"
  149. fi
  150.  
  151. if [ -d "$CLIENT_PATH" ]; then
  152. log_warn "发现旧的客户端扩展,正在删除..."
  153. rm -rf "$CLIENT_PATH"
  154. fi
  155.  
  156. cd "$CLIENT_BASE"
  157. log_info "正在克隆客户端仓库..."
  158. if git clone -b "$CLIENT_BRANCH" "$REPO_URL"; then
  159. log_success "客户端扩展安装成功。"
  160. else
  161. log_error "客户端扩展下载失败,请检查网络或代理设置。"
  162. cd - > /dev/null
  163. return 1
  164. fi
  165.  
  166. cd - > /dev/null 2>&1
  167.  
  168. echo -e "\n------------------------------------------"
  169. echo -e "${GREEN}✅ 所有操作已完成!请重启酒馆 (SillyTavern) 以生效。${NC}"
  170. echo -e "------------------------------------------"
  171. }
  172.  
  173. uninstall_plugins() {
  174. echo -e "\n------------------------------------------"
  175. log_info "开始卸载流程..."
  176.  
  177. if [ -d "$SERVER_PATH" ]; then
  178. rm -rf "$SERVER_PATH"
  179. log_success "服务端插件已删除。"
  180. else
  181. log_warn "未找到服务端插件,跳过。"
  182. fi
  183.  
  184. if [ -d "$CLIENT_PATH" ]; then
  185. rm -rf "$CLIENT_PATH"
  186. log_success "客户端扩展已删除。"
  187. else
  188. log_warn "未找到客户端扩展,跳过。"
  189. fi
  190.  
  191. echo -e "\n${GREEN}✅ 卸载完成。${NC}"
  192. }
  193.  
  194. # ------------------------------------------
  195. # 主程序
  196. # ------------------------------------------
  197.  
  198. clear
  199.  
  200. echo -e "${CYAN}"
  201. echo "#############################################"
  202. echo "# AIStudioBuildProxy 自动安装脚本 #"
  203. echo "# 专治各种不会用,一键搞定 #"
  204. echo "#############################################"
  205. echo -e "${NC}"
  206.  
  207. check_git
  208.  
  209. if ! find_root_dir; then
  210. # 兼容管道模式的暂停
  211. read -n 1 -s -r -p "按任意键退出..." < /dev/tty
  212. exit 1
  213. fi
  214.  
  215. while true; do
  216. echo -e "\n当前工作目录: $(pwd)"
  217. echo -e "${YELLOW}请选择操作:${NC}"
  218. echo "1) 安装 / 重新安装 (推荐)"
  219. echo "2) 卸载插件"
  220. echo "0) 退出"
  221.  
  222. # 修复:显式从 /dev/tty 读取输入,解决管道模式下的死循环
  223. read -p "请输入数字 [1/2/0]: " choice < /dev/tty
  224.  
  225. case $choice in
  226. 1)
  227. install_plugins
  228. break
  229. ;;
  230. 2)
  231. uninstall_plugins
  232. break
  233. ;;
  234. 0)
  235. echo "再见!"
  236. exit 0
  237. ;;
  238. *)
  239. log_error "输入错误,请输入 1, 2 或 0"
  240. ;;
  241. esac
  242. done
  243.  
  244. # 兼容管道模式的暂停
  245. echo ""
  246. read -n 1 -s -r -p "按任意键退出脚本..." < /dev/tty
  247. echo ""
  248.  
Advertisement
Add Comment
Please, Sign In to add comment