Skip to content

elements

字数
2820 字
阅读时间
13 分钟

本文档介绍了 Krita 的消息元素结构和 segment 模块的使用方法。

温馨提示

目前尚在开发阶段,可能有部分内容未完善或错误,敬请谅解。

导入

温馨提示

以下所有的示例都假设你已经导入了 segment 模块。

js
import { 
segment
} from 'node-karin'

多媒体资源标准

karin对于多媒体资源的标准化处理,遵循以下规则:

  • 对于网络资源,要求传入的url必须为 https://http:// 开头
  • 对于base64格式,传入必须是 base64:// 格式开头的字符串
  • 对于file://格式,传入的字符串必须是绝对路径,且资源必须存在
  • 对于未知字段,请确认适配器可以正确处理

注意

对于file://格式,请开发者注意以下几点:

  • 请确保用户的协议端和karin运行环境一致,否则可能导致文件读取失败
  • 对于Linux系统,由于绝对路径前方有/,格式为file:///root/...,请注意区分/////

文本 text

js
const 
text
=
segment
.
text
('Hello, world!')
console
.
log
(
text
)

输出:

js
{
    type: 'text',
    text: 'Hello, world!'
}

表情 face

温馨提示

键入的 ID 必须为数字

js
const 
face
=
segment
.
face
(1)
console
.
log
(
face
)

输出:

js
{
    type: 'face',
    id: 1
}

图片 image

温馨提示

遵循 多媒体资源标准

js
const 
image1
=
segment
.
image
('https://example.com/image.png') // 网络图片
const
image2
=
segment
.
image
('base64://iVBORw0KGgoAAAANSUhEUgA...') // base64格式
const
image3
=
segment
.
image
('file://C:/Users/admin/Pictures/image.png') // Windows绝对路径
const
image4
=
segment
.
image
('file:///root/karin/image.png') // Linux绝对路径
console
.
log
(
image1
,
image2
,
image3
,
image4
)

输出:

js
{   // 对于网络图片,要求传入的url必须为https://或http://开头
    type: 'image',
    file: 'https://example.com/image.png'
}
{   // 对于base64格式,传入的字符串必须是base64格式的图片
    type: 'image',
    file: 'base64://iVBORw0KGgoAAAANSUhEUgA...'
}
{   // file://格式,传入的字符串必须是绝对路径,且图片必须存在
    type: 'image',
    file: 'file://C:/Users/admin/Pictures/image.png'
}
{   // file:///格式,传入的字符串必须是绝对路径,且图片必须存在
    type: 'image',
    file: 'file:///root/karin/image.png'
}

语音 record

温馨提示

遵循 多媒体资源标准

js
const 
record
=
segment
.
record
('https://example.com/record.mp3')
console
.
log
(
record
)

输出:

js
{
    type:'record',
    file: 'https://example.com/record.mp3'
}

视频 video

温馨提示

遵循 多媒体资源标准

js
const 
video
=
segment
.
video
('https://example.com/video.mp4')
console
.
log
(
video
)

输出:

js
{
    type: 'video',
    file: 'https://example.com/video.mp4'
}

@用户 at

温馨提示

开发者只需要关注uid字段即可

js
const 
at
=
segment
.
at
('abc1234567890', '1234567890')
console
.
log
(
at
)

输出:

js
{
    type: 'at',
    uid: 'abc1234567890',
    uin: '1234567890' // 二选一 推荐使用 uid
}

戳一戳 poke

关于这部分,见mirai

js
const 
poke
= segment.poke(1, -1, 1)
console
.
log
(
poke
)

输出:

js
{
    type: 'poke',
    poke: 1, // 类型
    id: -1, // id
    strength: 1 // 强度 已知只有shamrock可以发送
}

链接分享 share

js
const 
share
=
segment
.
share
('https://example.com/share', '分享标题', '分享描述', '图片 URL')
console
.
log
(
share
)

输出:

js
{
    type:'share',
    url: 'https://example.com/share',
    title: '分享标题',
    content: '分享描述',
    image: '图片 URL'
}

推荐好友或群 contact

js
const 
contact
=
segment
.
contact
('qq', '12345')
console
.
log
(
contact
)

输出:

js
{
    type: 'contact',
    platform: 'qq', // 'qq' 表示推荐好友,'group' 表示推荐群
    id: '12345' // 被推荐人的 QQ 号或被推荐群的群号
}

位置 location

js
const 
location
=
segment
.
location
('121.527328', '31.21515', '上海市浦东新区', '内容描述')
console
.
log
(
location
)

输出:

js
{
    type: 'location',
    lat: '121.527328', // 纬度
    lon: '31.21515', // 经度
    title: '上海市浦东新区', // 标题 (可选)
    content: '内容描述' // 内容描述 (可选)
}

音乐分享 music

js
const 
music
=
segment
.
music
('qq', '12345')
console
.
log
(
music
)

输出:

js
{
    type:'music',
    platform: 'qq', // 音乐类型,'qq', '163', 'xm'
    id: '12345' // 歌曲 ID
}

自定义音乐分享 customMusic

js
const 
customMusic
=
segment
.
customMusic
('https://example.com/music.mp3', 'https://example.com/music.mp3', '标题', '内容描述', 'https://example.com/image.jpg')
console
.
log
(
customMusic
)

输出:

js
{
    type: 'customMusic',
    url: 'https://example.com/music.mp3', // 点击后跳转目标 URL
    audio: 'https://example.com/music.mp3', // 音乐 URL
    title: '标题', // 标题
    content: '内容描述', // 内容描述
    image: 'https://example.com/image.jpg', // 图片 URL
}

回复 reply

js
const 
reply
=
segment
.
reply
('1234567890')
console
.
log
(
reply
)

输出:

js
{
    type:'reply',
    message_id: '1234567890'
}

发送res_id合并转发 forward

js
const 
forward
=
segment
.
forward
('abs1234567890')
console
.
log
(
forward
)

输出:

js
{
    type: 'forward',
    id: 'abs1234567890'
}

合并转发自定义节点 node

js
const 
node
=
segment
.
node
('1234567890', 'karin', [
segment
.
text
('Hello, world!')])
console
.
log
(
node
)

输出:

js
{
    type: 'node',
    user_id: '1234567890',
    nickname: 'karin',
    content: [
        {
            type: 'text',
            text: 'Hello, world!'
        }
    ]
}

xml

js
const 
xml
=
segment
.
xml
('<xml>...</xml>', 'id')
console
.
log
(
xml
)

输出:

js
{
    type: 'xml',
    data: '<xml>...</xml>',
    id: 'id'
}

JSON

js
const 
json
=
segment
.
json
('JSON 内容')
console
.
log
(
json
)

输出:

js
{
    type: 'json',
    data: 'JSON 内容'
}

markdown消息

js
// 原生markdown内容
const 
markdown
=
segment
.
markdown
('## 标题\n- 列表1\n- 列表2')
// 模板markdown参数 此为QQBot官方字段,其他平台不可用 const
markdown1
=
segment
.
markdown_tpl
('模板ID',
[ {
key
: 'title',
values
: ['标题'] },
{
key
: 'list',
values
: ['列表1'] }
])
console
.
log
(
markdown
)
console
.
log
(
markdown1
)

输出:

js
// 原生markdown内容
{
    type:'markdown',
    content: '## 标题\n- 列表1\n- 列表2'
}

// 模板markdown参数 此为QQBot官方字段,其他平台不可用
{
    type:'markdown',
    custom_template_id: '模板ID',
    params: [
        { key: 'title', values: ['标题'] },
        { key: 'list', values: ['列表1', '列表2'] }
    ]
}

button按钮

温馨提示

button的键入值比较复杂,请查看最下方的 构建方法,这里只展示输出

点我查看输出示例
js
{
  type: 'button',
  buttons: [
    {
      id: '1',
      render_data: {
        label: '⬅️上一页',
        visited_label: '⬅️上一页'
      },
      action: {
        type: 1,
        permission: {
          type: 1,
          specify_role_ids: [
            '1',
            '2',
            '3'
          ]
        },
        click_limit: 10,
        unsupport_tips: '兼容文本',
        data: 'data',
        at_bot_show_channel_list: true
      }
    },
    {
      id: '2',
      render_data: {
        label: '➡️下一页',
        visited_label: '➡️下一页'
      },
      action: {
        type: 1,
        permission: {
          type: 1,
          specify_role_ids: [
            '1',
            '2',
            '3'
          ]
        },
        click_limit: 10,
        unsupport_tips: '兼容文本',
        data: 'data',
        at_bot_show_channel_list: true
      }
    }
  ]
}

button按钮构建方法

温馨提示

segment.button 是karin的按钮结构 与qqbot的不同
所有未出现在快速构建方法中的参数,均为可选参数,可以根据需要选择是否传入

跳转按钮

js
// 快速构建
segment
.
button
({
text
: '菜单',
show
: '菜单' })
// 完整构建
segment
.
button
({
text
: '链接跳转', // 按钮默认显示的文本
show
: '链接跳转', // 按钮点击后显示的文本
link
: 'https://example.com',
style
: 0, // 按钮样式 0 灰色线框,1 蓝色线框 默认 0
admin
: false, // 设置为true时,只有群管理员可以点击
list
: ['用户ID1', '用户ID2'], // 设置后,只有这些用户可以点击,与admin互斥
role
: ['用户ID1', '用户ID2'], // 设置后,只有这些用户可以点击,与admin互斥 (仅频道可用)
tips
: '指令提示' // 客户端不支持本 action 的时候,弹出的 toast 文案
})

回调按钮

js
// 快速构建
segment
.
button
({
type
: 1,
text
: '回调按钮' })
// 完整构建
segment
.
button
({
type
: 1, // 按钮类型 1 回调按钮
text
: '回调按钮', // 按钮默认显示的文本
show
: '回调按钮', // 按钮点击后显示的文本
data
: '操作相关数据', // 回调数据
style
: 0, // 按钮样式 0 灰色线框,1 蓝色线框 默认 0
admin
: false, // 设置为true时,只有群管理员可以点击
list
: ['用户ID1', '用户ID2'], // 设置后,只有这些用户可以点击,与admin互斥
role
: ['用户ID1', '用户ID2'], // 设置后,只有这些用户可以点击,与admin互斥 (仅频道可用)
tips
: '指令提示' // 客户端不支持本 action 的时候,弹出的 toast 文案
})

指令按钮

js
// 快速构建
segment
.
button
({
text
: '指令按钮' })
// 完整构建
segment
.
button
({
type
: 2, // 按钮类型 2 指令按钮
text
: '指令按钮', // 按钮默认显示的文本
show
: '指令按钮', // 按钮点击后显示的文本
data
: '操作相关数据', // 指令数据
style
: 0, // 按钮样式 0 灰色线框,1 蓝色线框 默认 0
enter
: true, // 设置为true时,点击按钮后直接自动发送 data,默认 false
reply
: true, // 设置为true时,点击按钮后回复当前消息,默认 false
admin
: false, // 设置为true时,只有群管理员可以点击
list
: ['用户ID1', '用户ID2'], // 设置后,只有这些用户可以点击,与admin互斥
role
: ['用户ID1', '用户ID2'], // 设置后,只有这些用户可以点击,与admin互斥 (仅频道可用)
tips
: '指令提示' // 客户端不支持本 action 的时候,弹出的 toast 文案
})

多维按钮

js
// 快速构建
segment
.
keyboard
(
和`segment.button`不同的是`segment.keyboard`为多行按钮
多维按钮需要嵌套数组使用
[
下方数组的两个按钮可组成第一行按钮
[ {
text
: '状态',
show
: '运行状态' },
{
text
: '菜单',
show
: '菜单' }
],
下方三个按钮可组成第二行按钮
[ {
text
: '状态',
show
: '运行状态' },
{
text
: '扫雷',
show
: '扫雷' },
{
text
: '小游戏帮助',
show
: '小游戏帮助',
reply
: true }
],
下方可组成第三行按钮
[ {
text
: '签到',
show
: '签到' },
{
text
: '角色',
show
: '角色' }
] ] ) // 完整构建
segment
.
keyboard
([{
type
: 2, // 按钮类型 2 指令按钮
text
: '指令按钮', // 按钮默认显示的文本
show
: '指令按钮', // 按钮点击后显示的文本
data
: '操作相关数据', // 指令数据
style
: 0, // 按钮样式 0 灰色线框,1 蓝色线框 默认 0
enter
: true, // 设置为true时,点击按钮后直接自动发送 data,默认 false
reply
: true, // 设置为true时,点击按钮后回复当前消息,默认 false
admin
: false, // 设置为true时,只有群管理员可以点击
list
: ['用户ID1', '用户ID2'], // 设置后,只有这些用户可以点击,与admin互斥
role
: ['用户ID1', '用户ID2'], // 设置后,只有这些用户可以点击,与admin互斥 (仅频道可用)
tips
: '指令提示' // 客户端不支持本 action 的时候,弹出的 toast 文案
}])
解决方案
适配器
其他
2024 KarinJS. All Rights Reserved.