Skip to content

示例

标签
插件示例
插件开发
进度
字数
1127 字
阅读时间
5 分钟

一个简单的 demo 示例,直接代码展示了。

准备工作

  • 打开 plugins/karin-plugin-example 目录,在此新建一个 index-demo.js 文件。

函数式语法糖示例

提示

鼠标轻扫代码块内的代码,可查看对应的类型或注释

命令正则处理 karin.command

导入 karin 后调用 karin.command 注册一个插件

IMPORTANT

  • command 的第一个参数为正则表达式,匹配消息是否触发该插件。
  • command 的第二个参数为命令的插件的方法函数或者或字符串、或segment元素类型。
  • command 的第三个参数为插件的配置项,具体请查看下方详细说明。

  • command 的第一种使用方法,直接回复字符串
js
import 
karin
from 'node-karin'
export const
test
=
karin
.
command
('^文本$', '这是一段文本消息')
  • command 的第二种使用方法,传入segment元素
ts
import 
karin
, { segment } from 'node-karin'
export const
text
=
karin
.
command
(/^#文本测试$/, segment.
text
('这是一段文本消息'))
  • command 的第三种使用方法,回调函数
js
import { 
karin
, segment } from 'node-karin'
// 参数二支持同步和异步函数 export const
callback
=
karin
.
command
(/^#回调测试$/, async (
e
,
next
) => {
// reply 方法支持多种类型的参数 await
e
.
reply
('这是一个回调测试')
// 传入`sengment`元素 await
e
.
reply
(segment.
text
('这是一个回调测试'))
// 传入数组 支持各种组合的`segment`元素 await
e
.
reply
([segment.
text
('这是一个回调测试'), segment.
image
('https://www.example.com/example.png')])
// 若要继续匹配下一个插件,请调用 next 方法(类似 return false)
next
() // 注释该行则终止匹配
})
  • command 的第三个参数

第三个参数是一个对象,用于设置插件的一些属性
全部参数都是可选的,不填写则使用默认值
强烈建议设置name属性,也就是插件的名称,方便后续查找和管理插件
参数的配置项请查看更下方

js
export const 
test
=
karin
.
command
('^文本$', '这是一段文本消息', {
event
: 'message', // 监听的事件
name
: '文本', // 插件名称
perm
: 'all', // 触发权限
at
: false, // 是否加上at 仅在群聊中有效
reply
: false, // 是否加上引用回复
recallMsg
: 0, // 发送是否撤回消息 单位秒
log
: true, // 是否启用日志
rank
: 10000, // 优先级
adapter
: [], // 生效的适配器
dsbAdapter
: [], // 禁用的适配器
delay
: 0, // 延迟回复 单位毫秒 仅在第二个参数非函数时有效
stop
: false, // 是否停止执行后续插件 仅在第二个参数非函数时有效
})

监听事件处理

待完善...

中间件

待完善...

上下文处理

待完善...

事件处理器

待完善...

定时任务

待完善...

类语法糖示例

该示例为消息插件示例
将下面的代码复制到 index-demo.js 中,保存
对机器人发送 #你好 ,机器人会回复 你好 、图片、语音、视频、@某人

js
import { 
Plugin
, segment } from 'node-karin'
export class
hello
extends
Plugin
{
constructor() { super({
name
: '插件名称',
dsc
: '插件描述',
rule
: [
{ /** 命令正则匹配 */
reg
: /^#你好$/,
/** 正则对应的执行方法 */
fnc
: 'hello',
}, ], }) } async
hello
() {
// 这里在this上会多一个reply方法,和函数插件的e.reply一样 await this.
reply
('你好')
// e在this上也会有 await this.
reply
(segment.
image
('https://www.example.com/example.png'))
// 其他方法都和函数插件一样 return true } }

更复杂的类语法糖示例

js
import { 
Plugin
, segment } from 'node-karin'
export class
hello
extends
Plugin
{
constructor() { super({
name
: '插件名称',
dsc
: '插件描述',
/** 监听事件 具体请查看事件分类 */
event
: 'message',
/** 插件的优先级 必须为数字 数字越小优先级越高 默认5000 */
priority
: 1000,
rule
: [
{ /** 命令正则匹配 */
reg
: /^#你好$/,
/** 正则对应的执行方法 */
fnc
: 'hello',
/** 是否显示操作日志 默认显示 */
log
: true,
/** 操作权限 all | admin | master | group.admin | group.owner */
permission
: 'all',
}, ], }) } async
hello
() {
// ...不再赘述 return true } }