插件进阶(旧) Deprecated
危险
当前页面下的内容已过时。请参考 更新指导 了解如何升级。
本页面将会带你开发 Cocotais Bot 的进阶插件。
要想在最佳条件下开始学习,请先阅读 插件开发。
1. 什么是插件?
插件是 Cocotais Bot 的核心,可以让你的机器人更加强大。一个插件不仅可以负责处理消息、管理群组,还可以对插件事件进行控制等。这是一个示例:
js
import { IOpenAPI } from "qq-bot-sdk";
import { CocotaisBotPlugin } from "./plugin";
import { EventEmitter } from "events";
export default {
config: {
name: "time-set",
version: "1.0.0"
},
enableBot(_context, _ws, _botId) {
CocotaisBotPlugin.prototype.emit('TIME', {
eventType: "TIME",
eventId: "",
msg: {
value: Date.now()
}
});
},
disableBot() {
// ...
},
};
js
import { CocotaisBotPlugin } from "./plugin";
const plugin = new CocotaisBotPlugin("time-get", "1.0.0");
plugin.onMounted((_) => {
plugin.on('TIME', (arg) => {
console.log(arg.msg.value);
});
});
export default plugin;
在机器人以 --no-autoload
模式启动后,运行以下代码:
bash
npx cocotais-bot plugin apply ./plugins/plugin_B.js
npx cocotais-bot plugin apply ./plugins/plugin_A.js
在PM2日志中,可以看到一个时间戳输出:
1708390975998
在以上示例中,plugin_A.js 通过操作 CocotaisBotPlugin.prototype.emit
方法,触发了 plugin_B.js 中的 TIME
事件。
2. onMounted 与 onUnloaded
在插件开发中,你可以使用 onMounted 和 onUnloaded 方法来监听插件的初始化和卸载。
js
import { CocotaisBotPlugin } from "./plugin";
const plugin = new CocotaisBotPlugin("my-plugin", "1.0.0");
plugin.onMounted((_) => {
console.log("Hi!");
});
plugin.onUnloaded(() => {
console.log("Bye!");
});
export default plugin;
这是两个方法的类型定义:
ts
onMounted(fun: (bot: IOpenAPI) => void) : void
onUnloaded(fun: () => void) : void
可以看到,onMounted 里的函数有一个参数:bot,这是一个 IOpenAPI
的实例,包含机器人的各种方法。插件需要这些方法以操作机器人。而 onUnloaded 里的函数则没有参数。
3. 插件指令
危险
插件指令在 v1.3.0
被首次引入,但直到 v1.4.0-3
才被完全实现。如你的机器人版本< v1.4.0-3
,请继续使用 plugin.on
方法。
警告
目前插件指令仅在群聊与文字子频道中工作良好,请不要在私聊场景中使用。
在插件开发中,你可以使用插件指令来控制插件的行为。它的定义如下:
ts
command = {
/**
* 机器人ID
* @type number
*/
id: -1,
/**
* 注册一个命令
* @param match 命令匹配器
* @param desc 命令描述
* @param fun 命令执行器
* @returns 命令ID
*/
register(match: string, desc: string, fun: (msgs: string[], event: WsResponse<any>) => void) : number
/**
* 卸载一个命令
* @param id 命令ID
*/
unregister(id: number) : void
}
使用示例:
js
import { CocotaisBotPlugin } from "./plugin";
const plugin = new CocotaisBotPlugin("command-plugin", "1.0.0");
plugin.onMounted((_) => {
plugin.command.register("/test", "测试指令", (msgs, event) => {
console.log(msgs[1]);
});
});
export default plugin;
在插件装载后,在群/文字子频道中对机器人发送这个消息:
@机器人 /test hello
查看PM2日志,发现了输出:
hello