Skip to content

Commit

Permalink
feat:tools
Browse files Browse the repository at this point in the history
  • Loading branch information
sj817 committed Apr 15, 2024
1 parent e9ea5eb commit 2fcebff
Show file tree
Hide file tree
Showing 4 changed files with 229 additions and 11 deletions.
1 change: 1 addition & 0 deletions docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export default defineConfig({
{ text: '主页', link: '/' },
{ text: '快速开始', link: '/start' },
{ text: '事件', link: '/event/message' },
{ text: '开发工具', link: '/develop/tools' },
{ text: '插件编写', link: '/develop/plugin' },
]
}
Expand Down
15 changes: 15 additions & 0 deletions docs/develop/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
- [命名规范](#命名规范)
- [温馨提示](#温馨提示)
- [插件包目录参考结构](#插件包目录参考结构)
- [#karin](#karin)

> 推荐使用 VSCode 进行开发
> 推荐安装 `pnpm` 进行包管理
Expand Down Expand Up @@ -43,3 +44,17 @@ kritor-plugin-hello-world
└── package.json
```
## #karin

在模板仓库下,有这么一段代码
```js
import { plugin, segment } from '#Karin'
```

`#Karin` 是一个别名,指向 `./lib/index.js` 文件。
此文件为入口文件,开发者无需像以下这样引入模块:
```js
import segment from './lib/bot/segment.js'
import plugin from './lib/plugins/plugin.js'
```
详情请查看 [开发工具](./tools.md/#karin) 文档
49 changes: 38 additions & 11 deletions docs/develop/plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,41 @@

## 插件示例

::: warning 温馨提示
未标注必选的参数,可选键入。
:::

1. 打开`plugins/karin-plugin-example`目录,在此新建一个`hello.js`文件。
2. 打开`hello.js`文件,输入以下代码:

### 方法1

```js
import { App } from '#Karin'
// 插件名称为 hello
const app = App.init({ name: 'hello' })

const app = App.init({
/** 必选 插件名称 */
name: 'hello',
/** 插件描述 */
dsc: '发送你好回复hello',
/** 监听事件 默认message */
event: 'message',
/** 插件优先级 */
priority: 5000
})

app.reg({
// 使用正则匹配消息 你好
/** 命令匹配正则 */
reg: '你好$',
/** 命令执行方法名称 */
fnc: 'hello',
/** 是否显示操作日志 true=是 false=否 */
log: true,
/** 权限 master,owner,admin,all */
permission: 'all',
/** 调用 this.reply 方法回复 hello 关于参数2,请看下文 */
async hello () {
// 调用 this.reply 方法回复 hello
this.reply('hello')
this.reply('hello', { at: false, recallMsg: 0, reply: true, button: false })
}
})

Expand All @@ -60,24 +79,32 @@ import { plugin } from '#Karin'
export class hello extends plugin {
constructor () {
super({
// 插件名称
// 必选 插件名称
name: 'hello',
// 插件描述
dsc: '发送你好回复hello',
// 监听消息事件 默认message
event: 'message',
// 优先级
priority: 5000,
rule: [
{
/** 命令正则匹配 */
reg: '^你好$',
reg: '^#你好$',
/** 执行方法 */
fnc: 'hello'
fnc: 'hello',
// 是否显示操作日志 true=是 false=否
log: true,
// 权限 master,owner,admin,all
permission: 'all'
}
]
],
})
}

async hello () {
// 调用 this.reply 方法回复 hello
this.reply('hello')
// 调用 this.reply 方法回复 hello 关于参数2,请看下文
this.reply('hello', { at: false, recallMsg: 0, reply: true, button: false })
}
}

Expand Down
175 changes: 175 additions & 0 deletions docs/develop/tools.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
## #karin

`./lib/index.js`

```js
import Bot from './bot/bot.js'
import App from './plugins/app.js'
import Cfg from './config/config.js'
import logger from './config/log.js'
import redis from './config/redis.js'
import segment from './bot/segment.js'
import common from './common/common.js'
import plugin from './plugins/plugin.js'
import Renderer from './Renderer/Renderer.js'
import { kritor } from './adapter/kritor/protos/compiled.js'

export { App, Bot, Cfg, common, logger, plugin, redis, segment, Renderer, kritor }

```

### 简介

可以看到,`#Karin` 是一个别名,指向 `./lib/index.js` 文件。

此文件为入口文件,开发者无需像以下这样引入模块:

```js
import segment from './lib/bot/segment.js'
import plugin from './lib/plugins/plugin.js'
```

### 使用

- `APP`
```js
import { App } from '#Karin'
// ...
```
- `Bot`
```js
import { Bot } from '#Karin'
// ...
```
- `Cfg`
```js
import { Cfg } from '#Karin'
// ...
```
- `common`
```js
import { common } from '#Karin'
/** 休眠函数 延迟5秒 */
await common.sleep(5 * 1000)
/** 下载文件 参数1为下载地址,参数2为保存到本地的路径 */
await common.downFile('https://example.com/1.jpg', './temp/test/1.jpg')
/** 递归创建文件夹 */
common.mkdir('./temp/test')
/** 快速构建淡紫色的bot前缀日志 */
common.logger('qq', '这是一条来自QQ的消息')
// 输出:[Bot:qq] 这是一条来自QQ的消息
/** 获取绝对路径,支持file://前缀 */
common.absPath('file://./temp/test')
// 输出:/home/karin/temp/test
/** 将文件转换为不带前缀的base64字符串 */
await common.base64('./temp/test/1.jpg')
// 输出:'/9j/4AAQSkZJRgABAQEAYABgAADg...'
/** 将数据流对象转换为Buffer对象 */
const Buffer = await common.stream(fs.createReadStream('./temp/test/1.jpg'))
// 输出:Buffer
/** 将文件转换为Buffer对象 支持file:// base64:// 可读流等... */
const buffer = await common.buffer(buffer)
// 输出 buffer
```
- `logger`
```js
import { logger } from '#Karin'
/** 打印trace日志 */
logger.trace('这是一条trace日志')
/** 打印debug日志 */
logger.debug('这是一条debug日志')
/** 打印info日志 */
logger.info('这是一条info日志')
/** 打印warn日志 */
logger.warn('这是一条warn日志')
/** 打印mark日志 */
logger.mark('这是一条mark日志')
/** 打印error日志 */
logger.error('这是一条error日志')
/** 打印fatal日志 */
logger.fatal('这是一条fatal日志')
// 其中 logger还提供了打印不同颜色日志的方法
/** 打印红色日志 */
logger.info(logger.red('这是一条红色的info日志'))
/** 打印绿色日志 */
logger.info(logger.green('这是一条绿色的info日志'))
/** 打印黄色日志 */
logger.info(logger.yellow('这是一条黄色的info日志'))
/** 打印蓝色日志 */
logger.info(logger.blue('这是一条蓝色的info日志'))
/** 打印品红色日志 */
logger.info(logger.magenta('这是一条品红色的info日志'))
/** 打印青色日志 */
logger.info(logger.cyan('这是一条青色的info日志'))
/** 打印白色日志 */
logger.info(logger.white('这是一条白色的info日志'))
/** 打印灰色日志 */
logger.info(logger.chalk.gray('这是一条灰色的info日志'))
/** 打印淡紫色日志 */
logger.info(logger.violet('这是一条淡紫色的info日志'))
// 当以上方法无法满足你的需求时,你可以使用 chalk 库来自定义颜色
logger.info(logger.chalk.hex('#FF0000')('这是一条自定义颜色的info日志'))
```
- `plugin`
```js
import { plugin } from '#Karin'
// ...
```
- `redis`
```js
import { redis } from '#Karin'
/** 存储一个键值对 */
await redis.set('key', 'value')
/** 存储一个键值对 60秒后过期 */
await redis.set('key', 'value', { EX: 60 })
/** 获取指定键的值 */
const value = await redis.get('key')
console.log(value)
/** 删除指定键 */
await redis.del('key')
/** 获取所有键 慎用... 返回数组 */
const all = await redis.keys('*')
console.log(all)
/** 模糊获取以k开头的所有键列表 返回数组 */
const keys = await redis.keys('k*')
/** 打印所有键的值 */
for (const key of keys) {
const value = await redis.get(key)
console.log(value)
}
```
- `segment`
```js
import { segment } from '#Karin'
// ...
```
- `Renderer`
```js
import { Renderer } from '#Karin'
// ...
```
- `kritor`
```js
import { kritor } from '#Karin'
// 内部方法,若无特殊需求,不建议使用
```

0 comments on commit 2fcebff

Please sign in to comment.