须安装node与npm
本项目编写所使用的版本分别为nodev22.14.0和npmv11.2.0
项目地址:https://github.com/lingyatou/syuan-plugin
有些地方直接借鉴了喵喵插件的代码()比如path.js
项目结构
1 2 3 4 5 6 7 8 9 10
| syuan-plugin/ ├── apps/ # 插件核心功能模块 ├── config/ # 配置文件 ├── data/ # 插件数据模块 ├── resources/ # 静态资源模块 ├── tools/ # 工具模块 ├── index.js # 插件主入口 ├── package.json # 项目配置 └── README.md # 说明文档
|
- 创建test-plugin文件夹,进入该文件夹
- 打开终端,运行命令创建node项目,会生成package.json
创建文件夹apps、config、tools,文件index.js、README.ME,resources和data按需,毕竟为了防止更新破坏更改,放在本体的resources和data反而更好。但是是自己用的也就不管了()
项目结构中,apps文件夹放置的是真正总和功能的地方,其他都是辅助性的功能,如tools文件夹下path.js是专门用来进行插件根目录定位的。
有一些包导入之前需要使用pnpm add命令添加依赖
每个文件夹下都建议弄个index.js专门用来统一导出各自文件夹下的所有的对象实例
本项目中,产生的动态数据都放在bot的data文件夹下的Syuan-plugin文件夹中,方便查看
data文件夹下存放必要的静态数据
项目关键文件介绍
index.js
一般看依赖文件里说的,可以看到main键的值是index.js(这个是项目入口文件,记得把apps的实例导出来)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| { "name": "syuan-plugin", "version": "1.0.0", "description": "自用工具综合插件", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "源Syuan", "license": "ISC", "packageManager": "pnpm@10.7.1", "dependencies": { "lodash": "^4.17.21", "ssh2": "^1.16.0", "yaml": "^2.8.1" } }
|
而后各个文件夹里的index.js都是统一导出的对象实例,最终由入口文件注册(不统一导出也可以)
如下,统一导出,其他地方只需要导入index.js就行了
1 2 3 4 5 6
| import { sshData } from './data.js' import { pluginPath, rootPath, dataPath } from './path.js' import { versionInfo } from './version.js' import { cfgdata } from './cfg.js'
export { sshData, pluginPath, rootPath, dataPath, versionInfo, cfgdata }
|
apps文件夹
本文件夹中的功能其实是由单js插件的模版凑成的()因为是自用的也不管了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
export class UpdateMemeRepos extends plugin { constructor() { super({ name: '功能名字', dsc: '功能描述', event: 'message', priority: 50, rule: [{ reg: '^#?memenew$', fnc: 'test' }] }) }
async updateRepos(e) { } }
|
config文件夹
配置文件,我用yaml,不是很复杂的插件可以不用,就是单纯的yaml文件
一般高复用性代码的都会提出来放到这里,最重要的还是根目录定位,因为有时候工作目录跟你以为的工作目录不是一个目录()
本项目提取了根目录定位、data文件夹下的数据读取、配置文件读取、版本信息读取。其中path.js来自喵喵插件
常量文件 /tools/constant.js
1 2 3 4 5 6 7 8
|
export const NAPCAT_HTTP_223 = "http://127.0.0.1:3000";
export const NAPCAT_HTTP_304 = "http://127.0.0.1:3001";
|
文件数据的基本结构
欢迎词功能的文件(welcome.js)键是群号,值是欢迎词
1 2 3 4 5
| { "11111111": "欢迎新人呀,可以点击以下链接查看bot帮助\nhttps://blog.pardofelis.icu/posts/1da0051f0357.html", "11111111": "欢迎新人呀,可以点击以下链接查看bot帮助\nhttps://blog.pardofelis.icu/posts/1da0051f0357.html", "1111111": "欢迎新人呀,可以点击以下链接查看bot帮助\nhttps://blog.pardofelis.icu/posts/1da0051f0357.html" }
|
SSH实例信息的文件(sshInfo.json)
1 2 3 4 5 6 7 8
| { "host": "127.0.0.1", "port": 22, "username": "root", "password": "1008611", "description": "SSH服务器配置", "lastUpdated": "2025-08-09T06:41:40.876Z" }
|
更新
2025-9-2
- 新增《谁是卧底》小游戏
- 新增点赞
- 新增基于NapCat的HTTP服务的点赞、私聊功能,补全Yunzai本体没有私聊的缺陷
- 对新增进行解耦,用常量的方式封装HTTP服务地址,提取NapCat相关服务为工具类