×

个人微信一键接入 LangBot ,langbot-wechat.sh

XiaoMi XiaoMi 发表于2025-04-13 23:52:09 浏览8 评论0

抢沙发发表评论



#!/bin/bash

# 定义颜色
RED='\033[1;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 无颜色
CYAN='\033[0;36m'

# 显示脚本来源
echo -e "${CYAN}===== LangBot接入微信一键部署工具 =====${NC}"
echo -e "${GREEN}>> LangBot项目地址:https://github.com/RockChinQ/LangBot\n${NC}"
echo -e "${YELLOW}>> 本脚本将引导您完成所有必要的配置步骤${NC}"
echo -e "${YELLOW}>> 此脚本由 B站UP主 -Lazy懒人- 制作,时间:2025.02.06${NC}"
echo -e "${YELLOW}>> 文字版教程:\n${NC}"
echo -e "${GREEN}>> 如有任何问题:请加 LangBot 社区交流群${NC}"
echo -e "${GREEN}>> 群号地址:https://docs.langbot.app/insight/community.html\n${NC}"

# 提示用户是否继续
while true; do
   echo -e "${YELLOW}此脚本适用于在 Linux 系统上接入微信到 LangBot,是否继续?${NC}"
   echo -e "${YELLOW}输入 y 继续,输入 n 取消${NC}"
   echo -n ">>> "
   read input
   case $input in
   [yY])
       echo -e "${GREEN}开始执行部署脚本...${NC}"
       break
       ;;
   [nN])
       echo -e "${RED}已取消${NC}"
       exit 0
       ;;
   *)
       echo -e "${RED}无效输入,请输入 y 或 n。${NC}"
       ;;
   esac
done

# 定义步骤函数
update_grub() {
   echo -e "${CYAN}=== 步骤 1: 更新GRUB和系统时区配置 ===${NC}"
   # 操作警告,可能会导致系统出现问题,请谨慎操作
   echo -e "${RED}警告:此操作可能会导致系统出现问题,请谨慎操作${NC}"
   echo -e "${RED}请确保您已备份重要数据,继续操作前请再次确认${NC}"
   while true; do
       read -p "是否继续?(Y/n) " response
       response=${response:-"y"} # 默认值为 "y"
       case $response in
           [Yy]*)
               echo -e "${YELLOW}正在备份和修改GRUB配置...${NC}"
               break
               ;;
           [Nn]*)
               echo -e "${RED}已取消${NC}"
               exit 0
               ;;
           *)
               echo -e "${RED}请输入 y 或 n${NC}"
               ;;
       esac
   done

   echo -e "${YELLOW}正在备份和修改GRUB配置...${NC}"

   if [ -f "/etc/default/grub" ]; then
       sudo cp /etc/default/grub /etc/default/grub.bak
       sudo sed -i '/^GRUB_CMDLINE_LINUX=/ s/"$/ systemd.unified_cgroup_hierarchy=0"/' /etc/default/grub
       sudo grub-mkconfig -o /boot/grub/grub.cfg

       echo -e "${GREEN}GRUB 配置已更新${NC}"
       echo -e "${YELLOW}重要提示:您需要重启系统才能使GRUB配置生效${NC}"
       echo -e "${YELLOW}请重启后再执行后续步骤${NC}"
   else
       echo -e "${RED}未找到GRUB配置文件,请确认系统使用GRUB引导${NC}"
   fi

   echo -e "${YELLOW}正在更新系统时区配置...${NC}"
   # 设置当前系统时间,默认为中国北京时间
   echo -e "${YELLOW}正在设置系统时间为北京时间...${NC}"
   sudo timedatectl set-timezone Asia/Shanghai
   echo -e "${GREEN}系统时间设置成功${NC}"
}

setup_docker() {
   echo -e "${CYAN}=== 步骤 2: 安装必要组件和配置Docker环境 ===${NC}"

   # 检查并安装 jq
   if ! command -v jq &>/dev/null; then
       echo -e "${YELLOW}检测到 jq 未安装,正在安装...${NC}"
       if [ -x "$(command -v apt-get)" ]; then
           sudo apt-get update >/dev/null 2>&1
           sudo apt-get install -y jq >/dev/null 2>&1
       elif [ -x "$(command -v yum)" ]; then
           sudo yum install -y epel-release >/dev/null 2>&1
           sudo yum install -y jq >/dev/null 2>&1
       elif [ -x "$(command -v dnf)" ]; then
           sudo dnf install -y jq >/dev/null 2>&1
       else
           echo -e "${RED}无法检测到支持的包管理器,请手动安装 jq${NC}"
           exit 1
       fi
       echo -e "${GREEN}jq 安装完成${NC}"
   else
       echo -e "${GREEN}jq 已安装${NC}"
   fi

   # 检查并安装 Docker
   if ! command -v docker &>/dev/null; then
       echo -e "${YELLOW}检测到 Docker 未安装,即将安装 Docker...${NC}"
       if curl -s https://ipinfo.io/country | grep -q "CN"; then
           echo -e "${YELLOW}当前环境:中国大陆,正在安装 Docker,请稍等...${NC}"
           echo -e "${YELLOW}安装时间可能较长,请耐心等待...${NC}"
           if ! sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh | bash -s docker --mirror Aliyun >/dev/null 2>&1; then
               echo -e "${RED}Docker 安装失败${NC}"
               exit 1
           fi
       else
           echo -e "${YELLOW}当前环境:中国大陆以外地区,正在安装 Docker,请稍等...${NC}"
           echo -e "${YELLOW}安装时间可能较长,请耐心等待...${NC}"
           if ! curl -fsSL https://get.docker.com -o get-docker.sh >/dev/null 2>&1; then
               echo -e "${RED}Docker 安装脚本下载失败${NC}"
               exit 1
           fi
           if ! sh get-docker.sh >/dev/null 2>&1; then
               echo -e "${RED}Docker 安装失败${NC}"
               exit 1
           fi
           rm get-docker.sh >/dev/null 2>&1
       fi
       sudo systemctl start docker >/dev/null 2>&1
       sudo systemctl enable docker >/dev/null 2>&1
       echo -e "${GREEN}Docker 安装完成${NC}"
   else
       echo -e "${GREEN}Docker 已安装${NC}"
   fi

   # 检查并安装 Docker Compose
   if ! docker compose version &>/dev/null; then
       echo -e "${YELLOW}检测到 Docker Compose 未安装,即将安装Docker Compose...${NC}"
       DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
       mkdir -p $DOCKER_CONFIG/cli-plugins
       if curl -s https://ipinfo.io/country | grep -q "CN"; then
           echo -e "${YELLOW}当前环境:中国大陆,正在安装 Docker Compose,请稍等...${NC}"
           echo -e "${YELLOW}安装时间可能较长,请耐心等待...${NC}"
           if ! curl -L "https://get.daocloud.io/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o $DOCKER_CONFIG/cli-plugins/docker-compose >/dev/null 2>&1; then
               echo -e "${RED}Docker Compose 安装失败${NC}"
               exit 1
           fi
       else
           echo -e "${YELLOW}当前环境:中国大陆以外地区,正在安装 Docker Compose,请稍等...${NC}"
           echo -e "${YELLOW}安装时间可能较长,请耐心等待...${NC}"
           if ! curl -SL https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose >/dev/null 2>&1; then
               echo -e "${RED}Docker Compose 安装失败${NC}"
               exit 1
           fi
       fi
       chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
       echo -e "${GREEN}Docker Compose 安装完成${NC}"
   else
       echo -e "${GREEN}Docker Compose 已安装${NC}"
   fi

   # 检测是否在中国大陆,并配置 Docker 镜像源
   if curl -s https://ipinfo.io/country | grep -q "CN"; then
       echo -e "${YELLOW}检测到当前环境位于中国大陆地区,正在配置 Docker 镜像源...${NC}"
       sudo mkdir -p /etc/docker
       sudo rm -f /etc/docker/daemon.json
       sudo tee /etc/docker/daemon.json >/dev/null <<EOF
{
   "registry-mirrors": [
       "https://docker.m.daocloud.io",
       "https://docker.1panel.live",
       "https://hub.rat.dev"
   ]
}
EOF
       sudo systemctl daemon-reload
       sudo systemctl restart docker
       echo -e "${GREEN}Docker 镜像源配置完成${NC}"
   fi
}

setup_containers() {
   echo -e "${CYAN}=== 步骤 3: 配置容器环境 ===${NC}"

   # 检查并清理已存在的资源
   check_and_clean_resources() {
       local resource_type=$1
       local resource_name=$2
       local found=false

       case $resource_type in
       "network")
           if docker network ls | grep -q "$resource_name"; then
               found=true
               echo -e "${YELLOW}发现已存在的Docker网络: $resource_name${NC}"
           fi
           ;;
       "container")
           if docker ps -a | grep -q "$resource_name"; then
               found=true
               echo -e "${YELLOW}发现已存在的Docker容器: $resource_name${NC}"
           fi
           ;;
       "directory")
           if [ -d "$resource_name" ]; then
               found=true
               echo -e "${YELLOW}发现已存在的目录: $resource_name${NC}"
           fi
           ;;
       esac

       if [ "$found" = true ]; then
           while true; do
               echo -e "${YELLOW}是否删除已存在的$resource_type [$resource_name]? (Y/n)${NC}"
               read -r response
               response=${response:-"y"} # 默认值为 "y"
               case $response in
               [Yy]*)
                   echo -e "${YELLOW}正在删除 $resource_type: $resource_name${NC}"
                   case $resource_type in
                   "network")
                       docker network rm "$resource_name" >/dev/null 2>&1
                       ;;
                   "container")
                       docker rm -f "$resource_name" >/dev/null 2>&1
                       ;;
                   "directory")
                       rm -rf "$resource_name"
                       ;;
                   esac
                   echo -e "${GREEN}删除完成${NC}"
                   break
                   ;;
               [Nn]*)
                   echo -e "${RED}操作已取消,保留现有$resource_type${NC}"
                   if [ "$resource_type" = "container" ] || [ "$resource_type" = "network" ]; then
                       echo -e "${RED}警告:保留现有资源可能会导致部署失败${NC}"
                       exit 1
                   fi
                   break
                   ;;
               *)
                   echo -e "${RED}请输入 y 或 n${NC}"
                   ;;
               esac
           done
       fi
   }

   # 检查并清理已存在的资源
   check_and_clean_resources "network" "langbot-network"
   check_and_clean_resources "container" "gewe"
   check_and_clean_resources "container" "langbot"
   check_and_clean_resources "directory" "gewechat/data"
   check_and_clean_resources "directory" "/user/LangBot/data"
   check_and_clean_resources "directory" "/user/LangBot/plugins"

   # 创建Docker网络
   if ! docker network ls | grep -q "langbot-network"; then
       echo -e "${YELLOW}创建Docker网络 langbot-network...${NC}"
       docker network create langbot-network
   fi

   # 拉取微信消息平台镜像
   echo -e "${YELLOW}正在拉取微信消息平台镜像...${NC}"
   docker pull registry.cn-chengdu.aliyuncs.com/tu1h/wechotd:alpine
   docker tag registry.cn-chengdu.aliyuncs.com/tu1h/wechotd:alpine gewe

   # 创建数据目录并启动微信服务
   mkdir -p gewechat/data
   docker run -itd --network langbot-network -v ./gewechat/data:/root/temp -p 2531:2531 -p 2532:2532 --restart=always --name=gewe gewe

   # 创建LangBot数据目录
   mkdir -p /user/LangBot/data
   mkdir -p /user/LangBot/plugins

   # 创建docker-compose.yml文件
   cat >docker-compose.yml <<EOF
version: "3"

services:
 langbot:
   image: rockchin/langbot:latest
   container_name: langbot
   volumes:
     - /user/LangBot/data:/app/data
     - /user/LangBot/plugins:/app/plugins
   restart: on-failure
   ports:
     - 5300:5300
     - 2280-2290:2280-2290
   networks:
     - langbot-network
   environment:
     -.UTF-8
     - LC_ALL=C.UTF-8

networks:
 langbot-network:
   external: true
EOF

   echo -e "${YELLOW}正在启动LangBot...${NC}"
   docker compose up -d

   echo -e "${YELLOW}等待配置文件生成...${NC}"
   sleep 15
}

configure_langbot() {
   echo -e "${CYAN}=== 步骤 4: 配置LangBot ===${NC}"

   echo -e "${YELLOW}正在配置微信接入...${NC}"
   if [ -f "/user/LangBot/data/config/platform.json" ]; then
       jq '
         .["platform-adapters"][1]["enable"] = false |
         .["platform-adapters"][7] = {
           "adapter": "gewechat",
           "enable": true,
           "gewechat_url": "http://gewe:2531",
           "port": 2286,
           "callback_url": "http://langbot:2286/gewechat/callback",
           "app_id": "",
           "token": ""
         }
       ' /user/LangBot/data/config/platform.json >/user/LangBot/data/config/platform.json.tmp

       mv /user/LangBot/data/config/platform.json.tmp /user/LangBot/data/config/platform.json
   fi

   echo -e "${CYAN}=== 配置API密钥 ===${NC}"
   echo -e "${YELLOW}获取链接:https://api.qhaigc.net/token${NC}"
   echo -e "${GREEN}>>> 请输入你获取到的令牌:${NC}"
   echo -e "${YELLOW}Tips:如需自定义base_url或模型,请使用@符号,如:[email protected]@example_model${NC}"

   while true; do
       echo -n ">>> "
       read api_input
       if [ -n "$api_input" ]; then
           # Split the input by '@'
           IFS='@' read -r api_key base_url model <<<"$api_input"

           # Set default values if not provided
           base_url=${base_url:-"https://api.qhaigc.net/v1"}
           model=${model:-"gpt-4o"}

           # 去除model的OneAPI前缀
           model=$(echo "$model" | sed 's/OneAPI\///')

           echo -e "${YELLOW}正在验证令牌...使用模型:$model${NC}"
           response=$(curl -s --location -g --request POST "$base_url/chat/completions" \
               --header "Authorization: Bearer $api_key" \
               --header 'Content-Type: application/json' \
               --data-raw "{
               \"model\": \"$model\",
               \"messages\": [{\"role\": \"user\", \"content\": \"Hi!\"}]
           }")

           if echo "$response" | jq -e '.choices' >/dev/null 2>&1; then
               echo -e "${GREEN}令牌验证成功${NC}"
               break
           else
               echo -e "${RED}令牌无效或网络异常,请重新输入${NC}"
               echo -e "${RED}错误信息: $(echo "$response" | jq -r '.error.message // "未知错误"')${NC}"
           fi
       else
           echo -e "${RED}令牌不能为空,请重新输入${NC}"
       fi
   done

   # 设置Langbot/data/config/provider.json
   if [ -f "/user/LangBot/data/config/provider.json" ]; then
       jq --arg key "$api_key" --arg url "$base_url" --arg model "OneAPI/deepseek-reasoner" \
           '.["keys"]["openai"][0] = $key | .["requester"]["openai-chat-completions"]["base-url"] = $url | .["model"] = $model' \
           /user/LangBot/data/config/provider.json >/user/LangBot/data/config/provider.json.tmp
       mv /user/LangBot/data/config/provider.json.tmp /user/LangBot/data/config/provider.json
   fi

   # 设置Langbot/data/metadata/llm-models.json,从https://pan.thelazy.top/f/EGTp/llm-models.json下载
   if curl -fsSL -o "/user/LangBot/data/metadata/llm-models.json" "https://pan.thelazy.top/f/EGTp/llm-models.json"; then
       echo -e "${GREEN}llm-models.json 设置成功${NC}"
   else
       echo -e "${RED}llm-models.json 设置失败${NC}"
   fi

   echo -e "${YELLOW}正在重启LangBot以应用新配置...${NC}"
   docker restart langbot

   echo -e "${YELLOW}等待LangBot重启完成...${NC}"
   sleep 10
}

login_wechat() {
   echo -e "${CYAN}=== 步骤 5: 登录微信 ===${NC}"

   echo -e "${YELLOW}正在获取登录二维码...${NC}"
   docker restart langbot

   # 如果出现"已在线,无需登录",则直接跳过
   if docker logs langbot --tail 35 2>&1 | grep -q "已在线,无需登录"; then
       echo -e "${GREEN}已在线,无需登录${NC}"
       echo -e "${GREEN}请直接使用微信向机器人发送消息即可${NC}"
       return
   fi

   # 通过监测"请扫描下方二维码登录"来判断是否出现二维码
   while ! docker logs langbot --tail 35 2>&1 | grep -q "请扫描下方二维码登录"; do
       echo -ne "\r${YELLOW}正在等待二维码生成...${NC}"
       sleep 1
   done
   echo -e "\n"

   # 显示二维码
   docker logs langbot --tail 35
   echo -e "${YELLOW}请使用微信扫描上方二维码登录${NC}"

   # 获取最后一个有效链接
   last_url=$(docker logs langbot --tail 35 2>&1 | grep -o 'https://[^ ]*' | grep -v 'https://github.com/RockChinQ/LangBot' | grep -v 'https://docs.langbot.app' | tail -n 1)

   # 如果链接不为空,则显示提示信息
   if [ -n "$last_url" ]; then
       echo -e "${YELLOW}也可以访问下方链接获取二维码:${NC}"
       echo -e "${YELLOW}${last_url}${NC}"
   fi

   # 监测二维码是否过期和登录状态
   dots=""
   qr_expired_shown=false
   help_shown=false
   while true; do
       # 检查二维码是否过期
       if docker logs langbot --tail 35 2>&1 | grep -q "二维码已过期"; then
           if ! $qr_expired_shown; then
               echo -e "\n${RED}二维码已过期,正在重新获取...${NC}"
               echo -e "${YELLOW}如遇问题:${NC}"
               echo -e "1. ${YELLOW}按 Ctrl+C 暂停${NC}"
               echo -e "2. ${YELLOW}输入 rl 重启程序(等待约1分钟)${NC}"
               echo -e "3. ${YELLOW}输入 dll 查看日志${NC}"
               echo -e "4. ${YELLOW}参考文字教程的相关问题,反复尝试${NC}"
               qr_expired_shown=true
           fi
           
           docker restart langbot
           while ! docker logs langbot --tail 35 2>&1 | grep -q "请扫描下方二维码登录"; do
               echo -ne "\r${YELLOW}正在等待二维码生成...${NC}"
               sleep 1
           done
           echo -e "\n"
           docker logs langbot --tail 35
           echo -e "${YELLOW}请使用微信扫描上方二维码登录${NC}"

           last_url=$(docker logs langbot --tail 35 2>&1 | grep -o 'https://[^ ]*' | grep -v 'https://github.com/RockChinQ/LangBot' | grep -v 'https://docs.langbot.app' | tail -n 1)
           if [ -n "$last_url" ]; then
               echo -e "${YELLOW}也可以访问下方链接获取二维码:${NC}"
               echo -e "${YELLOW}${last_url}${NC}"
           fi
           qr_expired_shown=false
       fi

       # 检查是否登录成功
       if docker logs langbot --tail 35 2>&1 | grep -q "Gewechat 登录成功"; then
           break
       fi

       # 动态显示检测状态
       dots="${dots}."
       if [ ${#dots} -gt 3 ]; then
           dots="."
       fi
       echo -ne "\r${YELLOW}检测登录状态中${dots}${NC}"

       # 每30秒显示一次帮助信息
       if ! $help_shown; then
           echo -e "\n${YELLOW}如果长时间未检测到登录:${NC}"
           echo -e "1. ${YELLOW}按 Ctrl+C 暂停${NC}"
           echo -e "2. ${YELLOW}输入 dll 查看日志${NC}"
           echo -e "3. ${YELLOW}参考文字教程的相关问题,反复尝试${NC}"
           help_shown=true
       fi
       sleep 1
   done
   echo -e "\n"

   # 输出logs中的"登录成功!用户昵称: xxx",并提取用户昵称
   user_nickname=$(docker logs langbot --tail 35 2>&1 | grep -o '登录成功!用户昵称: .*' | tail -n 1 | sed 's/登录成功!用户昵称: //')
   echo -e "${GREEN}微信登录成功,用户昵称: $user_nickname${NC}"

   # 等待用户确认
   read -p "按下回车键继续..."
}

setup_admin() {
   echo -e "${CYAN}=== 步骤 6: 设置管理员 ===${NC}"
   echo -e "${YELLOW}请使用微信向机器人发送一条消息...${NC}"

   echo -e "${YELLOW}正在获取用户ID...${NC}"

   user_id=""
   while [ -z "$user_id" ]; do
       user_id=$(docker logs langbot --tail 35 2>&1 | grep -o 'person_wxid_[a-zA-Z0-9]*' | tail -n 1)
       if [ -z "$user_id" ]; then
           echo -e "${YELLOW}未检测到用户ID,请确保已向机器人发送消息...${NC}"
           sleep 5 # 等待5秒后再次检查
       fi
   done

   echo -e "${GREEN}检测到用户ID: $user_id${NC}"

   if [ -f "/user/LangBot/data/config/system.json" ]; then
       jq --arg uid "$user_id" '.["admin-sessions"][0] = $uid' \
           /user/LangBot/data/config/system.json >/user/LangBot/data/config/system.json.tmp
       mv /user/LangBot/data/config/system.json.tmp /user/LangBot/data/config/system.json

       echo -e "${YELLOW}正在重启LangBot以应用管理员配置...${NC}"
       docker restart langbot

       echo -e "${GREEN}管理员设置完成${NC}"
   else
       echo -e "${RED}未找到system.json配置文件${NC}"
   fi
}

clear_login_cache() {
   echo -e "${CYAN}=== 额外功能: 清除登录缓存 ===${NC}"
   echo -e "${YELLOW}正在清除登录缓存...${NC}"
   # 将LangBot/data/config/platform.json中的"gewechat"配置项的app_id和token清空
   if [ -f "/user/LangBot/data/config/platform.json" ]; then
       jq '.["platform-adapters"][7]["app_id"] = "" | .["platform-adapters"][7]["token"] = ""' \
           /user/LangBot/data/config/platform.json >/user/LangBot/data/config/platform.json.tmp
       mv /user/LangBot/data/config/platform.json.tmp /user/LangBot/data/config/platform.json
       echo -e "${GREEN}登录缓存已清除${NC}"

       read -p "是否重启LangBot以应用更改?(Y/n) " response
       response=${response:-"y"} # 默认值为 "y"
       case $response in
       [Yy]*)
           echo -e "${YELLOW}正在重启LangBot...${NC}"
           docker restart langbot
           echo -e "${GREEN}LangBot已重启${NC}"
           ;;
       [Nn]*)
           echo -e "${YELLOW}请手动重启LangBot以应用更改${NC}"
           ;;

       *)
           echo -e "${RED}请输入 y 或 n${NC}"
           ;;
       esac

   else
       echo -e "${RED}未找到platform.json配置文件${NC}"
   fi

   read -p "按下回车键继续..."
}

quick_get_help() {
   echo -e "${CYAN}=== 额外功能: 快速获取帮助 ===${NC}"
   echo -e "${YELLOW}请先给核心项目:https://github.com/RockChinQ/LangBot 一个star${NC}"
   echo -e "${YELLOW}然后加入LangBot社区交流群获取帮助,您的Star将会是项目进一步发展的动力${NC}"

   read -p "按下回车键继续..."

   # 检查并安装 iconv
   if ! command -v iconv &>/dev/null; then
       echo -e "${YELLOW}iconv 未安装,正在安装...${NC}"
       sudo apt-get update
       sudo apt-get install -y libc-bin
   fi

   # 设置 Docker 容器内的环境变量
   docker exec langbot sh -c "export.UTF-8 && export LC_ALL=C.UTF-8"
   docker exec gewe sh -c "export.UTF-8 && export LC_ALL=C.UTF-8"

   # 输出docker logs langbot 和 docker logs gewe 的所有日志到文件,使用UTF-8编码
   docker logs langbot 2>&1 | iconv -f UTF-8 -t UTF-8 >langbot.log
   docker logs gewe 2>&1 | iconv -f UTF-8 -t UTF-8 >gewe.log

   echo -e "${YELLOW}已将所有日志输出到 langbot.log 和 gewe.log 文件${NC}"
   echo -e "${YELLOW}日志文件位置在:$(pwd)${NC}"
   echo -e "${YELLOW}请将日志文件发送到LangBot社区交流群获取帮助${NC}"
   echo -e "${YELLOW}请加入LangBot社区交流群获取帮助${NC}"
   echo -e "${YELLOW}群号地址:https://docs.langbot.app/insight/community.html${NC}"
   read -p "按下回车键继续..."
}

quick_get_self_help() {
   echo -e "${CYAN}=== 额外功能: 问题自助(解决常见问题) ===${NC}"
   echo -e "${YELLOW}请先给核心项目:https://github.com/RockChinQ/LangBot 一个star${NC}"

   read -p "按下回车键继续..."
   echo -e "${YELLOW}请访问以下链接获取帮助:${NC}"
   echo -e "${YELLOW}相关问题:https://blog.thelazy.top/archives/1738843139572#%E7%9B%B8%E5%85%B3%E9%97%AE%E9%A2%98${NC}"
   echo -e "${YELLOW}LangBot 项目文档:https://docs.langbot.app${NC}"

   echo -e "${YELLOW}如果您有任何问题,请输入 h 获取帮助${NC}"
   read -p "按下回车键继续..."
}

restart_langbot() {
   echo -e "${CYAN}=== 额外功能: 重启LangBot ===${NC}"
   echo -e "${YELLOW}正在重启LangBot...${NC}"
   docker restart langbot
   echo -e "${GREEN}LangBot已重启${NC}"
   read -p "按下回车键继续..."
}

restart_gewe() {
   echo -e "${CYAN}=== 额外功能: 重启消息平台Gewe ===${NC}"
   echo -e "${YELLOW}正在重启消息平台Gewe...${NC}"
   docker restart gewe
   echo -e "${GREEN}消息平台Gewe已重启${NC}"
   read -p "按下回车键继续..."
}

get_logs_langbot() {
   echo -e "${CYAN}=== 额外功能: 获取LangBot日志 ===${NC}"
   echo -e "${YELLOW}正在获取LangBot日志...${NC}"
   docker logs langbot
   read -p "按下回车键继续..."
}

get_logs_gewe() {
   echo -e "${CYAN}=== 额外功能: 获取消息平台Gewe日志 ===${NC}"
   echo -e "${YELLOW}正在获取消息平台Gewe日志...${NC}"
   docker logs gewe
   read -p "按下回车键继续..."
}

change_model(){
   echo -e "${CYAN}=== 额外功能: 更换模型 ===${NC}"
   echo -e "${YELLOW}点击此链接:https://blog.thelazy.top/archives/1738843139572${NC}"
   echo -e "${YELLOW}查看相关问题-切换模型${NC}"
   echo -e "${YELLOW}请按照文档中的步骤进行操作${NC}"
   read -p "按下回车键继续..."
}

# 主菜单
while true; do
   echo -e "\n${CYAN}=== 请选择要执行的步骤(首次部署请按顺序依次执行1-6):===${NC}"
   echo -e "${YELLOW}1) 更新GRUB和时区配置(需要重启系统)${NC}"
   echo -e "${YELLOW}2) 安装必要组件(Docker等)${NC}"
   echo -e "${YELLOW}3) 配置容器环境${NC}"
   echo -e "${YELLOW}4) 配置LangBot${NC}"
   echo -e "${YELLOW}5) 登录微信${NC}"
   echo -e "${YELLOW}6) 设置管理员${NC}"
   echo -e "-------------------------------------------------------"
   echo -e "${CYAN}=== 额外功能:用于修改配置、查询日志、获取帮助等 ===${NC}"
   echo -e "${YELLOW}cm) 更换模型${NC}"
   echo -e "${YELLOW}dll) 获取LangBot日志${NC}"
   echo -e "${YELLOW}dlg) 获取消息平台Gewe日志${NC}"
   echo -e "${YELLOW}rl) 重启LangBot${NC}"
   echo -e "${YELLOW}rg) 重启消息平台Gewe${NC}"
   echo -e "${YELLOW}sh) 获取相关帮助${NC}"
   echo -e "${YELLOW}c) 清除登录缓存${NC}"
   echo -e "${YELLOW}h) 快速获取帮助${NC}"
   echo -e "${YELLOW}q) 退出${NC}"
   echo -n "请输入选项 (括号前面的数字或字母): "
   read choice

   case $choice in
   1)
       update_grub
       echo -e "${YELLOW}请重启系统后继续执行其他步骤${NC}"
       exit 0
       ;;
   2)
       setup_docker
       ;;
   3)
       setup_containers
       ;;
   4)
       configure_langbot
       ;;
   5)
       login_wechat
       ;;
   6)
       setup_admin
       ;;
   cm)
       change_model
       ;;
   dll)
       get_logs_langbot
       ;;
   dlg)
       get_logs_gewe
       ;;
   rl)
       restart_langbot
       ;;
   rg)
       restart_gewe
       ;;
   sh)
       quick_get_self_help
       ;;
   c)
       clear_login_cache
       ;;
   h)
       quick_get_help
       ;;
   q)
       echo -e "${GREEN}感谢使用,请不要忘了Star${NC}"
       echo -e "${GREEN}项目地址:https://github.com/RockChinQ/LangBot${NC}"
       echo -e "${YELLOW}需要再次启动此脚本时,控制台输入 langbot-wechat 即可${NC}"
       exit 0
       ;;
   *)
       echo -e "${RED}无效的选项,请重新选择${NC}"
       ;;
   esac
done

echo -e "\n${CYAN}🎉🎉🎉 恭喜你,微信接入部署完成! 🎉🎉🎉${NC}"
echo -e "${YELLOW}LangBot已成功配置微信接入${NC}"
echo -e "\n${CYAN}===== 祝你使用愉快!=====${NC}"
echo -e "${YELLOW}如有任何问题,请加 LangBot 社区交流群${NC}"
echo -e "${YELLOW}群号地址:https://docs.langbot.app/insight/community.html${NC}"