使用说明
el-bot 使用了 mirai-ts。
因此你在编写插件时,可以通过 ctx.mirai.api
的方式直接使用 mirai-ts 的 API 进行编写,同时不需要处理登录、加载插件等问题。
mirai-ts 也提供了许多字符匹配、彩色日志等辅助小工具。
具体例子见下方。
插件主要分这几种类型:
default
: 内置插件../plugins/rss
official
: 官方插件@el-bot/plugin-niubi
community
: 社区插件el-bot-plugin-xxx
(如果您放在个人仓库中并自行发布为 npm 包,请遵循该命名规范)custom
: 自定义插件./xxx/xxx
插件列表
如何编写
我将示范如何新建一个名为 test
的自定义插件。
你也可以使用 typescript 编写你的插件。
新建 plugins/custom
文件夹(其实你也可以随便放,路径写对就行),新建 test.js
文件。
你的文件名将是你的插件名。
或者新建 /plugins/custom/test
文件夹,新建 index.js
文件。(推荐,方便管理单个含有较多内容的插件)
默认传入机器人上下文 ctx。
- ctx 是机器人的实例本身
- 通过
ctx.el.config
获取机器人相关的配置(即你写在配置文件中的配置) - 通过
ctx.mirai
获取 mirai 实例(即 mirai-ts 的实例)
插件默认导出一个函数,你无需操心它的加载问题,只需后续在配置文件中写上该插件的名字,将会自动加载。
test.js
// 使用 JSDoc 可以获取 el-bot 及 mirai-ts 的代码提示
const { default: Bot } = require("el-bot");
/**
* 这里因为后续用到了异步编程关键字 await,如果你用不着,此处无需添加 async 关键字。
* 而应该使用
* module.exports = function(ctx) {
* @param {Bot} ctx
*/
module.exports = async function (ctx) {
const mirai = ctx.mirai;
// 对收到的消息进行处理
// message 本质相当于同时绑定了 FriendMessage GroupMessage TempMessage
// 你也可以单独对某一类消息进行监听
mirai.on("message", (msg) => {
console.log("on message");
console.log(msg);
});
// 调用 mirai-ts 封装的 mirai-api-http 发送指令
console.log("send command help");
const data = await mirai.api.command.send("help", []);
console.log("帮助信息:" + data);
// 处理各种事件类型
// 事件订阅说明(名称均与 mirai-api-http 中时间名一致)
// https://github.com/RedBeanN/node-mirai/blob/master/event.md
console.log("on other event");
// https://github.com/project-mirai/mirai-api-http/blob/master/EventType.md#群消息撤回
mirai.on("GroupRecallEvent", ({ operator }) => {
const text = `${operator.memberName} 撤回了一条消息,并拜托你不要再发色图了。`;
console.log(text);
mirai.api.sendGroupMessage(text, operator.group.id);
});
};
test.ts
export default function (ctx) {
const mirai = ctx.mirai;
mirai.on("message", (msg) => {
console.log("on message");
console.log(msg);
});
}
辅助函数
isListening(sender, listen)
: 传入 配置讲解 处listen
的格式,可以快速判断是否在监听。sendMessageByConfig(messageChain, target)
: 传入 配置讲解处target
的格式,可以快速发送给多个指定对象。
const canForward = ctx.status.isListening(msg.sender, item.listen);
if (canForward) {
ctx.sender.sendMessageByConfig(msg.messageChain, item.target);
}
插件信息
标准的插件格式请参照 el-bot-plugins 说明。(如果你只是自行使用,大可无视。)
如果你想将插件提交到 官方插件 中,package.json
与 README.md
是必不可少的。 这更方便别人知道如何使用它。
package.json
el-bot.db
设置为 true
,代表需要依赖数据库。
{
"name": "blacklist",
"private": "true",
"version": "0.0.1",
"description": "黑名单",
"el-bot": {
"db": true
},
"author": {
"name": "YunYouJun",
"url": "https://www.yunyoujun.cn",
"email": "me@yunyoujun.cn"
}
}
加载插件
通过配置加载
编写完,你还需要在你的自定义配置文件 el/index.yml
中加载它。
记得重启。
plugins:
# default:
# - answer
# - cli
# - forward
# - rss
custom:
- test
mirai-ts 实现了一个事件队列,对应的监听事件将会推入对应事件的列表,并在收到对应类型的消息时执行。
自定义插件将会在默认插件之后进入事件队列,
任何插件的加载顺序取决于你的配置顺序。
自行加载
你也可以在你的代码中自行加载它,此时它将不会出现在插件列表中。
import { Bot } from "el-bot";
const bot = new Bot();
bot.use(yourPlugin);
// yourPlugin 应当是一个默认导出的函数或带有 "install" 属性的对象
如果你希望它出现在插件列表中,你可以使用 bot.plugin(name: string, plugin: Plugin, ...options: any[])
来注册它。
bot.plugin("奇怪的插件", fn, options);
默认插件
即随 el-bot 默认加载的插件列表。
你可以覆盖 plugins.default
来只加载你想加载的默认插件。
官方插件
el-bot-plugins 是 el-bot 的官方插件集中地,它提供了许多有趣的插件。
该部分插件将由我们进行审核,并统一发布至 npm 中 @el-bot
的命名空间下。(如:@el-bot/plugin-niubi
)
插件的使用方式,见各插件的 README.md
。
同时也欢迎你为其提交插件,来给更多人使用。
譬如加载 niubi
插件:
npm install @el-bot/plugin-niubi
# yarn add @el-bot/plugin-niubi
plugins:
official:
- niubi
社区插件
社区插件即您自行编写并发布的插件。
如果您希望被更多人检索到,请遵循 el-bot-plugin-xxx
的命名规范。
npm install el-bot-plugin-xxx
自定义插件
自定义插件即您自行编写,且暂不打算发布的插件。
引入方式是您相对主目录的相对路径。
plugins:
custom:
- ./xxx/yyy