| #!/bin/sh |
| |
| set -e |
| echo "[onebots] 入口脚本执行中 (Hugging Face) ..." |
|
|
| |
| cd /app/development |
| |
| if [ ! -d node_modules ] || [ -z "$(ls -A node_modules 2>/dev/null)" ]; then |
| echo "[onebots] 错误: /app/development/node_modules 不存在或为空,请使用最新的 ghcr.io/lc-cn/onebots 镜像并清除 HF 构建缓存后重试" |
| exit 1 |
| fi |
| export NODE_PATH="/app/development/node_modules" |
|
|
| mkdir -p /data |
| HF_PORT="${PORT:-7860}" |
|
|
| |
| if [ -w /etc/resolv.conf ] 2>/dev/null; then |
| printf 'nameserver 8.8.8.8\nnameserver 1.1.1.1\n' > /etc/resolv.conf |
| echo "[onebots] 已设置 DNS 为 8.8.8.8 / 1.1.1.1(便于解析 Telegram、Discord 等外部 API)" |
| fi |
|
|
| |
| |
| if command -v curl >/dev/null 2>&1; then |
| if [ -z "${HF_REPO_ID}" ]; then |
| echo "[onebots] 未设置 HF_REPO_ID,跳过从仓库恢复(请在 Space → Settings → Variables 中添加 HF_REPO_ID,如 用户名/Space名)" |
| else |
| echo "[onebots] 尝试从 Space 仓库恢复: ${HF_REPO_ID}" |
| _hf_url_tar="https://huggingface.co/spaces/${HF_REPO_ID}/resolve/main/data_backup.tar.gz" |
| _hf_url_yaml="https://huggingface.co/spaces/${HF_REPO_ID}/resolve/main/config_backup.yaml" |
| |
| if [ -n "${HF_TOKEN}" ]; then |
| _curl_auth="-H" |
| _curl_auth_val="Authorization: Bearer ${HF_TOKEN}" |
| else |
| _curl_auth="" |
| _curl_auth_val="" |
| fi |
| |
| if [ -n "${_curl_auth_val}" ]; then |
| curl -sfL -o /tmp/data_backup.tar.gz "${_curl_auth}" "${_curl_auth_val}" "${_hf_url_tar}" 2>/dev/null || true |
| else |
| curl -sfL -o /tmp/data_backup.tar.gz "${_hf_url_tar}" 2>/dev/null || true |
| fi |
| if [ -s /tmp/data_backup.tar.gz ] && command -v tar >/dev/null 2>&1; then |
| if tar -xzf /tmp/data_backup.tar.gz -C /data 2>/dev/null; then |
| echo "[onebots] 已从仓库恢复整个 data 目录 (data_backup.tar.gz)" |
| else |
| echo "[onebots] 解压 data_backup.tar.gz 失败,将尝试仅恢复配置" |
| rm -f /tmp/data_backup.tar.gz |
| fi |
| else |
| rm -f /tmp/data_backup.tar.gz |
| echo "[onebots] 未找到或下载 data_backup.tar.gz 失败(请先在 Web 端保存配置以生成备份;私有仓库需在 Secrets 中设置 HF_TOKEN)" |
| fi |
| |
| if [ ! -f /data/config.yaml ]; then |
| if [ -n "${_curl_auth_val}" ]; then |
| curl -sfL -o /data/config.yaml "${_curl_auth}" "${_curl_auth_val}" "${_hf_url_yaml}" 2>/dev/null || true |
| else |
| curl -sfL -o /data/config.yaml "${_hf_url_yaml}" 2>/dev/null || true |
| fi |
| if [ -s /data/config.yaml ]; then |
| echo "[onebots] 已从仓库恢复 config_backup.yaml 到 /data/config.yaml" |
| else |
| rm -f /data/config.yaml |
| echo "[onebots] 未找到或下载 config_backup.yaml 失败,将使用默认配置" |
| fi |
| fi |
| fi |
| fi |
|
|
| if [ ! -f /data/config.yaml ]; then |
| if [ -f /app/packages/onebots/lib/config.sample.yaml ]; then |
| cp /app/packages/onebots/lib/config.sample.yaml /data/config.yaml |
| echo "[onebots] 已创建默认配置 /data/config.yaml (Hugging Face)" |
| else |
| echo "[onebots] 错误: 未找到 config.sample.yaml" |
| exit 1 |
| fi |
| fi |
|
|
| |
| if command -v sed >/dev/null 2>&1; then |
| sed -i "s/^port:.*/port: ${HF_PORT}/" /data/config.yaml 2>/dev/null || true |
| fi |
|
|
| |
| HAS_CONFIG=0 |
| for arg in "$@"; do |
| if [ "$arg" = "-c" ] || [ "$arg" = "--config" ]; then |
| HAS_CONFIG=1 |
| break |
| fi |
| done |
| if [ "$HAS_CONFIG" = 0 ]; then |
| set -- -c /data/config.yaml "$@" |
| fi |
|
|
| |
| exec node /app/packages/onebots/lib/bin.js "$@" |
|
|