#!/usr/bin/env bash set -euo pipefail APP_DIR="/opt/chatbot" SERVICE_NAME="chatbot.service" SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}" ENV_FILE="/etc/chatbot.env" RAW_BASE="${CHATBOT_RAW_BASE:-https://raw.githubusercontent.com/vmenzo/chatbot/main}" if [[ "${EUID}" -ne 0 ]]; then echo "请用 root 运行:sudo bash install.sh" exit 1 fi read -r -p "请输入 Telegram Bot Token: " BOT_TOKEN read -r -p "请输入管理员 Telegram 数字 ID: " ADMIN_ID read -r -p "管理员显示名(留空则自动识别 Telegram 名字): " ADMIN_DISPLAY_NAME if [[ -z "${BOT_TOKEN}" || -z "${ADMIN_ID}" ]]; then echo "Token 和管理员 ID 不能为空" exit 1 fi if ! [[ "${ADMIN_ID}" =~ ^[0-9]+$ ]]; then echo "管理员 ID 必须是数字" exit 1 fi escape_env_value() { local value="$1" value="${value//\\/\\\\}" value="${value//\"/\\\"}" printf '"%s"' "${value}" } install_project_file() { local filename="$1" local source_file source_file="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/${filename}" if [[ -f "${source_file}" ]]; then cp "${source_file}" "${APP_DIR}/${filename}" return fi if [[ -z "${RAW_BASE}" ]]; then echo "找不到 ${filename}。" echo "如果用 GitHub 一行安装,请这样运行:" echo "sudo bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/vmenzo/chatbot/main/install.sh)\"" exit 1 fi curl -fsSL "${RAW_BASE%/}/${filename}" -o "${APP_DIR}/${filename}" } apt-get update apt-get install -y ca-certificates curl python3 python3-venv python3-pip mkdir -p "${APP_DIR}" install_project_file "chatbot.py" install_project_file "requirements.txt" python3 -m venv "${APP_DIR}/venv" "${APP_DIR}/venv/bin/pip" install --upgrade pip "${APP_DIR}/venv/bin/pip" install -r "${APP_DIR}/requirements.txt" cat > "${ENV_FILE}" < "${SERVICE_FILE}" <