npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@sfmc-bds/qq-bridge

v0.3.1

Published

SFMC QQ ↔ MC bridge — official QQ Open Platform Bot and/or LLBot OneBot 11

Readme

@sfmc-bds/qq-bridge

SFMC QQ ↔ MC 桥接,支持双后端:

  • official(默认):QQ 开放平台 WebSocket Gateway 或 Webhook;开启「接收所有消息」后,群内指令无需 @,普通聊天仍需 @ 才转发游戏
  • llbot:LLBot OneBot 11 reverse-WS(端口 3002)

消息统一 POST 到 db-server /api/sfmc/messages。MC→QQ 出站由 db-server 按同一 qq_backend 处理。

QQ 侧指令(菜单 / ping / whoami)在桥内拦截,不依赖 MC;official 用 Markdown+键盘,llbot 用编号菜单。

配置见 configs/qq_config.json 与文档 QQ 互通。

安装

pnpm add @sfmc-bds/qq-bridge
node node_modules/@sfmc-bds/qq-bridge/dist/index.js

通常由 @sfmc-bds/sfmc / @sfmc-bds/cli 统一拉起。

官方机器人 Webhook 云端部署

Webhook 模式只改变 QQ→桥的事件接收。MC→QQ 仍由游戏机上的 db-server 调用 QQ OpenAPI。云端仅运行 qq-bridge,不需要复制游戏世界或数据库。

游戏机 configs/qq_config.json 中设置 qq_backend: "official"、qq_enabled: true 和 official.transport: "webhook"。官方凭据、目标群、管理员及回调参数集中放在 official 对象;LLBot 参数集中放在 llbot 对象。CLI 看到 Webhook 模式后跳过游戏机上的 QQ 桥进程,保留 db-server 与 BDS。

{
  "qq_enabled": true,
  "qq_backend": "official",
  "official": {
    "transport": "webhook",
    "app_id": "填入 AppID",
    "app_secret": "填入 AppSecret",
    "group_openid": "填入目标群 OpenID",
    "admin_openids": [],
    "webhook": { "port": 3005, "path": "/qqbot/webhook" }
  },
  "llbot": { "enabled": false }
}

deploy/qq-config-sync.ps1 在游戏机登录后持续检查配置。仅当 official.transport 为 webhook 时,它经 SSH 标准输入同步官方凭据、目标群、管理员、频道和公开服务器信息;云端保留自己的 Webhook 监听、隧道端口与面板 ID。切回 websocket 或禁用 QQ 时,同步任务停止云端桥;切换接收方式后还需重启游戏机上的 SFMC CLI,并在 QQ 开放平台修改消息接收方式。同步失败时云端保留上一版配置。

当前阿里云部署使用 SSH 别名 aliyun、云端同步程序 /opt/sfmc-qq-bridge/deploy/sync-qq-config.mjs,游戏机任务名为 SFMC QQ Config Sync。同步任务登录后启动,每 30 秒检查一次;游戏机重启后需先登录该用户。日志在运行目录的 qq-config-sync.log,只记录状态。回调端口与路径在此部署中固定为 3005 和 /qqbot/webhook;修改这两个值须同步调整 Nginx 和 QQ 开放平台回调地址。

Webhook 进程仅监听云机 127.0.0.1:3005。用同机 HTTPS 反向代理把 https://你的域名/qqbot/webhook 转给它,然后在 QQ 开放平台「消息接收方式」选择 HTTP 回调,填写同一 URL。回调先完成平台 op:13 地址验证,正式事件再校验签名;反向代理须保留请求体原始字节与 X-Bot-Appid、X-Signature-Timestamp、X-Signature-Ed25519 请求头。

云端桥需要访问游戏机 db-server 的多个本地 API。db-server 只监听游戏机 127.0.0.1:3001,不要开放其端口。游戏机 SFMC CLI 的 tunnel 服务主动建立 SSH 反向隧道,将云机 127.0.0.1:13001 转发到游戏机 127.0.0.1:3001;云端配置 db_host: "127.0.0.1"、db_port: 13001。在 qq_config.json 的 official.tunnel 配置 { "enabled": true, "host": "aliyun", "remotePort": 13001 },其中 host 是本机 SSH 配置中的别名。SFMC 启动 db-server 后启动隧道,异常退出时重试,并通过 status、start tunnel、stop tunnel、restart tunnel 和 logs tunnel 管理。远端只监听回环地址;不要同时运行旧的 deploy/qq-tunnel.ps1,否则两者会争抢云端端口。配置同步任务仍负责同步云端机器人配置,与隧道的生命周期分开。

回调成功接收后会尽快确认,事件在单进程内按序处理并限制待处理数量。当前待处理队列位于内存中,进程在确认后立即崩溃时,尚未处理的事件可能丢失;如需跨进程故障恢复,应再增加持久化队列。

依赖

  • @sfmc-bds/sdk
  • ws
  • Node.js >= 22.13

仓库

https://github.com/DogeLakeDev/ScriptsForMinecraftServer/tree/main/packages/qq-bridge

玩家服务交互(第一期)

首页分为「服务器」「我的账号」「入服」「帮助」,管理权限核验成功才显示「管理」。两端保留原有文字命令和斜杠别名,子菜单均可返回首页。官方机器人开启「接收所有消息」后,群内可直接发送指令;未开启时仍需 @机器人。LLBot 菜单编号只对打开菜单的本人有效,60 秒过期,错误编号不会消费菜单。

  • 查服 / 状态 / /status:玩家可见的运行、在线与世界摘要;主机与进程信息位于管理员「自检」。
  • 版本 / /version:优先显示 SFMC CLI 捕获的本次 BDS 启动日志版本。须部署新版 CLI 并重启 BDS 才能产生记录;外部启动、停止运行或启动记录无法核验时,不冒充当前版本。
  • ip / 地址:只显示 qq_config.json 的公开连接配置,不使用数据库地址或主机名。
  • 绑定:获取验证码后,在游戏内执行 /c:bind,随后发送纯数字验证码。
  • 解绑等需确认的操作:先显示对象与影响,60 秒内本人确认;取消、新命令或超时后失效。确认时重新核验权限,重复确认不重复提交。
  • 管理员在「管理 → 事件推送」中可切换事件总开关、BDS 启停与异常退出、玩家进出和死亡通知(所有事件实时发送);关闭总开关需本人确认。设置写入 configs/qq_config.json 并用于后续推送。
  • 在线名单自动连续分段。官方富文本发送失败时,降级文本保留可直接发送的完整命令。

公开信息配置示例(域名仅为占位,请填写自己的公开地址):

{
  "public_server": {
    "address": "play.example.com",
    "port": 19132,
    "version": ""
  }
}

version 是无法获取实际版本时的备用入服说明,回复会明确标注来源;留空时提示联系管理员。修改后重启 QQ 桥接服务。权限仍由 db-server 最终校验。群主和群管理员默认具有管理权限(configs/qq_link.json 的 treat_group_admins_as_admins,缺省为开,只能改文件);查询失败时隐藏受限入口。

本期不改变入服规则。申请提交、审核通过和 BDS 写入白名单分别提示,不将审核通过视作已生效。下一阶段再完善自助入服进度和玩家数据服务。

本次验证记录(2026-09-23)

  • QQ 桥接、db-server、CLI 与 SDK 类型检查通过;前三个包构建通过,SDK 配置入口与类型产物已更新。
  • 基于构建产物的 73 项本地模拟检查通过:菜单排版与权限、数字会话、确认取消/过期/重复/角色变化、错误拦截、版本与公开地址、120 人名单、UTF-8 分段、官方 Markdown 失败降级、LLBot HTTP 连续发送、旧按钮回调与 BDS 版本记录核验。
  • HTTP/QQ 发送均使用本地模拟服务或替代实现;没有向真实群发送测试消息。临时验证脚本已清理。
  • 尚未部署到运行目录,未重启实际 BDS,真实官方 QQ 与 LLBot 客户端联调待完成。公开地址需要填写 public_server;实际版本需要新版 CLI 捕获一次 BDS 启动日志。