须安装node与npm
本项目编写所使用的版本分别为nodev22.14.0npmv11.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 # 说明文档

  1. 创建test-plugin文件夹,进入该文件夹
  2. 打开终端,运行命令创建node项目,会生成package.json
    1
    npm init -y
  3. 创建文件夹apps、config、tools,文件index.js、README.ME,resources和data按需,毕竟为了防止更新破坏更改,放在本体的resources和data反而更好。但是是自己用的也就不管了()

  4. 项目结构中,apps文件夹放置的是真正总和功能的地方,其他都是辅助性的功能,如tools文件夹下path.js是专门用来进行插件根目录定位的。

  5. 有一些包导入之前需要使用pnpm add命令添加依赖

    1
    pnpm add <package>
  6. 每个文件夹下都建议弄个index.js专门用来统一导出各自文件夹下的所有的对象实例

  7. 本项目中,产生的动态数据都放在bot的data文件夹下的Syuan-plugin文件夹中,方便查看

  8. 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
// 导入包
// plugin是全局变量,不用导
export class UpdateMemeRepos extends plugin {
constructor() {
super({
name: '功能名字',
dsc: '功能描述',
event: 'message',//监听对象
priority: 50,//优先级。可以为负数,越低优先级越高
rule: [{
reg: '^#?memenew$',//匹配的正则表达式
fnc: 'test'// 要触发的函数
}]
})
}

async updateRepos(e) {
//功能主体,e为bot实例
}
}

config文件夹

配置文件,我用yaml,不是很复杂的插件可以不用,就是单纯的yaml文件


tools文件夹

一般高复用性代码的都会提出来放到这里,最重要的还是根目录定位,因为有时候工作目录跟你以为的工作目录不是一个目录()
本项目提取了根目录定位、data文件夹下的数据读取、配置文件读取、版本信息读取。其中path.js来自喵喵插件

常量文件 /tools/constant.js

1
2
3
4
5
6
7
8
// 根据自己的bot更改url,开启HTTP服务器教程为https://blog.pardofelis.icu/posts/a70df6f96ab0.html

//bot 2331329306的NapCat的HTTP服务器url
export const NAPCAT_HTTP_223 = "http://127.0.0.1:3000";

//bot 3046595434的NapCat的HTTP服务器url
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,//ssh端口号
"username": "root",//要登录的用户
"password": "1008611",//密码
"description": "SSH服务器配置",//描述
"lastUpdated": "2025-08-09T06:41:40.876Z"//更新时间
}

更新

2025-9-2

  1. 新增《谁是卧底》小游戏
  2. 新增点赞
  3. 新增基于NapCat的HTTP服务的点赞、私聊功能,补全Yunzai本体没有私聊的缺陷
  4. 对新增进行解耦,用常量的方式封装HTTP服务地址,提取NapCat相关服务为工具类