commit a397d63b6e3a7aab01a9853b8b52698f3b868d80 Author: TanTan Date: Thu Nov 12 22:43:19 2026 +0800 归档 NapCat-Docker 镜像(上游仓库与镜像已删除) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9429853 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,61 @@ +# NapCat-Docker 镜像构建文件 +# 依据 39 服现存镜像的 docker history 还原(构建 commit: 60dc2d72126890a0ae88a36f64000c08b7b8bf7a) +# 原仓库 https://github.com/NapNeko/NapCat-Docker 已 404 删除 + +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive \ + TZ=Asia/Shanghai + +RUN apt-get update && apt-get install -y \ + libnss3 \ + libnotify4 \ + libsecret-1-0 \ + libgbm1 \ + xvfb \ + libasound2 \ + fonts-wqy-zenhei \ + gnutls-bin \ + libglib2.0-dev \ + libdbus-1-3 \ + libgtk-3-0 \ + libxss1 \ + libxtst6 \ + libatspi2.0-0 \ + libx11-xcb1 \ + ffmpeg \ + unzip \ + dbus-user-session \ + curl \ + jq \ + gosu \ + tzdata && \ + echo "${TZ}" > /etc/timezone && \ + ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \ + apt autoremove -y && \ + apt clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN useradd --no-log-init -d /app napcat + +WORKDIR /app + +COPY NapCat.Shell.zip entrypoint.sh /app/ +COPY templates/ /app/templates/ + +# 安装 Linux QQ(版本与原始镜像一致) +RUN arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) && \ + curl --retry 3 --connect-timeout 30 --max-time 600 -fL -o linuxqq.deb \ + "https://qqdl.gtimg.cn/qqfile/QQNT/9.9.36/beta/9ee04bef/linuxqq_3.2.34-53644_${arch}.deb" && \ + dpkg -i --force-depends linuxqq.deb && \ + rm linuxqq.deb + +# 注入 NapCat 加载脚本 +RUN chmod +x entrypoint.sh && \ + echo "(async () => {await import('file:///app/napcat/napcat.mjs');})();" > /opt/QQ/resources/app/loadNapCat.js && \ + sed -i 's|"main": "[^"]*"|"main": "./loadNapCat.js"|' /opt/QQ/resources/app/package.json + +VOLUME [/app/.config/QQ] +VOLUME [/app/napcat/config] + +ENTRYPOINT ["bash", "entrypoint.sh"] diff --git a/NapCat.Shell.zip b/NapCat.Shell.zip new file mode 100644 index 0000000..fcb8ef4 Binary files /dev/null and b/NapCat.Shell.zip differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..572ff1b --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# NapCat-Docker 镜像归档 + +> 上游仓库与 Docker 镜像**均已删除**。本仓库是 39 服现存镜像的完整备份,可能是目前唯一可获取的副本。 + +## 为什么有这个仓库 + +NapCatQQ 是 QQ 机器人协议端框架(猫猫框架)。2026-11 期间上游内容被清空,现状如下(2026-11-12 实测): + +| 上游 | 状态 | +|---|---| +| Docker Hub `mlikiowa/napcat-docker` | **404,镜像已删除,无法拉取** | +| GitHub `NapNeko/NapCat-Docker` | **404,仓库已删除** | +| GitHub `NapNeko/NapCatQQ` | 仓库仍存在但内容被清空(仓库体积 1KB,12755 stars 未变) | +| 文档站 `napneko.github.io` | 仍可访问 | + +已经部署过 NapCat 的机器还能继续跑,但**重装、迁移、新机器部署都会因为拉不到镜像而失败**。本仓库用于解决这个问题。 + +## 镜像信息 + +| 项 | 值 | +|---|---| +| 原镜像名 | `mlikiowa/napcat-docker:latest` | +| Image ID | `sha256:045cb917c7d6f0147447eb272902a153f51e8cbdb1dc0e6df270ebd4253b4337` | +| 镜像大小 | 1.47 GB | +| 镜像构建时间 | 2026-10-21 | +| 构建 commit | `60dc2d72126890a0ae88a36f64000c08b7b8bf7a` | +| 基础镜像 | `ubuntu:22.04` | +| 内置 QQ | `linuxqq 3.2.34-53644`(QQNT 9.9.36 beta) | +| 导出时间 | 2026-11-12 | + +## 仓库内容 + +``` +. +├── README.md 本文件 +├── Dockerfile 依据镜像 docker history 还原的构建文件 +├── docker-compose.yml 可直接使用的部署配置(QQ 号已脱敏) +├── entrypoint.sh 镜像内原始启动脚本(原样提取) +├── templates/ NapCat OneBot 各框架配置模板(9 个,原样提取) +├── NapCat.Shell.zip 镜像内 NapCat 本体(35MB,构建镜像的关键输入) +└── image/ + └── napcat-docker-latest.tar 完整镜像归档(1.47GB) +``` + +## 使用方法 + +### 方式一:直接导入镜像(推荐,最快) + +```bash +# 下载 image/napcat-docker-latest.tar 后 +docker load -i napcat-docker-latest.tar +docker tag mlikiowa/napcat-docker:latest napcat-docker:latest + +# 启动 +docker run -d --name napcat \ + --restart always \ + -p 6099:6099 \ + -e NAPCAT_UID=1000 -e NAPCAT_GID=1000 -e TZ=Asia/Shanghai \ + -e WEBUI_TOKEN=你的token \ + -v ./docker-config/napcat:/app/napcat/config \ + -v ./data/qq:/app/.config/QQ \ + napcat-docker:latest +``` + +### 方式二:docker-compose + +```bash +docker compose up -d +``` + +`docker-compose.yml` 里的 `ACCOUNT` 改成自己的 QQ 号。 + +### 方式三:重新构建 + +仓库包含构建所需的全部输入(`NapCat.Shell.zip`、`entrypoint.sh`、`templates/`),可以直接: + +```bash +docker build -t napcat-docker:latest . +``` + +注意 `Dockerfile` 里会从腾讯 CDN 下载 `linuxqq 3.2.34-53644`,该地址目前仍可用;如果失效,需要换成本地 deb 包。 + +## 目录说明 + +| 容器内路径 | 用途 | 是否必须持久化 | +|---|---|---| +| `/app/napcat/config` | NapCat 配置(onebot11.json、webui.json、napcat.json) | **必须**,否则重启后配置丢失 | +| `/app/.config/QQ` | QQ 本体登录态 | **必须**,否则每次都要重新扫码 | +| `/app/templates` | 各框架配置模板 | 否,镜像自带 | + +## 端口 + +| 端口 | 用途 | +|---|---| +| 6099 | NapCat WebUI(默认 `http://IP:6099/webui`) | +| 3000/3001 | OneBot HTTP/WS 服务,需在 `onebot11.json` 中自行配置 | + +## 完整性校验 + +```bash +sha256sum image/napcat-docker-latest.tar +# 2b0a1f5f59c7057bdf32277d1af1c2a2c985f0954b64d458c87e131f39b43689 +``` + +## 免责声明 + +本仓库仅用于**归档与灾备**,防止上游删除导致已部署服务无法维护。镜像内容版权归 NapCatQQ 原作者所有。使用时请遵守 QQ 用户协议与当地法律法规。 + +## 相关 + +- 文档站:https://napneko.github.io/guide/napcat +- 源码仓库(内容已被清空):https://github.com/NapNeko/NapCatQQ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..21b369e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +services: + napcat: + image: mlikiowa/napcat-docker:latest + container_name: napcat + restart: always + environment: + - NAPCAT_UID=1000 + - NAPCAT_GID=1000 + - TZ=Asia/Shanghai + # 改成自己的 QQ 号 + - ACCOUNT=你的QQ号 + # WebUI 登录 token,留空则使用 NapCat 默认 + # - WEBUI_TOKEN=xxxxxx + # - WEBUI_PREFIX=/napcat + ports: + - "6099:6099" + volumes: + # NapCat 配置文件(onebot11.json、webui.json、napcat.json) + - ./docker-config/napcat:/app/napcat/config + # QQ 本体与登录态 + - ./data/qq:/app/.config/QQ + networks: + - napcat + +networks: + napcat: + driver: bridge diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..8e59ac5 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,246 @@ +#!/bin/bash + +trap "" SIGPIPE +# 安装 napcat +if [ ! -f "napcat/napcat.mjs" ] || [ ! -f "napcat/config/napcat.json" ]; then + unzip -qo NapCat.Shell.zip -d ./NapCat.Shell || exit 1 + mkdir -p napcat/config || exit 1 + if [ ! -f "napcat/napcat.mjs" ]; then + for item in NapCat.Shell/*; do + if [ "$item" != "NapCat.Shell/config" ]; then + cp -rf "$item" napcat/ || exit 1 + fi + done + fi + if [ ! -f "napcat/config/napcat.json" ]; then + mkdir -p napcat/config + cp -rn NapCat.Shell/config/. napcat/config/ || exit 1 + fi + rm -rf ./NapCat.Shell +fi + +# 配置 WebUI Token +CONFIG_PATH=/app/napcat/config/webui.json + +if [ ! -f "${CONFIG_PATH}" ] && [ -n "${WEBUI_TOKEN}" ]; then + echo "正在配置 WebUI Token..." + jq -n --arg prefix "${WEBUI_PREFIX}" --arg token "${WEBUI_TOKEN}" \ + '{host: "0.0.0.0", prefix: $prefix, port: 6099, token: $token, loginRate: 3}' > "${CONFIG_PATH}" || exit 1 +fi + +# 删除字符串两端的引号 +remove_quotes() { + local str="$1" + local first_char="${str:0:1}" + local last_char="${str: -1}" + + if [[ ($first_char == '"' && $last_char == '"') || ($first_char == "'" && $last_char == "'") ]]; then + # 两端都是双引号 + if [[ $first_char == '"' ]]; then + str="${str:1:-1}" + # 两端都是单引号 + else + str="${str:1:-1}" + fi + fi + echo "$str" +} + +if [ -n "${MODE}" ] && [ ! -f /app/napcat/config/onebot11.json ]; then + case "${MODE}" in + reverse_ws) + jq --arg url "${ONEBOT_URL:?MODE=reverse_ws requires ONEBOT_URL}" \ + '.network.websocketClients[0].url = $url' \ + /app/templates/nonebot.json > /app/napcat/config/onebot11.json.tmp || exit 1 + ;; + reverse_http) + jq --arg url "${ONEBOT_URL:?MODE=reverse_http requires ONEBOT_URL}" \ + '.network.httpClients = [.network.websocketClients[0] | .name = "reverse_http" | .url = $url | del(.heartInterval, .reconnectInterval)] | .network.websocketClients = []' \ + /app/templates/nonebot.json > /app/napcat/config/onebot11.json.tmp || exit 1 + ;; + *) cp "/app/templates/${MODE}.json" /app/napcat/config/onebot11.json.tmp || exit 1 ;; + esac + mv /app/napcat/config/onebot11.json.tmp /app/napcat/config/onebot11.json || exit 1 +fi + +rm -rf "/tmp/.X1-lock" + +# 删除容器标识 +rm -f "/.dockerenv" +rm -f "/.dockerinit" +rm -f "/run/.containerenv" +rm -f "/run/systemd/container" +rm -f "/dev/.dockerenv" + +# Name规范 +HOSTNAME_VAL="$(hostname)" +if [[ "${HOSTNAME_VAL}" == *docker* || "${HOSTNAME_VAL}" == *container* || "${HOSTNAME_VAL}" == *lxc* ]] \ + || [[ "${HOSTNAME_VAL}" =~ ^[a-f0-9]{12,}$ ]]; then + hostname "localhost" + echo "localhost" > /etc/hostname +fi + +# cgroup处理 +mkdir -p /tmp/fake_cgroup +FAKE_CGROUP_DIR="/tmp/fake_cgroup" +# /proc/self/cgroup +# /proc/1/cgroup +for cfile in /proc/self/cgroup /proc/1/cgroup; do + if [ -f "$cfile" ]; then + FAKE_CG="$FAKE_CGROUP_DIR/cgroup_$(basename $(dirname $cfile))_$(basename $cfile)" + cat "$cfile" | sed \ + -e 's|/docker/|/system.slice/|g' \ + -e 's|/docker-|/system.slice/|g' \ + -e 's|/lxc/|/system.slice/|g' \ + -e 's|/podmaster|/system.slice/|g' \ + -e 's|/podman/|/system.slice/|g' \ + -e 's|/kubepods/|/system.slice/|g' \ + -e 's|/containerd/|/system.slice/|g' \ + -e 's|/buildkit/|/system.slice/|g' \ + > "$FAKE_CG" + mount --bind "$FAKE_CG" "$cfile" 2>/dev/null || true + fi +done + +# DMI +for dmi_file in /sys/class/dmi/id/product_name /sys/class/dmi/id/product_uuid /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/board_vendor /sys/class/dmi/id/board_name; do + if [ -f "$dmi_file" ]; then + FAKE_DMI="/tmp/fake_cgroup/$(echo $dmi_file | tr '/' '_')" + case "$(basename $dmi_file)" in + product_name) echo "Standard PC" > "$FAKE_DMI" ;; + product_uuid) echo "00000000-0000-0000-0000-000000000000" > "$FAKE_DMI" ;; + sys_vendor|board_vendor) echo "Intel Corporation" > "$FAKE_DMI" ;; + board_name) echo "Default string" > "$FAKE_DMI" ;; + esac + mount --bind "$FAKE_DMI" "$dmi_file" 2>/dev/null || true + fi +done + +# Docker Socket +if [ -S /var/run/docker.sock ]; then + mv /var/run/docker.sock /var/run/.docker.sock.hidden 2>/dev/null || true +fi + +# Mount Info +for mfile in /proc/self/mountinfo /proc/1/mountinfo; do + if [ -f "$mfile" ]; then + FAKE_MOUNT="$FAKE_CGROUP_DIR/mountinfo_$(basename $(dirname $mfile))_$(basename $mfile)" + cat "$mfile" | sed \ + -e 's|overlay / |ext4 / |g' \ + -e 's|overlay /|ext4 /|g' \ + -e '/docker/d' \ + -e '/containerd/d' \ + -e '/\.dockerenv/d' \ + -e '/cgroup2.*docker/d' \ + > "$FAKE_MOUNT" + mount --bind "$FAKE_MOUNT" "$mfile" 2>/dev/null || true + fi +done + +# /proc/1/cmdline +if [ -f /proc/1/cmdline ]; then + FAKE_CMDLINE="$FAKE_CGROUP_DIR/cmdline_1" + printf '/sbin/init\0' > "$FAKE_CMDLINE" + mount --bind "$FAKE_CMDLINE" /proc/1/cmdline 2>/dev/null || true +fi + +# /proc/1/sched +if [ -f /proc/1/sched ]; then + FAKE_SCHED="$FAKE_CGROUP_DIR/sched_1" + head -1 /proc/1/sched | sed 's|([^)]*)|(1, #threads=1)|' > "$FAKE_SCHED" + tail -n +2 /proc/1/sched >> "$FAKE_SCHED" + sed -i 's/^[a-zA-Z0-9_-]*\s/systemd /' "$FAKE_SCHED" + mount --bind "$FAKE_SCHED" /proc/1/sched 2>/dev/null || true +fi + +# /proc/1/environ +if [ -f /proc/1/environ ]; then + FAKE_ENVIRON="$FAKE_CGROUP_DIR/environ_1" + cat /proc/1/environ | tr '\0' '\n' | \ + grep -v -i 'container=docker\|container=lxc\|container=podman\|container=containerd' | \ + tr '\n' '\0' > "$FAKE_ENVIRON" + mount --bind "$FAKE_ENVIRON" /proc/1/environ 2>/dev/null || true +fi + +# /proc/1/status & /proc/self/status (NSpid) +for sfile in /proc/1/status /proc/self/status; do + if [ -f "$sfile" ]; then + FAKE_STATUS="$FAKE_CGROUP_DIR/status_$(basename $(dirname $sfile))_$(basename $sfile)" + cat "$sfile" | sed 's/^NSpid:.*/NSpid:\t1/' > "$FAKE_STATUS" + mount --bind "$FAKE_STATUS" "$sfile" 2>/dev/null || true + fi +done + +# /proc/1/stat +if [ -f /proc/1/stat ]; then + FAKE_STAT="$FAKE_CGROUP_DIR/stat_1" + cat /proc/1/stat | sed 's/^\([0-9]*\) ([-a-zA-Z0-9_]*)/\1 (systemd)/' > "$FAKE_STAT" + mount --bind "$FAKE_STAT" /proc/1/stat 2>/dev/null || true +fi + +# /etc/hosts +if [ -f /etc/hosts ]; then + FAKE_HOSTS="$FAKE_CGROUP_DIR/hosts" + cat /etc/hosts | grep -v "$(hostname)" > "$FAKE_HOSTS" 2>/dev/null + grep -q '^127\.0\.0\.1.*localhost' "$FAKE_HOSTS" || echo "127.0.0.1\tlocalhost" >> "$FAKE_HOSTS" + grep -q '^::1.*localhost' "$FAKE_HOSTS" || echo "::1\tlocalhost ip6-localhost ip6-loopback" >> "$FAKE_HOSTS" + mount --bind "$FAKE_HOSTS" /etc/hosts 2>/dev/null || true +fi + +# /sys/hypervisor/type +if [ -f /sys/hypervisor/type ]; then + FAKE_HYPER="$FAKE_CGROUP_DIR/hypervisor_type" + echo "" > "$FAKE_HYPER" + mount --bind "$FAKE_HYPER" /sys/hypervisor/type 2>/dev/null || true +fi + +# /proc/self/mounts +if [ -f /proc/self/mounts ]; then + FAKE_MOUNTS="$FAKE_CGROUP_DIR/mounts_self" + cat /proc/self/mounts | sed \ + -e 's|overlay / |ext4 / |g' \ + -e 's|overlay /|ext4 /|g' \ + -e '/docker/d' \ + -e '/containerd/d' \ + > "$FAKE_MOUNTS" + mount --bind "$FAKE_MOUNTS" /proc/self/mounts 2>/dev/null || true +fi + +# /proc/self/cpuset +if [ -f /proc/self/cpuset ]; then + FAKE_CPUSET="$FAKE_CGROUP_DIR/cpuset_self" + cat /proc/self/cpuset | sed \ + -e 's|/docker/|/|g' \ + -e 's|/docker-[^/]*/|/|g' \ + -e 's|/kubepods/|/|g' \ + -e 's|/containerd/|/|g' \ + > "$FAKE_CPUSET" + mount --bind "$FAKE_CPUSET" /proc/self/cpuset 2>/dev/null || true +fi + +: ${NAPCAT_GID:=0} +: ${NAPCAT_UID:=0} +usermod -o -u ${NAPCAT_UID} napcat +groupmod -o -g ${NAPCAT_GID} napcat +usermod -g ${NAPCAT_GID} napcat +chown -R ${NAPCAT_UID}:${NAPCAT_GID} /app + +# 关闭 core dump。QQ 会预留上 TB 的虚拟地址空间,崩溃时 core 能写出几百 GB, +# Docker Desktop (WSL) 下会直接写满宿主机系统盘(NapCatQQ #2060)。 +# WSL 这类管道形式的 core_pattern 不受 ulimit 限制,所以同时把 coredump_filter 清零, +# 崩溃时只留寄存器等基本信息。需要完整 core 调试时设置 NAPCAT_ENABLE_COREDUMP=1。 +if [ "${NAPCAT_ENABLE_COREDUMP}" != "1" ]; then + ulimit -c 0 2>/dev/null || true + echo 0 > /proc/self/coredump_filter 2>/dev/null || true +fi + +gosu napcat Xvfb :1 -screen 0 1080x760x16 +extension GLX +render > /dev/null 2>&1 & +sleep 2 + +export DISPLAY=:1 +cd /app/napcat +if [ -n "${ACCOUNT}" ]; then + gosu napcat /opt/QQ/qq --no-sandbox -q $ACCOUNT +else + gosu napcat /opt/QQ/qq --no-sandbox +fi diff --git a/image/napcat-docker-latest.tar b/image/napcat-docker-latest.tar new file mode 100644 index 0000000..21281fd Binary files /dev/null and b/image/napcat-docker-latest.tar differ diff --git a/templates/astrbot.json b/templates/astrbot.json new file mode 100644 index 0000000..d2dd8cb --- /dev/null +++ b/templates/astrbot.json @@ -0,0 +1,25 @@ +{ + "network": { + "httpServers": [], + "httpSseServers": [], + "httpClients": [], + "websocketServers": [], + "websocketClients": [ + { + "enable": true, + "name": "rws", + "url": "ws://astrbot:6199/ws", + "reportSelfMessage": false, + "messagePostFormat": "array", + "token": "", + "debug": false, + "heartInterval": 30000, + "reconnectInterval": 30000 + } + ], + "plugins": [] + }, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false +} \ No newline at end of file diff --git a/templates/dice.json b/templates/dice.json new file mode 100644 index 0000000..c80b599 --- /dev/null +++ b/templates/dice.json @@ -0,0 +1,26 @@ +{ + "network": { + "httpServers": [], + "httpSseServers": [], + "httpClients": [], + "websocketServers": [ + { + "enable": true, + "name": "dice", + "host": "0.0.0.0", + "port": 15801, + "reportSelfMessage": false, + "enableForcePushEvent": true, + "messagePostFormat": "array", + "token": "", + "debug": false, + "heartInterval": 30000 + } + ], + "websocketClients": [], + "plugins": [] +}, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false +} \ No newline at end of file diff --git a/templates/koishi.json b/templates/koishi.json new file mode 100644 index 0000000..874515f --- /dev/null +++ b/templates/koishi.json @@ -0,0 +1,25 @@ +{ + "network": { + "httpServers": [], + "httpSseServers": [], + "httpClients": [], + "websocketServers": [], + "websocketClients": [ + { + "enable": true, + "name": "rws", + "url": "ws://koishi:5140/onebot", + "reportSelfMessage": false, + "messagePostFormat": "array", + "token": "", + "debug": false, + "heartInterval": 30000, + "reconnectInterval": 30000 + } + ], + "plugins": [] + }, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false +} \ No newline at end of file diff --git a/templates/nonebot.json b/templates/nonebot.json new file mode 100644 index 0000000..cded89e --- /dev/null +++ b/templates/nonebot.json @@ -0,0 +1,25 @@ +{ + "network": { + "httpServers": [], + "httpSseServers": [], + "httpClients": [], + "websocketServers": [], + "websocketClients": [ + { + "enable": true, + "name": "rws", + "url": "ws://nonebot:8080/onebot/v11/ws", + "reportSelfMessage": false, + "messagePostFormat": "array", + "token": "", + "debug": false, + "heartInterval": 30000, + "reconnectInterval": 30000 + } + ], + "plugins": [] + }, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false +} \ No newline at end of file diff --git a/templates/olivos.json b/templates/olivos.json new file mode 100644 index 0000000..1ab2f23 --- /dev/null +++ b/templates/olivos.json @@ -0,0 +1,35 @@ +{ + "network": { + "httpServers": [ + { + "enable": true, + "name": "olivos-http-server", + "host": "0.0.0.0", + "port": 5700, + "enableCors": true, + "enableWebsocket": true, + "messagePostFormat": "string", + "token": "7777777", + "debug": false + } + ], + "httpSseServers": [], + "httpClients": [ + { + "enable": true, + "name": "olivos-http-client", + "url": "http://olivos-app:55001/OlivOSMsgApi/qq/onebot/default", + "reportSelfMessage": false, + "messagePostFormat": "string", + "token": "7777777", + "debug": false + } + ], + "websocketServers": [], + "websocketClients": [], + "plugins": [] + }, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false +} \ No newline at end of file diff --git a/templates/q2tg.json b/templates/q2tg.json new file mode 100644 index 0000000..91c063e --- /dev/null +++ b/templates/q2tg.json @@ -0,0 +1,26 @@ +{ + "network": { + "httpServers": [], + "httpSseServers": [], + "httpClients": [], + "websocketServers": [ + { + "enable": true, + "name": "ws", + "host": "0.0.0.0", + "port": 3001, + "reportSelfMessage": false, + "enableForcePushEvent": true, + "messagePostFormat": "array", + "token": "", + "debug": false, + "heartInterval": 30000 + } + ], + "websocketClients": [], + "plugins": [] + }, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false +} \ No newline at end of file diff --git a/templates/qq-ai-bot.json b/templates/qq-ai-bot.json new file mode 100644 index 0000000..1e4eadf --- /dev/null +++ b/templates/qq-ai-bot.json @@ -0,0 +1,25 @@ +{ + "network": { + "httpServers": [], + "httpSseServers": [], + "httpClients": [], + "websocketServers": [], + "websocketClients": [ + { + "enable": true, + "name": "qq-ai-bot-rws", + "url": "ws://qq-ai-bot:16700/onebot/v11/ws", + "reportSelfMessage": false, + "messagePostFormat": "array", + "token": "", + "debug": false, + "heartInterval": 30000, + "reconnectInterval": 30000 + } + ], + "plugins": [] + }, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false +} diff --git a/templates/sealdice.json b/templates/sealdice.json new file mode 100644 index 0000000..42ef68d --- /dev/null +++ b/templates/sealdice.json @@ -0,0 +1,26 @@ +{ + "network": { + "httpServers": [], + "httpSseServers": [], + "httpClients": [], + "websocketServers": [ + { + "enable": true, + "name": "sealdice", + "host": "0.0.0.0", + "port": 1234, + "reportSelfMessage": false, + "enableForcePushEvent": true, + "messagePostFormat": "array", + "token": "", + "debug": false, + "heartInterval": 30000 + } + ], + "websocketClients": [], + "plugins": [] + }, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false + } \ No newline at end of file diff --git a/templates/ws.json b/templates/ws.json new file mode 100644 index 0000000..91c063e --- /dev/null +++ b/templates/ws.json @@ -0,0 +1,26 @@ +{ + "network": { + "httpServers": [], + "httpSseServers": [], + "httpClients": [], + "websocketServers": [ + { + "enable": true, + "name": "ws", + "host": "0.0.0.0", + "port": 3001, + "reportSelfMessage": false, + "enableForcePushEvent": true, + "messagePostFormat": "array", + "token": "", + "debug": false, + "heartInterval": 30000 + } + ], + "websocketClients": [], + "plugins": [] + }, + "musicSignUrl": "", + "enableLocalFile2Url": false, + "parseMultMsg": false +} \ No newline at end of file