[card]huntersxy/astrbot_plugin_qcm[/card]
最近折腾出了一个轻量小插件——astrbot-plugin-qcm,全称是 AstrBot QQ Connect Minecraft,核心功能只有一个:实现QQ群与我的世界(Minecraft)服务器之间,双向聊天消息的实时互通。

写这个插件的初衷特别纯粹。我自己运营着一个MC服务器,一直有个非常刚需的痛点:游戏内和QQ群的消息完全是割裂的。玩家要么在游戏里肝进度,要么在QQ群里水聊,群里喊人开黑,游戏里的人看不到;游戏里发生的趣事、组队需求,群里潜水的朋友也接不上话,体验特别割裂。

本来想着找个现成的插件直接用,结果翻遍了AstrBot的插件市场,又找了全网的相关工具,发现市面上的群服互联方案,大多适配的是其他机器人框架,专门给AstrBot做的群服互联插件,我愣是一个都没找到。既然找不到合适的轮子,那就干脆自己动手,vibe一个出来。

开发路上的小坑与小惊喜

整个开发过程其实还算顺畅,没有遇到什么啃不动的技术难点,大多是边写边调,遇到问题就解决问题。不过还是有几个印象很深的细节,也是个人开发里最有实感的部分。

第一个s,是异步操作的坑。最开始写通信逻辑的时候没太注意,用了同步的网络请求,结果测试的时候直接踩了大雷:消息转发的时候,会直接导致MC服务器卡顿,甚至出现短暂的主线程阻塞。毕竟MC服务端的核心逻辑是单线程的,同步网络IO会直接占用主线程资源,不卡才怪。后来把所有的网络请求、消息监听逻辑全部换成了异步实现,基于aiohttp做HTTP通信,才彻底解决了卡顿问题,最终的转发延迟极低,游戏内完全感知不到。

第二个:原来在MC的服务端mod里,能直接跑一个完整的HTTP服务器。最开始设计双向通信的时候,还以为要做很复杂的跨进程通信方案,结果尝试之后发现,直接在mod里起一个轻量HTTP服务,监听指定端口的请求,就能顺畅地接收QQ端转发的消息,同时把游戏内的聊天消息POST出去,实现起来比我预想的简单太多,当时还挺惊喜的——原来MC的mod能做这么多超出游戏本身的事。

第三个差点把我搞懵的,是进程卡死的bug。第一版写完测试的时候,发现一个很离谱的问题:关闭MC服务器的时候,进程居然卡着退不出去,甚至还能正常收到QQ端发过来的消息。排查了半天才定位到问题:HTTP服务器没有在游戏关闭的时候正确销毁,端口还被占用,事件循环也没有正常关闭,直接把进程锁死了。后来我加了游戏生命周期的监听逻辑,在服务器关闭的回调里,手动停止HTTP服务、释放端口、关闭事件循环,才彻底解决了这个卡死的问题。

关于插件的优势,和一些小遗憾

很多朋友可能会问,这个插件和市面上其他的群服互联工具比,有什么核心优势?说实话,我自己觉得,它没有什么特别亮眼的、颠覆性的优势。它唯一的核心价值,就是填补了AstrBot生态里,群服互联插件的空白。

对于已经在用AstrBot搭建QQ机器人的MC服主来说,不用再额外部署一套其他的机器人框架,不用做复杂的环境适配,直接在AstrBot插件市场安装,简单几步配置就能用,足够轻量化,也足够开箱即用,这就是它最大的意义。

当然,它也有很多不足。毕竟是为了解决自己的刚需,快速迭代出来的插件,代码和安全设计上,肯定没有专业工具那么完善,甚至还有一些我自己都知道的隐藏安全问题,这也是它没能通过AstrBot官方安全审核的原因。这里也和大家提前说明,如果要在生产环境的服务器里使用,一定要做好网络隔离、强密钥管理,尽量不要把服务端口直接暴露在公网。

简单的使用指引

如果有和我有同样需求的MC服主,想要试试这个插件,可以直接去我的GitHub仓库查看完整的部署文档,仓库地址:https://github.com/huntersxy/astrbot_plugin_qcm

这里也给大家梳理一下核心的部署步骤,全程不用写代码,跟着配置就能用:

  1. AstrBot端配置:在AstrBot插件市场安装qcm插件,在需要接收推送的群聊里发送/get_umo获取会话ID,在插件管理面板,配置好目标MC服务器URL、目标群号、会话ID、AES密钥、服务端口等核心参数
  2. MC端配置:将仓库里配套的mod文件放入MC服务端的mods文件夹,启动一次服务器,会自动生成配置文件;编辑配置文件,填写AstrBot端的通信地址,保持AES密钥、消息前缀和AstrBot端完全一致,重启服务器即可
  3. 配对测试:分别在QQ群和MC游戏内发送一条测试消息,确认两边都能正常收到,就完成了全部部署

最后想说的话

至于这个插件后续的更新规划,说实话,我目前还没有特别明确的想法。现在的1.0.0版本,已经实现了我最核心的需求——QQ群和MC服务器的双向消息互通,自己日常用起来已经完全够用了。

如果后续大家试用的时候,有新的功能需求,或者发现了bug,欢迎去GitHub仓库提issue或者PR,我会尽量抽时间维护。当然,如果有大佬愿意帮忙优化安全问题、完善功能,那就再好不过了。

其实做这个插件的整个过程,最开心的不是写完了多少行代码,而是自己遇到的一个刚需问题,从找不到解决方案,到自己动手把它实现出来,还能分享给有同样需求的人。这大概就是开源的乐趣吧,哪怕它只是一个很小、很简单的插件,也能给别人带来一点点便利。

最后,感谢AstrBot项目提供的完善的插件开发框架,也感谢愿意试用这个插件的每一位朋友。

最后修改:2026 年 04 月 05 日
如果觉得我的文章对你有用,请随意赞赏