Yunzai-Bot插件编写教学
前言
- 需要node.js基础,需要会使用redis数据库,
- 推荐使用VScode编写☞下载
单个的js格式插件(example)
- oicq文档
- 先新建一个文件,命名为Helloworld.js
- 命名可以改的,最好别用中文,改命名时要记得把下面的类名改了(大小写得一样)
输出Hello,world!
- 代码示例
//引入Yunzai插件功能 import plugin from '../../../../../lib/plugins/plugin.js' //导出 类 类名===文件名 继承 插件类 export class Helloworld extends plugin { constructor() { super({ //后端信息 name: 'Helloworld',//插件名字,可以随便写 dsc: 'Helloworld',//插件介绍,可以随便写 event: 'message',//这个直接复制即可,别乱改 priority: 250,//执行优先级:数值越低越6 rule: [ { //正则表达试 reg: '^#你好$', //函数 fnc: 'Helloworld' } ] }); }; //函数 async Helloworld(e) { e.reply("Hello, world!");//输出Hello,world! //阻止消息不再往下 return; }; };
reply函数的多种用法
- 直接发送内容:
//发送内容: e.reply("Hello, world!");
- 是否引用回复:
//是否引用回复: e.reply("Hello, world!", true);//false为不引用,true为引用
- 群聊是否撤回消息:
//群聊是否撤回消息: e.reply("Hello, world!", false, { recallMsg: 5 });//最大120秒后撤回,0则不处理
- 是否at用户:
//是否at用户: e.reply("Hello, world!", false, { recallMsg: 0 }, true);//false为不at用户,true为at用户
如何使用回复组件
- 代码示例
//引入Yunzai插件功能 import plugin from '../../../../../lib/plugins/plugin.js' //导出 类 类名:要与文件名一致 继承 插件类 export class Helloworld extends plugin { constructor() { super({ //后端信息 name: 'Helloworld',//插件名字,可以随便写 dsc: 'Helloworld',//插件介绍,可以随便写 event: 'message',//这个直接复制即可,别乱改 priority: 250,//执行优先级:数值越低越6 rule: [ { //正则表达式 reg: '^#你干嘛诶哟$', //函数 fnc: 'Helloworld' } ] }); }; //函数 async Helloworld(e) { /** 设置上下文,后续接收到内容会执行hei方法 */ this.setContext('hei'); //发送消息 e.reply("1+1=?"); } //回复函数 async hei(e) { //获取消息 let xiaoxi = e.message; //判断消息 if (xiaoxi == 3) { //是 //回复 e.reply("回答正确") //结束上下文 this.finish('hei') } else { //否 //回复 e.reply("回答错误") //再次使用执行hei方法 this.setContext('hei') } } };
各式的判断
预计...没有预计(开学随缘更新)
大型的插件包(plugin)
文件/文件夹 | 作用 | 是否可选 | 对应文章跳转 |
---|---|---|---|
index.js | 导入apps里的单js插件 | 否 | 点我 |
apps/ | 存放单js插件的位置 | 否 | 点我 |
data/ | 存放插件数据的位置,可存储到Yunzai-Bot自带的data文件夹 | 是 | 点我 |
resources/ | 可存放README所使用的图片之类的资源文件 | 是 | 点我 |
config/ | 存放插件的配置文件 | 否 | 点我 |
model/ | 存放插件的封装文件 | 否 | 点我 |
guoba.support.js | 支持锅巴插件显示信息或配置(显示信息如不添加会是插件索引内的描述) | 是 | 点我 |
.gitignore | 更新时不选中某些文件或文件夹 | 是 | 点我 |
index
- 此js会导入apps文件夹(你可以选中其他的)内的所有js文件
- 可添加载入提示
编写示例:
//导入node:fs模块 import fs from node:fs //输出提示 logger.info('更换为你需要的提示') logger.info('更换为你需要的提示') logger.info('更换为你需要的提示') //如需更多可复制粘贴 //info可替换为: debug mark error //加载插件 const files = fs.readdirSync('./plugins/你插件包的名字/apps').filter(file => file.endsWith('.js')) let ret = [] files.forEach((file) => { ret.push(import(`./apps/${file}`)) }) ret = await Promise.allSettled(ret) let apps = {} for (let i in files) { let name = files[i].replace('.js', '') if (ret[i].status != 'fulfilled') { logger.error(`载入插件错误:${logger.red(name)}`) logger.error(ret[i].reason) continue } apps[name] = ret[i].value[Object.keys(ret[i].value)[0]] } export { apps }
apps
- 可根据上方教程进行编写单js插件并放置于apps
data
- 存放插件需要长期储存的文件,可存放于Yunzai-Bot自带的data文件夹
例如:
data/xxxx/xxxx
resources
- 存放插件的资源文件
例如:
data/README/img data/README/document data/common data/help/help.html data/help/help.css
config
- 存放插件的配置文件
- 例如:
config/config.yaml config/help.yaml
model
- 存放插件的封装文件
例如:
config.js help.js setting.js
锅巴支持
-
支持锅巴插件显示信息或配置(显示信息如不添加会是插件索引内的描述)
-
gitignore
- 更新时不选中某些文件或文件夹
语法:
空格不匹配任意文件,可作为分隔符,可用反斜杠转义 开头的文件标识注释,可以使用反斜杠进行转义 ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义 / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件 / 开始的模式匹配项目跟目录 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录 ** 匹配多级目录,可在开始,中间,结束 ? 通用匹配单个字符 * 通用匹配零个或多个字符 [] 通用匹配单个字符列表
- 示例:
# 忽略所有data内的文件 data/* # 忽略所有config内的文件 config/* # 忽略resources/help/themes内的所有文件夹 resources/help/themes/** # 选择resources/help/themes/default文件夹 !resources/help/themes/default/ # 忽略所有的.txt文件 *.txt