示例
字数
1087 字
阅读时间
6 分钟
一个简单的
demo
示例,直接代码展示了。
准备工作
- 打开
plugins/karin-plugin-example
目录,在此新建一个index-demo.js
文件。
函数式语法糖示例
- 文本
js
import karin, { segment } from 'node-karin'
// 直接回复字符串
export const hello = karin.command(/^#hello$/, 'hello')
// 回调函数
export const hello1 = karin.command(/^#你好$/, async (e) => {
await e.reply(segment.text('hello'))
return true
})
- 图片
js
import karin, { segment } from 'node-karin'
import { axios } from 'node-karin/modules.js'
export const image = karin.command(/^#动漫壁纸$/, async (e) => {
// 来自: https://blog.jixiaob.cn/?post=93
await e.reply(segment.image('https://t.alcy.cc/mp'))
return true
})
- at
js
import karin, { segment } from 'node-karin'
export const at = karin.command(/^#at$/, async (e) => {
await e.reply('\n这是一个at元素', { at: true })
return true
})
// or 上方代码等同于下方代码
export const at1 = karin.command(/^#at$/, async (e) => {
await e.reply([
segment.at(e.user_id),
'\n这是一个at元素',
])
return true
})
- 引用回复
js
import karin, { segment } from 'node-karin'
export const reply = karin.command(/^#reply$/, async (e) => {
await e.reply('这是一个引用回复', { reply: true })
return true
})
// or 上方代码等同于下方代码
export const reply1 = karin.command(/^#reply$/, async (e) => {
await e.reply([
segment.reply(e.message_id),
'这是一个引用回复',
])
return true
})
- 语音
js
import karin, { segment } from 'node-karin'
export const record = karin.command(/^#语音$/, async (e) => {
await e.reply(segment.record('base64://...'))
return true
})
:::
- 视频
js
import karin, { segment } from 'node-karin'
export const video = karin.command(/^#视频$/, async (e) => {
await e.reply(segment.video('base64://...'))
return true
})
- 表情
js
待完善...import karin, { segment } from 'node-karin'
export const face = karin.command(/^#表情$/, async (e) => {
// 表情id请参考 https://bot.q.qq.com/wiki/develop/api-v2/openapi/emoji/model.html#Emoji
await e.reply(segment.face(1))
return true
})
类语法糖示例
该示例为消息插件示例
将下面的代码复制到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 () {
/** 回复纯文本 */
await this.reply(segment.text('你好'))
/** 回复图片 */
await this.reply(segment.image('https://www.example.com/example.png'))
/** 回复语音 */
await this.reply(segment.record('https://www.example.com/example.mp3'))
/** 回复视频 */
await this.reply(segment.video('https://www.example.com/example.mp4'))
/** @某人 */
await this.reply(segment.at('888888'))
/** ...更多类型请查看segment 这里只展示常用的 */
/** 这里return若为false karin会继续匹配下一个插件 */
// return false
/** 若为true 则此次用户触发的事件到此结束 */
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 () {
/**
* 将多个元素放在一起发送...
* 这里只是一个例子,正常情况语音和视频是不支持组合发送的。
*/
const msg = [
segment.text('下面是一张图片:'),
segment.image('https://www.example.com/example.png'),
segment.text('下面是一段语音:'),
segment.record('https://www.example.com/example.mp3'),
segment.text('下面是一个视频:'),
segment.video('https://www.example.com/example.mp4'),
segment.text('下面是一个AT:'),
segment.at('888888')
]
/**
* 这里是快捷操作方法
* 也称回复消息附加选项
* 以下选项,均为可选项,不填写则不会执行对应操作
*/
const options = {
/** 设置为true 则会在发送消息的时候自动在前方加上AT 对象是消息的触发者 */
at: true,
/** 设置为true 则会在发送消息的时候自动附加一个引用回复 对象是消息触发者 */
reply: true,
/** 这里需要是数字,代表消息发送成功后,多少秒后撤回消息 */
recallMsg: 10
}
await this.reply(msg, options)
return true
}
}