#!/bin/bash # Moltbot (原 ClawdBot) 一键安装与管理脚本 # 兼容 Debian / Ubuntu # 官方文档: https://docs.molt.bot # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' PLAIN='\033[0m' # 配置文件路径 # Moltbot 依然使用 .clawdbot 目录以保持兼容性 CONFIG_DIR="/root/.clawdbot" CONFIG_FILE="${CONFIG_DIR}/moltbot.json" SERVICE_FILE="/etc/systemd/system/moltbot.service" check_root() { if [ $EUID -ne 0 ]; then echo -e "${RED}错误: 请使用 root 用户运行此脚本!${PLAIN}" echo -e "${YELLOW}提示: 请尝试使用 'sudo bash $0' 运行${PLAIN}" exit 1 fi } check_sys() { if [ -f /etc/os-release ]; then . /etc/os-release if [[ "$ID" != "debian" && "$ID" != "ubuntu" ]]; then echo -e "${RED}错误: 本脚本仅支持 Debian 或 Ubuntu 系统!${PLAIN}" exit 1 fi else echo -e "${RED}错误: 无法检测系统版本!${PLAIN}" exit 1 fi } log_info() { echo -e "${GREEN}[INFO] $1${PLAIN}" } log_warn() { echo -e "${YELLOW}[WARN] $1${PLAIN}" } log_error() { echo -e "${RED}[ERROR] $1${PLAIN}" } # 安装 Node.js 22+ install_nodejs() { log_info "正在检查 Node.js 环境..." if command -v node >/dev/null 2>&1; then NODE_VERSION_FULL=$(node -v) NODE_MAJOR=$(echo "$NODE_VERSION_FULL" | cut -d'v' -f2 | cut -d'.' -f1) if [ "$NODE_MAJOR" -ge 22 ]; then log_info "Node.js 已安装且版本符合要求 (${NODE_VERSION_FULL}),无需重复安装。" return else log_warn "检测到旧版本 Node.js (${NODE_VERSION_FULL}),Moltbot 需要 Node.js 22+" read -p "是否升级 Node.js 到 22.x?(这将覆盖现有版本) [y/n]: " upgrade_node if [ "$upgrade_node" != "y" ]; then log_error "已取消 Node.js 升级。Moltbot 可能无法正常运行。" return fi fi fi log_info "正在安装基础依赖 (curl, nano)..." apt-get update apt-get install -y curl nano curl -fsSL https://deb.nodesource.com/setup_22.x | bash - apt-get install -y nodejs if command -v node >/dev/null 2>&1; then NODE_VERSION=$(node -v) log_info "Node.js 安装成功: ${NODE_VERSION}" else log_error "Node.js 安装失败,请检查网络或系统源!" exit 1 fi } # 安装 Moltbot install_moltbot_core() { log_info "正在安装 Moltbot..." if command -v clawdbot >/dev/null 2>&1; then CURRENT_VERSION=$(clawdbot --version) log_warn "ClawdBot (Moltbot) 已安装 (版本: ${CURRENT_VERSION})" read -p "是否强制重新安装/更新?[y/n]: " force_install if [ "$force_install" != "y" ]; then log_info "跳过安装步骤。" return fi fi # 强制使用 clawdbot 包,因为更稳定 npm install -g clawdbot@latest if command -v clawdbot >/dev/null 2>&1; then VERSION=$(clawdbot --version) log_info "ClawdBot 安装成功,版本: ${VERSION}" else log_error "ClawdBot 安装失败,请检查 npm 权限或网络!" exit 1 fi } # 配置 Moltbot configure_moltbot() { if [ -f "${CONFIG_FILE}" ]; then log_warn "检测到已存在配置文件: ${CONFIG_FILE}" read -p "是否覆盖现有配置?[y/n]: " overwrite_config if [ "$overwrite_config" != "y" ]; then log_info "保留现有配置,跳过配置步骤。" return fi fi log_info "开始配置 Moltbot..." mkdir -p "${CONFIG_DIR}" echo -e "${CYAN}请选择 API 类型:${PLAIN}" echo "1. Anthropic 官方 API" echo "2. OpenAI 兼容 API (中转站/其他模型)" read -p "请输入选项 [1/2]: " api_choice read -p "请输入 Telegram Bot Token: " bot_token read -p "请输入您的 Telegram User ID (用于管理员白名单): " admin_id if [ "$api_choice" == "1" ]; then read -p "请输入 Anthropic API Key (sk-ant-...): " api_key cat > "${CONFIG_FILE}" < "${CONFIG_FILE}" < "${SERVICE_FILE}" < 输入配对命令," echo -e "或者直接在终端运行: clawdbot pairing approve telegram <配对码>" echo -e "${GREEN}=============================================${PLAIN}" } # 卸载流程 uninstall() { read -p "确定要卸载 Moltbot 吗?配置文件也将被删除 [y/n]: " confirm if [ "$confirm" != "y" ]; then echo "已取消。" return fi systemctl stop moltbot systemctl disable moltbot rm -f "${SERVICE_FILE}" systemctl daemon-reload npm uninstall -g clawdbot npm uninstall -g moltbot # 尝试卸载旧包 rm -rf "${CONFIG_DIR}" log_info "Moltbot (ClawdBot) 已卸载。" } # 菜单 show_menu() { clear echo -e "${CYAN}Moltbot 管理脚本${PLAIN}" echo -e "${CYAN}------------------------${PLAIN}" echo -e "1. 安装并配置 Moltbot" echo -e "2. 启动服务" echo -e "3. 停止服务" echo -e "4. 重启服务" echo -e "5. 查看运行状态" echo -e "6. 查看实时日志" echo -e "7. 修改配置文件" echo -e "8. 卸载 Moltbot" echo -e "9. 运行健康检查 (Doctor)" echo -e "0. 退出脚本" echo -e "${CYAN}------------------------${PLAIN}" read -p "请输入选项 [0-9]: " choice case "$choice" in 1) install ;; 2) systemctl start moltbot && log_info "服务已启动" ;; 3) systemctl stop moltbot && log_info "服务已停止" ;; 4) systemctl restart moltbot && log_info "服务已重启" ;; 5) systemctl status moltbot ;; 6) journalctl -u moltbot -f ;; 7) nano "${CONFIG_FILE}" && systemctl restart moltbot && log_info "配置已更新并重启服务" ;; 8) uninstall ;; 9) clawdbot doctor ;; 0) exit 0 ;; *) echo -e "${RED}无效选项,请重新输入${PLAIN}" ;; esac } if [ $# -gt 0 ]; then case "$1" in install) install ;; uninstall) uninstall ;; *) echo "用法: $0 [install|uninstall] 或直接运行进入菜单" ;; esac else while true; do show_menu echo -e "\n按回车键继续..." read done fi