使用Node.js制作关于Napcat的Minecraft小插件(HTTP篇)

使用Node.js制作关于Napcat的Minecraft小插件(HTTP篇)

温馨提示:本篇文章更偏向小白,是我个人的探索经历,不喜勿喷~

简介:LeviLamina为轻量级、多语言支持的基岩版BDS插件加载器,提供全面API和事件系统

一.起因

NapCat 是一个专门用来快速搭建网络通信服务的“工具箱”

在我刚刚接触到Napcat的时候就被它的优点吸引,它有以下几个优点

  • 高性能–不依赖框架加载,不依赖 Electron,内存占用低至 50~100 MB
  • 多平台–得益于优秀的适配,可以快捷部署于 Windows/Linux/MacOS 等主流 x64 架构平台(甚至是手机Android也可以!)
  • 不易坏–虽然之前也有很多机器人框架,但在官方的封杀下也变得越来越少,且机器人更容易被封。

用Napcat,开发者不用从零造轮子,直接用它就能快速做出稳定的聊天软件、游戏联机服务等需要实时通信的应用,更方便

综上所述~我决定用Node.js写一个小插件,装载在我的Minecraft服务器上

二.设想

那么,这个小插件应该具有什么样的功能呢?

首先,如果不考虑与群友们交互,那不就是进/退服通知,以及服务器内消息转发莫?(绝对不是因为我不会写_(•̀ω•́ 」∠)_)

其次,考虑交互,那可以让QQ群与服务器内的经济系统实现联动,完全有助于提高群友们的活跃度以及新鲜感嘛~(虽然本篇不写交互,交互应该在下篇?)

所以我决定先写进/退服通知

三.开始

先简单创建一个Node.js项目,具体教程可以看一下上一篇文章噢!

什么?你还不会使用Node.js创建项目!(以ubuntu的安装使用为例)

到这里我们就要做选择了–是用http的请求方式,还是直接用websocket连接呢?

我选择http,因为进/退服通知不直接不涉及交互,这里使用引入axios库方便使用。

安装axios

npm install axios

经过简单的试验,我们能知道请求到接口的URL分为以下几部分

  • 1.基础URL部分(比如http://example:12345)
  • 2.接口路径部分(比如/send_private_msg)
  • 3.认证参数部分(access_token=你的http请求token)

融合一下就是http://example:12345/send_private_msg?access_token=你的http请求token

另外查看官方提供的示例可以知道一个接口请求时都要带什么参数

20250715070155829-1000262217

然后把user_id和消息内容用axios的方法请求,就有了一个简单的示例

const axios = require('axios');

const msg = { 
  type: "text", 
  data: { 
    text: "你好" 
  } 
};

axios.post('http://example:12345/send_private_msg?access_token=你的http请求token', {
  user_id: 发送对象的qq号,
  message: msg
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error('请求失败:', error.response ? error.response.data : error.message);
});

运行这个文件试一下,如果配置正确就能在QQ里面看到消息了awa

接着查看我所用的服务端模组加载器LeviLamina的文档

20250715080249746-1000262222

结合以上监听事件,咱们直接看写完的示例

const axios = require('axios');

function sendNotification(pl, hint) {
  const msg = { 
    type: "text", 
    data: { 
      text: `${pl.name} ${hint}`
    } 
  };

  axios.post('http://example:12345/send_private_msg?access_token=你的http请求token', {
    user_id: 发送对象的qq号,
    message: msg
  })
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error('请求失败:', error.response ? error.response.data : error.message);
  });
}

mc.listen("onJoin", (pl) => {
  const hint = "进入了服务器!";
  sendNotification(pl, hint);
});

mc.listen("onLeft", (pl) => {
  const hint = "离开了服务器!";
  sendNotification(pl, hint);
});

四.注意

1.如果机器人的请求接口的端口默认是80,在URL中可以不加端口

2.如果没有设置token可以直接用http://example:12345/send_private_msg,不需要认证参数(虽然我还是比较推荐设置token的)

3.并不是一定要用LeviLamina,你可以在其它支持用Node.js写插件的minecraft服务端按照文档也可以写

4.你也可以按照Napcat的官方文档更改接口路径部分和请求参数,视情况和需求而定

© 版权声明
THE END
喜欢就支持一下吧
点赞2 分享
评论 共1条

请登录后发表评论

    暂无评论内容