本指南将帮助你为云深Bot开发插件。
每个插件都应该是单独的TypeScript或JavaScript文件,并遵循以下规范:
- 实现
Plugin接口(继承自BotModule) - 导出一个默认的插件实例
- 文件名建议使用
.plugin.ts或.plugin.js作为后缀
基本的插件模板:
import { Bot } from 'mineflayer';
import { Plugin } from '../src/plugins/PluginManager';
import logger from '../src/utils/logger';
export class MyPlugin implements Plugin {
// 插件名称(必须唯一)
name = 'myPlugin';
// 插件描述
description = '我的第一个插件';
// 是否默认启用
enabled = true;
private bot: Bot | null = null;
// 初始化插件(只会调用一次)
init(bot: Bot): void {
this.bot = bot;
logger.info('我的插件已初始化');
}
// 启用插件
onEnable(bot: Bot): void {
this.bot = bot;
// 在这里注册事件监听器或其他功能
this.bot.on('chat', (username, message) => {
if (username === this.bot?.username) return;
if (message === '!hello') {
this.bot.chat(`你好,${username}!`);
}
});
logger.info('我的插件已启用');
}
// 禁用插件
onDisable(bot: Bot): void {
// 在这里清理资源,比如移除事件监听器
logger.info('我的插件已禁用');
}
// 额外的插件方法...
}
// 导出插件实例
export default new MyPlugin();- 将插件文件放置在
plugins目录中 - 在
src/config/plugins.config.ts中配置是否启用插件:
const pluginsConfig: PluginsConfig = {
// 其他插件...
myPlugin: true, // 启用插件
};- 重新构建并运行机器人
-
命名规范:
- 插件名称使用 camelCase 格式
- 文件名使用
.plugin.ts后缀
-
配置选项:
- 可以使用
config.plugins访问插件的启用状态 - 如需额外配置选项,可以扩展配置文件结构
- 可以使用
-
事件处理:
- 在
onEnable中注册事件监听器 - 在
onDisable中移除事件监听器
- 在
-
错误处理:
- 始终使用 try/catch 处理可能的错误
- 使用 logger 记录错误信息
-
资源管理:
- 在
onDisable中释放所有资源(如文件句柄、定时器等)
- 在
插件可以通过以下方式与其他插件交互:
- 全局事件:使用 Bot 的事件系统
- 直接引用:直接导入其他插件的实例
- 共享状态:使用共享的数据结构
请参考 src/plugins 目录中的示例插件:
autoResponder.plugin.ts- 自动回复插件pathfinder.plugin.ts- 寻路导航插件chatLogger.plugin.ts- 聊天记录插件
- 设置日志级别为
debug:在botConfig.ts中将logging.level设为"debug" - 使用
logger.debug输出调试信息 - 使用
npm run dev以开发模式运行机器人