mclistener-ws-client🌐群服互通——WebSocket 客户端插件,用于对接 MC、CS等游戏的 WebSocket 服务端插件,实现 Minecraft 服务器与聊天平台之间的双向消息转发和可配置通知。

koishi-plugin-mclistener-ws-client

koishi-plugin-mclistener-ws-client

:globe_with_meridians: Minecraft 群服互通 WebSocket 客户端:对接 MCDR 插件,实现双向消息转发、玩家进出通知、消息过滤等功能。

:bulb: 技术说明:本插件声明 reusable,支持在 Koishi 中配置多个插件实例对接多个游戏服务器。本插件依赖 Koishi 的 http 服务(通常由 @koishijs/plugin-http 提供),该服务也为 WebSocket 连接提供底层支持。

npm
npm-download

GitHub
Gitee

QQ群

💬 插件使用问题 / 🐛 Bug反馈 / 👨‍💻 插件开发交流,欢迎加入QQ群:259248174 🎉(这个群G了

💬 插件使用问题 / 🐛 Bug反馈 / 👨‍💻 插件开发交流,欢迎加入QQ群:1085190201 🎉

💡 在群里直接艾特我,回复的更快哦~ ✨


:open_book: 简介

还在手动看 Minecraft 服务器后台?还在纠结群里发的消息怎么同步到游戏里?

mclistener-ws-client 是一个 Koishi 插件,通过 WebSocket 与你的 Minecraft 服务端双向通信,实现 群服互通 —— 不止于文字!:tada:

:speech_balloon: 玩家进服/离服自动播报,聊天消息实时同步,还支持白名单/黑名单过滤、自定义消息模板等酷炫功能。

根据你的服务端类型,选择对应的服务端插件:

想要了解各种 Minecraft 服务端发行版,可以参考 github.com/mouse0w0/MinecraftDeveloperGuide

游戏名 安装插件服务端加载器 服务端插件下载地址
:large_blue_circle:Java版MC 适用于绝大多数主流 Java MC 服务端 · MCDReforged Minecraft Java Edition mcdr_listener_ws_server
:green_circle:基岩版MC 适用于 LeviLamina BDS服务端 · LeviLamina BDS Minecraft Bedrock Edition levilamina-plugin-mclistener-ws-server
:orange_circle:CS2 适用于 CounterStrikeSharp CS2 服务端 · CounterCtrikeSharp Dedicated Server Counter Strike 2: Global Offensive CounterStrikeSharpListenerWsServer

支持功能对比:

服务端 服务器玩家进出->聊天平台 文字消息双向转发 聊天平台图片->服务器 远程指令执行
:large_blue_circle: MCDReforged (Java) :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
:green_circle: LeviLamina (Bedrock) :white_check_mark: :white_check_mark: :x: :white_check_mark:
:orange_circle: CounterStrikeSharp (CS2) :white_check_mark: :white_check_mark: :x: :white_check_mark:

:rocket: 3 分钟快速上手

Step 1: 配置服务端(MCDR / LeviLamina / CS2)

选择对应的服务端插件安装,最简配置大同小异:配置 porttoken 即可。更多配置项详见对应服务端插件 README:

Step 2: 配置客户端(本Koishi插件)

  1. 在 Koishi 插件市场 或者 使用 npm/yarn 安装 mclistener-ws-client

  2. 配置 wsServerUrl 指向服务端 WebSocket 地址(默认 ws://127.0.0.1:60601

  3. 配置 wsToken 与服务端 ws_token 一致

  4. 配置 sourcePlatformListtargetPlatformChannelList 为你的群/频道

Step 3: 验证互通

  • 在群里发消息 → 检查游戏内是否收到

  • 在游戏里说话 → 检查群里是否收到

:bulb: 图片渲染功能 (MCDReforged only) 和 远程命令执行功能(MCDReforged and CounterStrikeSharp only) 需要额外配置 RCON,见下方 前置条件
:thinking: 什么是 RCON?
RCON(Remote Console)是一种基于 TCP 的远程服务器管理协议,允许客户端向游戏服务器发送命令并接收结果。本插件利用 RCON 实现图片渲染和远程指令执行功能。

Minecraft Java 版原生支持 RCON。

CS2 也可通过 Source RCON 协议启用。

了解更多 :point_right:


:camera_flash: 效果预览

:large_blue_circle: Java 版 · MCDReforged

→ MC 服务器 → 聊天平台

  • 玩家在服里说话、进出事件自动同步到聊天平台
QQ(OneBot v11):

图片

→ 聊天平台 → MC 服务器

  • 群里发的图文消息自动转发到游戏内
QQ(OneBot v11):

Discord:

→ 聊天平台远程执行命令

  • 通过 Koishi 指令远程执行 MC 服务器命令,结果回传到聊天平台
QQ(OneBot v11):


:green_circle: 基岩版 · LeviLamina

→ MC 服务器 → 聊天平台

  • 玩家在服里说话、进出事件自动同步到聊天平台
QQ(OneBot v11):

图片

→ 聊天平台 → MC 服务器

  • 群里发的图文消息自动转发到游戏内
QQ(OneBot v11):

Discord:

→ 聊天平台远程执行命令

  • 通过 Koishi 指令远程执行 MC 服务器命令,结果回传到聊天平台
QQ(OneBot v11):


:orange_circle: CS2 · CounterStrikeSharp

→ CS 服务器 → 聊天平台

  • 玩家在服里说话、进出事件自动同步到聊天平台

→ 聊天平台 → CS 服务器

  • 群里发的消息自动转发到游戏内
QQ(OneBot v11):

→ CS 服务器 → 聊天平台

  • 服务器消息同步到聊天平台
QQ(OneBot v11):

图片

→ 聊天平台远程执行命令

  • 通过 Koishi 指令远程执行 CS 服务器命令,结果回传到聊天平台
QQ(OneBot v11):


:warning: 前置条件:启用 RCON(服务端侧)

以下核心功能必须启用 RCON 才能使用:

  • :framed_picture: 游戏内展示外部图片!!view_image 命令 + 图片消息渲染)

  • :desktop_computer: 远程命令执行(从聊天平台执行服务器命令并返回结果)

如果你只需要基础的文字消息转发和进出服通知,可以跳过此步骤。

:green_circle: MCDR(Minecraft Java 版)

详见服务端 MCDR 插件文档:RCON 配置步骤

:orange_circle: CounterStrikeSharp(CS2/CSGO)

详见服务端 CSS 插件文档:RCON 配置步骤


:sparkles: 功能

:globe_with_meridians: WebSocket 连接

  • 作为 WebSocket 客户端连接 MCDR 端的 WebSocket 服务

  • 支持自动重连,连接/断开事件可通知到指定用户/频道/控制台

:outbox_tray: 群服双向消息转发

MC 服务器 → 聊天平台

  • 玩家在mc服里说话、玩家进出mc服务器事件 自动同步到聊天平台

聊天平台 → MC 服务器

  • 群里发的图文消息自动转发到游戏内

支持多平台多频道(QQ、Kook、Discord、Telegram 等,理论上 koishi支持的大部分主流聊天平台都能用)

:door: 玩家进出通知

  • 玩家加入服务器时,自动在群里发送欢迎消息 :tada:

  • 玩家离开服务器时,自动在群里发送告别消息 :cry:

  • 支持自定义消息模板,使用 %PLAYER% 占位符

:speech_balloon: 消息过滤

过滤方式 说明
:white_check_mark: 白名单前缀 只转发指定前缀开头的消息(如 !!
:x: 黑名单前缀 阻止转发指定前缀的消息(如 / 命令)
:no_entry_sign: 发送者黑名单 阻止转发指定玩家的消息(如 Server
:mag: 平台消息前缀检查 只转发群里指定前缀的消息到服务器(如 #

:pencil2: 自定义消息模板

  • 玩家加入/离开消息模板自由定制

  • 聊天消息转发格式自由定制

  • 支持 %PLAYER%(玩家名)、%CONTENT%(聊天内容)占位符

:clock1: 日期时间前缀

  • 转发到聊天平台时可自动添加日期时间前缀,方便查看消息时间

:bug: 调试日志

  • 可选详细控制台输出,方便排查连接和转发问题

:package: 安装

在 Koishi 插件市场搜索 mclistener-ws-client 即可安装。

或使用 npm / yarn:

cd /path/to/koishi-app
# 确保能看到 koishi.yml, package.json, data文件夹等等
ls
# 使用npm 安装
npm install koishi-plugin-mclistener-ws-client
# 或者使用yarn
yarn add koishi-plugin-mclistener-ws-client

:gear: 配置

最小可用配置示例

建议去Koishi Webui配置,而不是直接修改yaml文件


wsServerUrl: ws://你的服务器IP:60601

wsToken: 你的Token

sourcePlatformList:

- platform: onebot

channelId: 你的QQ群号

enable: true

targetPlatformChannelList:

- platform: onebot

channelId: 你的QQ群号

enable: true

:speech_balloon: 消息设置

配置项 默认值 说明
enableQuote true :speech_balloon: 启用回复引用,指令回复自动带引用 :link:

:globe_with_meridians: WebSocket 连接配置

配置项 默认值 说明
wsServerUrl ws://127.0.0.1:60601 :link: WebSocket 服务器地址
wsToken test12345 :key: WebSocket 连接 Token(空=不校验):warning: 建议修改默认值

:electric_plug: 连接行为:断开后固定 5 秒自动重连。Token 通过 WebSocket URL 的 query 参数 ?token=xxx 传递。

:bar_chart: 报告配置

配置项 默认值 说明
enablePrivateReport false :envelope_with_arrow: 启用私聊报告 :incoming_envelope:
privateReportUserIdList [] :bust_in_silhouette: 私聊报告用户列表(平台 + 用户ID):busts_in_silhouette:
enableChannelReport false :loudspeaker: 启用频道报告 :mega:
reportChannelList [] :clipboard: 报告频道列表 :round_pushpin:
enableConsoleLogReport true :desktop_computer: 启用控制台日志报告 :memo:

:outbox_tray: 转发目的地配置(服务器 → 聊天平台)

配置项 默认值 说明
enableAddDateTimePrefix true :date: 转发时添加日期时间前缀 :clock1:
targetPlatformChannelList [{onebot, 1085190201}] :dart: 目标平台频道列表(默认转发到 onebot 群的 1085190201) :outbox_tray:

:inbox_tray: 来源平台配置(聊天平台 → 服务器)

配置项 默认值 说明
stripMessageWhitespace true :broom: 清理消息中的换行和制表符,将 \n \r \t 替换为空格,压缩连续空格,避免游戏内消息断裂 :scissors:
sourcePlatformList [{onebot, 1085190201}] :inbox_tray: 来源平台频道列表(默认监听 onebot 群 1085190201) :ear:

:information_source: 当前转发到服务端的 group_name 填入的是平台标识(如 onebotdiscord),并非真实群名/频道名。真实来源 ID 在 group_id 字段。
:bulb: 条目独立开关:配置列表(如 sourcePlatformListtargetPlatformChannelList)中的每个条目都有独立的 enable 开关,可精细控制哪些频道参与转发。

:door: 玩家加入消息转发

配置项 默认值 说明
enableForwardPlayerJoin true :white_check_mark: 启用转发玩家加入消息 :door:
customizePlayerJoinMsg 🎉🎉🎉 %PLAYER% 进入了 神秘小服服 !!✨✨✨ :pencil2: 自定义加入消息模板 :art:

:walking_man: 玩家离开消息转发

配置项 默认值 说明
enableForwardPlayerLeave true :white_check_mark: 启用转发玩家离开消息 :walking_man:
customizePlayerLeaveMsg 😢😢😢 %PLAYER% 暂时离开 神秘小服服 啦~ 呜——👋👋👋 :pencil2: 自定义离开消息模板 :art:

:speech_balloon: 玩家聊天消息转发

配置项 默认值 说明
enableForwardPlayerChat true :white_check_mark: 启用转发玩家聊天消息 :speech_balloon:
customizePlayerChatMsg 🔈🔈🔈%PLAYER%在神秘小服服说: %CONTENT% :pencil2: 自定义聊天消息模板 :art:
enableFowardMsgPrefixWhitelistCheck false :white_check_mark: 启用白名单前缀检查 :white_large_square:
fowardMsgPrefixWhitelistList ['#'] :memo: 白名单前缀列表 :white_large_square:
enableForwardMsgPrefixBlacklistCheck true :white_check_mark: 启用黑名单前缀检查 :black_large_square:
fowardMsgPrefixBlacklistList ['/', '!!'] :memo: 黑名单前缀列表 :black_large_square:
enableSenderBlacklistCheck false :white_check_mark: 启用发送者黑名单检查 :no_entry_sign:
senderBlacklistList ['Server'] :memo: 发送者黑名单列表 :no_entry_sign:

:arrows_counterclockwise: 平台消息转发到服务器

配置项 默认值 说明
enableFowardPlatformChat true :white_check_mark: 启用转发平台消息到服务器 :outbox_tray:
platformChatPrefixCheck false :white_check_mark: 启用平台消息前缀检查 :mag:
platformChatPrefixList ['#'] :memo: 平台消息前缀列表 :mag:
excludeBotMessages true :robot: 排除机器人自己发送的消息 :warning: 判定逻辑包含昵称子串匹配:昵称中包含 bot机器人 的用户也会被排除,如有误杀请关闭此选项 :no_entry_sign:

:warning: 富文本支持范围: 当前仅处理文本、@提及(转为 <at @userId>)、图片(转为 <img:N> + images 数组)。其他平台特有消息元素(如表情、卡片、文件等)会退化为 <元素类型> 占位文本。

:closed_lock_with_key: 远程命令执行配置

配置项 默认值 说明
enableExecCommand false :closed_lock_with_key: 启用远程命令执行能力 :desktop_computer:
execCommandName mcws.exec :name_badge: Koishi 指令名 :keyboard:
enableExecCommandWhitelist true :white_check_mark: 启用用户白名单 :bust_in_silhouette:
execCommandAdminUserIdList [{onebot, 1830540513}] :bust_in_silhouette: 允许执行命令的用户白名单(默认管理员 onebot 的 1830540513):busts_in_silhouette:
execCommandTimeoutMs 10000 :stopwatch: 命令执行超时时间(毫秒):hourglass:
execCommandMaxReplyLength 1500 :straight_ruler: 回复最大字符数 :scissors:
noDeduplicate false :arrows_counterclockwise: 指令执行结果不去重,每条 command_result 立即返回。可用于调试,配合 CSS 服务端插件的 execCommandMode:both 查看双路径执行情况 :bug:

:desktop_computer: 命令

指令名默认值: mcws.exec <cmd>

在 MC/CS 服务器上远程执行命令,结果回传到聊天平台。

  • 默认指令名: mcws.exec(可通过 execCommandName 配置修改)

  • 使用示例: mcws.exec list

  • 权限控制: 默认仅白名单用户可执行(enableExecCommandWhitelist),白名单通过 execCommandAdminUserIdList 配置

  • 前置条件:

  • 客户端: enableExecCommand 设为 true

  • 服务端: enable_remote_exec_command 设为 true

  • 服务端: RCON 已启用(见 RCON 配置

  • 输出: 超过 execCommandMaxReplyLength(默认 1500 字符)的结果会被截断


:bug: 调试配置

配置项 默认值 说明
verboseConsoleOutput false 启用详细控制台调试输出

:bug: verboseConsoleOutput 调试日志输出项

开启 verboseConsoleOutput 后,插件会在控制台输出以下调试信息:

:electric_plug: WebSocket 连接生命周期

  • 创建 / 销毁 WS 客户端实例
  • 连接状态变化(连接中、已连接、已关闭、具体错误原因)
  • 收到 / 发送的原始 WS 消息内容
  • 重连定时器的设置、取消、跳过原因

:outbox_tray: 消息处理与转发

  • 解析到的服务器消息类型、玩家名、消息内容
  • 准备发送到频道的消息
  • 跳过未启用的目标频道原因
  • 消息被白名单 / 黑名单 / 发送者黑名单拦截的详情

:speech_balloon: 平台消息中间件

  • 中间件收到的消息内容与来源(platform / channelId / userId)
  • 自动排除机器人消息的判断过程
  • 来源平台 / 频道匹配结果
  • 前缀检查结果与是否跳过转发

:gear: 插件初始化与生命周期

  • 插件初始化时的完整配置 dump
  • ready / dispose 事件触发时序
  • 中间件注册与清理过程

:warning: 一些已知踩坑

  • 图片域名白名单: 图片 URL 的域名必须在MCDR服务端 image_host_whitelist 中,否则不会下载/渲染
  • 全服冷却: MCDR服务端的!!view_image指令 有全服共享冷却(默认 5.5 秒),冷却期间其他玩家无法使用
  • 富文本降级: 非文本消息元素(表情、卡片、文件等)会退化为 <元素类型> 占位文本,无法保留原样式
  • 远程命令需双边开启: 需要同时开启客户端 enableExecCommand 和服务端 enable_remote_exec_command
  • 编码问题: 在Windows 下 MCDR服务端 建议将 encoding 设为 GBK,避免 emoji 编码问题; 在Linux下可以 encoding和decoding 可以全部用utf-8
1 个赞

架构看下来也很明确了,MC or CS 等游戏服务端那边 开ws服务端,然后koishi插件做ws客户端去连。 因为都已经开游戏服务器了,肯定默认服务器那边是有公网ip的。

不过感觉后面可以考虑要不要做反向ws​:thinking:

1 个赞

QQ_1783088403562

QQ_1783088400338

QQ_1783088340472

0.6.4 新增了官bot的支持哈,现在官bot的主动开了,灰度结束了,bot头像点击去右上角ui就有主动消息,也可以使用这个开主动 GitHub - VincentZyuApps/koishi-plugin-get-qq-bot-transfer-link: 利用NapCat获取官bot的uid,然后获取本群的 开放官bot的全量和主动的配置链接,然后群主用手机qq打开就可以配置了 · GitHub

1 个赞

图片太多了,上面帖子的 图片就不更新了,github和gitee的仓库后面会更新官bot使用的示例图捏

1 个赞