node-karin 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +57 -0
  3. package/config/defSet/App.yaml +37 -0
  4. package/config/defSet/config.yaml +43 -0
  5. package/config/defSet/group.yaml +18 -0
  6. package/config/defSet/pm2.yaml +21 -0
  7. package/config/defSet/redis.yaml +18 -0
  8. package/config/defSet/server.yaml +42 -0
  9. package/config/view/App.yaml +74 -0
  10. package/config/view/config.yaml +100 -0
  11. package/config/view/group.yaml +62 -0
  12. package/config/view/pm2.yaml +41 -0
  13. package/config/view/redis.yaml +25 -0
  14. package/config/view/server.yaml +93 -0
  15. package/lib/adapter/onebot/onebot11.d.ts +430 -0
  16. package/lib/adapter/onebot/onebot11.js +1302 -0
  17. package/lib/core/init.d.ts +0 -0
  18. package/lib/core/init.js +4 -0
  19. package/lib/core/karin.d.ts +72 -0
  20. package/lib/core/karin.js +51 -0
  21. package/lib/core/listener.d.ts +121 -0
  22. package/lib/core/listener.js +188 -0
  23. package/lib/core/plugin.app.d.ts +15 -0
  24. package/lib/core/plugin.app.js +18 -0
  25. package/lib/core/plugin.d.ts +182 -0
  26. package/lib/core/plugin.js +138 -0
  27. package/lib/core/plugin.loader.d.ts +149 -0
  28. package/lib/core/plugin.loader.js +462 -0
  29. package/lib/core/server.d.ts +26 -0
  30. package/lib/core/server.js +213 -0
  31. package/lib/db/level.d.ts +20 -0
  32. package/lib/db/level.js +38 -0
  33. package/lib/db/redis.d.ts +41 -0
  34. package/lib/db/redis.js +137 -0
  35. package/lib/db/redis_level.d.ts +113 -0
  36. package/lib/db/redis_level.js +290 -0
  37. package/lib/event/event.d.ts +138 -0
  38. package/lib/event/event.handler.d.ts +29 -0
  39. package/lib/event/event.handler.js +142 -0
  40. package/lib/event/event.js +120 -0
  41. package/lib/event/message.d.ts +102 -0
  42. package/lib/event/message.handler.d.ts +25 -0
  43. package/lib/event/message.handler.js +240 -0
  44. package/lib/event/message.js +70 -0
  45. package/lib/event/notice.d.ts +49 -0
  46. package/lib/event/notice.js +15 -0
  47. package/lib/event/request.d.ts +49 -0
  48. package/lib/event/request.js +15 -0
  49. package/lib/event/review.handler.d.ts +54 -0
  50. package/lib/event/review.handler.js +382 -0
  51. package/lib/index.d.ts +23 -0
  52. package/lib/index.js +40 -0
  53. package/lib/renderer/app.d.ts +53 -0
  54. package/lib/renderer/app.js +93 -0
  55. package/lib/renderer/base.d.ts +30 -0
  56. package/lib/renderer/base.js +71 -0
  57. package/lib/renderer/client.d.ts +30 -0
  58. package/lib/renderer/client.js +159 -0
  59. package/lib/renderer/http.d.ts +19 -0
  60. package/lib/renderer/http.js +51 -0
  61. package/lib/renderer/server.d.ts +42 -0
  62. package/lib/renderer/server.js +112 -0
  63. package/lib/renderer/wormhole.d.ts +1 -0
  64. package/lib/renderer/wormhole.js +154 -0
  65. package/lib/types/adapter.d.ts +575 -0
  66. package/lib/types/adapter.js +1 -0
  67. package/lib/types/config.d.ts +327 -0
  68. package/lib/types/config.js +1 -0
  69. package/lib/types/element.d.ts +576 -0
  70. package/lib/types/element.js +1 -0
  71. package/lib/types/index.d.ts +8 -0
  72. package/lib/types/index.js +8 -0
  73. package/lib/types/logger.d.ts +109 -0
  74. package/lib/types/logger.js +1 -0
  75. package/lib/types/onebots11.d.ts +1371 -0
  76. package/lib/types/onebots11.js +1 -0
  77. package/lib/types/plugin.d.ts +282 -0
  78. package/lib/types/plugin.js +1 -0
  79. package/lib/types/render.d.ts +111 -0
  80. package/lib/types/render.js +1 -0
  81. package/lib/types/reply.d.ts +40 -0
  82. package/lib/types/reply.js +1 -0
  83. package/lib/types/types.d.ts +898 -0
  84. package/lib/types/types.js +1 -0
  85. package/lib/utils/YamlEditor.d.ts +62 -0
  86. package/lib/utils/YamlEditor.js +208 -0
  87. package/lib/utils/button.d.ts +49 -0
  88. package/lib/utils/button.js +79 -0
  89. package/lib/utils/common.d.ts +123 -0
  90. package/lib/utils/common.js +413 -0
  91. package/lib/utils/config.d.ts +72 -0
  92. package/lib/utils/config.js +254 -0
  93. package/lib/utils/exec.d.ts +22 -0
  94. package/lib/utils/exec.js +36 -0
  95. package/lib/utils/ffmpeg.d.ts +12 -0
  96. package/lib/utils/ffmpeg.js +25 -0
  97. package/lib/utils/handler.d.ts +76 -0
  98. package/lib/utils/handler.js +102 -0
  99. package/lib/utils/logger.d.ts +3 -0
  100. package/lib/utils/logger.js +104 -0
  101. package/lib/utils/segment.d.ts +276 -0
  102. package/lib/utils/segment.js +448 -0
  103. package/lib/utils/update.d.ts +69 -0
  104. package/lib/utils/update.js +151 -0
  105. package/lib/utils/updateVersion.d.ts +33 -0
  106. package/lib/utils/updateVersion.js +145 -0
  107. package/package.json +92 -0
@@ -0,0 +1,276 @@
1
+ import { TextElement, AtElement, ImageElement, FaceElement, BubbleFaceElement, ReplyElement, VoiceElement, VideoElement, BasketballElement, DiceElement, RpsElement, PokeElement, MusicElement, WeatherElement, LocationElement, ShareElement, GiftElement, MarketFaceElement, ForwardElement, ContactElement, JsonElement, XmlElement, FileElement, ButtonElement, CustomMusicElemen, TemplateElement, ContentElement, KarinNodeElement, KarinElement } from '../types/element.js';
2
+ declare const _default: {
3
+ /**
4
+ * 纯文本
5
+ * @param text - 文本内容
6
+ * @returns {TextElement} 纯文本元素
7
+ */
8
+ text(text: string): TextElement;
9
+ /**
10
+ * 提及
11
+ * 提供一个uid即可
12
+ * @param uid - uid
13
+ * @param uin - uin
14
+ * @returns {AtElement} 提及元素
15
+ */
16
+ at(uid: string, uin?: string): AtElement;
17
+ /**
18
+ * 表情
19
+ * @param id - 表情ID
20
+ * @param is_big - 是否大表情,默认不是
21
+ * @returns {FaceElement} 表情元素
22
+ */
23
+ face(id: number, is_big?: boolean): FaceElement;
24
+ /**
25
+ * 弹射表情
26
+ * @param id - 表情ID
27
+ * @param count - 数量
28
+ * @returns {BubbleFaceElement} 弹射表情元素
29
+ */
30
+ bubble_face(id: number, count?: number): BubbleFaceElement;
31
+ /**
32
+ * 引用回复
33
+ * @param message_id - 消息ID
34
+ * @returns {ReplyElement} 引用回复元素
35
+ */
36
+ reply(message_id: string): ReplyElement;
37
+ /**
38
+ * 图片
39
+ * - 一般情况提供一个file参数即可,其他参数一般为收到的消息中的参数
40
+ * @param file - 图片URL或路径、Base64
41
+ * @param options - 图片类型、名称、MD5、子类型、宽度、高度
42
+ * @returns {ImageElement} 图片元素
43
+ */
44
+ image(file: string, options?: {
45
+ /**
46
+ * - 图片类型,show: 展示图片,flash: 闪照,original: 原图
47
+ */
48
+ file_type?: 'show' | 'flash' | 'original';
49
+ /**
50
+ * - 图片名称
51
+ */
52
+ name?: string;
53
+ /**
54
+ * - 图片MD5
55
+ */
56
+ md5?: string;
57
+ /**
58
+ * - 图片子类型
59
+ */
60
+ sub_type?: number;
61
+ /**
62
+ * - 图片宽度
63
+ */
64
+ width?: number;
65
+ /**
66
+ * - 图片高度
67
+ */
68
+ height?: number;
69
+ }): ImageElement;
70
+ /**
71
+ * 语音
72
+ * @description 即将废弃,请使用voice
73
+ * @param file - 语音URL或路径、Base64
74
+ * @param magic - 是否魔法语音,默认为 false
75
+ * @param md5 - 语音md5
76
+ * @param name - 语音名称
77
+ * @returns {VoiceElement} 语音元素
78
+ */
79
+ record(file: string, magic?: boolean, md5?: string, name?: string): VoiceElement;
80
+ /**
81
+ * 语音
82
+ * @param file - 语音URL或路径、Base64
83
+ * @param magic - 是否魔法语音,默认为 false
84
+ * @param md5 - 语音md5
85
+ * @param name - 语音名称
86
+ * @returns {VoiceElement} 语音元素
87
+ */
88
+ voice(file: string, magic?: boolean, md5?: string, name?: string): VoiceElement;
89
+ /**
90
+ * 视频
91
+ * @param file - 视频URL或路径、Base64
92
+ * @param md5 - 视频md5
93
+ * @param name - 视频名称
94
+ * @returns {VideoElement} 视频元素
95
+ */
96
+ video(file: string, md5?: string, name?: string): VideoElement;
97
+ /**
98
+ * 篮球
99
+ * @param id - 篮球ID
100
+ * @returns {BasketballElement} 篮球元素
101
+ */
102
+ basketball(id: number): BasketballElement;
103
+ /**
104
+ * 骰子
105
+ * @param id - 骰子ID
106
+ * @returns {DiceElement} 骰子元素
107
+ */
108
+ dice(id: number): DiceElement;
109
+ /**
110
+ * 石头剪刀布
111
+ * @param id - 石头剪刀布ID
112
+ * @returns {RpsElement} 石头剪刀布元素
113
+ */
114
+ rps(id: number): RpsElement;
115
+ /**
116
+ * 戳一戳
117
+ * @param id - 戳一戳ID
118
+ * @param poke_type - 戳一戳类型
119
+ * @param strength - 戳一戳强度(1-5 默认1)
120
+ * @returns {PokeElement} 戳一戳元素
121
+ */
122
+ poke(id: number, poke_type: number, strength?: number): PokeElement;
123
+ /**
124
+ * 自定义音乐
125
+ * @param url - 跳转链接
126
+ * @param audio - 音乐音频链接
127
+ * @param title - 标题
128
+ * @param author - 歌手
129
+ * @param pic - 封面
130
+ * @returns {CustomMusicElemen} 自定义音乐元素
131
+ */
132
+ customMusic(url: string, audio: string, title: string, author: string, pic: string): CustomMusicElemen;
133
+ /**
134
+ * 音乐
135
+ * @param platform - 音乐平台
136
+ * @param id - 音乐ID
137
+ * @returns {MusicElement} 音乐元素
138
+ */
139
+ music(platform: 'QQ' | 'netease' | 'custom', id: string): MusicElement;
140
+ /**
141
+ * 天气
142
+ * @param city - 城市名称
143
+ * @param code - 城市代码
144
+ * @returns {WeatherElement} 天气元素
145
+ */
146
+ weather(city: string, code: string): WeatherElement;
147
+ /**
148
+ * 位置
149
+ * @param lat - 纬度
150
+ * @param lon - 经度
151
+ * @param title - 标题
152
+ * @param address - 地址
153
+ * @returns {LocationElement} 位置元素
154
+ */
155
+ location(lat: number, lon: number, title: string, address: string): LocationElement;
156
+ /**
157
+ * 分享
158
+ * @param url - 分享链接
159
+ * @param title - 分享标题
160
+ * @param content - 分享内容
161
+ * @param image - 分享图片
162
+ * @returns {ShareElement} 分享元素
163
+ */
164
+ share(url: string, title: string, content: string, image: string): ShareElement;
165
+ /**
166
+ * 礼物
167
+ * @param qq - QQ 号
168
+ * @param id - 礼物ID
169
+ * @returns {GiftElement} 礼物元素
170
+ */
171
+ gift(qq: number, id: number): GiftElement;
172
+ /**
173
+ * 商城表情
174
+ * @param id - 表情ID
175
+ * @returns {MarketFaceElement} 商城表情元素
176
+ */
177
+ marketFace(id: string): MarketFaceElement;
178
+ /**
179
+ * 转发
180
+ * @param res_id - 资源ID
181
+ * @param uniseq - 序列号(可能不对?)
182
+ * @param summary - 摘要
183
+ * @param description - 描述
184
+ * @returns {ForwardElement} 转发元素
185
+ */
186
+ forward(res_id: string, uniseq?: string, summary?: string, description?: string): ForwardElement;
187
+ /**
188
+ * 分享名片
189
+ * @param scene - 分享类型
190
+ * @param peer - 被推荐人的QQ号或者被推荐群的群号
191
+ * @returns {ContactElement} 分享名片元素
192
+ */
193
+ contact(scene: 'group' | 'friend', peer: string): ContactElement;
194
+ /**
195
+ * JSON
196
+ * @param data - JSON序列化过的字符串
197
+ * @returns {JsonElement} JSON元素
198
+ */
199
+ json(data: string): JsonElement;
200
+ /**
201
+ * XML
202
+ * @param data - XML字符串
203
+ * @returns {XmlElement} XML元素
204
+ */
205
+ xml(data: string): XmlElement;
206
+ /**
207
+ * 文件
208
+ */
209
+ file(options: {
210
+ /**
211
+ * - 文件URL
212
+ */
213
+ url: string;
214
+ /**
215
+ * - 文件名称
216
+ */
217
+ name?: string;
218
+ /**
219
+ * - 文件大小
220
+ */
221
+ size?: number;
222
+ /**
223
+ * - 文件过期时间
224
+ */
225
+ expire_time?: number;
226
+ /**
227
+ * - 文件ID
228
+ */
229
+ id?: string;
230
+ /**
231
+ * - 未知
232
+ */
233
+ biz?: number;
234
+ /**
235
+ * - 文件子ID
236
+ */
237
+ sub_id?: string;
238
+ /**
239
+ * - 文件MD5
240
+ */
241
+ md5?: string;
242
+ }): FileElement;
243
+ /**
244
+ * Markdown
245
+ * @param content - 原生markdown内容
246
+ * @returns {ContentElement} Markdown元素
247
+ */
248
+ markdown(content: string, params?: Array<{
249
+ /**
250
+ * - 模板参数键名称
251
+ */
252
+ key: string;
253
+ /**
254
+ * - 模板参数值
255
+ */
256
+ values: Array<string>;
257
+ }>): ContentElement | TemplateElement;
258
+ /**
259
+ * 按钮
260
+ * @param data - 按钮数据
261
+ * @returns {ButtonElement} 按钮元素
262
+ */
263
+ button(data: ButtonElement['data']): ButtonElement;
264
+ rows(data: Array<ButtonElement['data']>): {
265
+ type: 'rows';
266
+ rows: Array<ButtonElement>;
267
+ };
268
+ /**
269
+ * 转发自定义节点
270
+ * @param user_id - 用户ID
271
+ * @param nickname - 用户昵称
272
+ * @param content - 节点内容
273
+ */
274
+ node(user_id: string, nickname: string, content: KarinElement | Array<KarinElement>): KarinNodeElement;
275
+ };
276
+ export default _default;
@@ -0,0 +1,448 @@
1
+ export default new (class Segment {
2
+ /**
3
+ * 纯文本
4
+ * @param text - 文本内容
5
+ * @returns {TextElement} 纯文本元素
6
+ */
7
+ text (text) {
8
+ return {
9
+ type: 'text',
10
+ text: text + '',
11
+ }
12
+ }
13
+
14
+ /**
15
+ * 提及
16
+ * 提供一个uid即可
17
+ * @param uid - uid
18
+ * @param uin - uin
19
+ * @returns {AtElement} 提及元素
20
+ */
21
+ at (uid, uin) {
22
+ return {
23
+ type: 'at',
24
+ uid: uid + '',
25
+ uin: (uin || '') + '',
26
+ }
27
+ }
28
+
29
+ /**
30
+ * 表情
31
+ * @param id - 表情ID
32
+ * @param is_big - 是否大表情,默认不是
33
+ * @returns {FaceElement} 表情元素
34
+ */
35
+ face (id, is_big = false) {
36
+ return {
37
+ type: 'face',
38
+ id: Number(id),
39
+ is_big,
40
+ }
41
+ }
42
+
43
+ /**
44
+ * 弹射表情
45
+ * @param id - 表情ID
46
+ * @param count - 数量
47
+ * @returns {BubbleFaceElement} 弹射表情元素
48
+ */
49
+ bubble_face (id, count = 1) {
50
+ return {
51
+ type: 'bubble_face',
52
+ id: Number(id),
53
+ count: Number(count),
54
+ }
55
+ }
56
+
57
+ /**
58
+ * 引用回复
59
+ * @param message_id - 消息ID
60
+ * @returns {ReplyElement} 引用回复元素
61
+ */
62
+ reply (message_id) {
63
+ return {
64
+ type: 'reply',
65
+ message_id: message_id + '',
66
+ }
67
+ }
68
+
69
+ /**
70
+ * 图片
71
+ * - 一般情况提供一个file参数即可,其他参数一般为收到的消息中的参数
72
+ * @param file - 图片URL或路径、Base64
73
+ * @param options - 图片类型、名称、MD5、子类型、宽度、高度
74
+ * @returns {ImageElement} 图片元素
75
+ */
76
+ image (file, options = {}) {
77
+ const file_type = options.file_type || 'original'
78
+ const name = options.name || ''
79
+ const md5 = options.md5 || ''
80
+ const sub_type = options.sub_type || 0
81
+ const width = options.width || 0
82
+ const height = options.height || 0
83
+ return {
84
+ type: 'image',
85
+ file,
86
+ file_type,
87
+ name,
88
+ md5,
89
+ sub_type,
90
+ width,
91
+ height,
92
+ }
93
+ }
94
+
95
+ /**
96
+ * 语音
97
+ * @description 即将废弃,请使用voice
98
+ * @param file - 语音URL或路径、Base64
99
+ * @param magic - 是否魔法语音,默认为 false
100
+ * @param md5 - 语音md5
101
+ * @param name - 语音名称
102
+ * @returns {VoiceElement} 语音元素
103
+ */
104
+ record (file, magic = false, md5 = '', name = '') {
105
+ return {
106
+ type: 'voice',
107
+ file,
108
+ magic,
109
+ md5,
110
+ name,
111
+ }
112
+ }
113
+
114
+ /**
115
+ * 语音
116
+ * @param file - 语音URL或路径、Base64
117
+ * @param magic - 是否魔法语音,默认为 false
118
+ * @param md5 - 语音md5
119
+ * @param name - 语音名称
120
+ * @returns {VoiceElement} 语音元素
121
+ */
122
+ voice (file, magic = false, md5 = '', name = '') {
123
+ return {
124
+ type: 'voice',
125
+ file,
126
+ magic,
127
+ md5,
128
+ name,
129
+ }
130
+ }
131
+
132
+ /**
133
+ * 视频
134
+ * @param file - 视频URL或路径、Base64
135
+ * @param md5 - 视频md5
136
+ * @param name - 视频名称
137
+ * @returns {VideoElement} 视频元素
138
+ */
139
+ video (file, md5 = '', name = '') {
140
+ return {
141
+ type: 'video',
142
+ file,
143
+ md5,
144
+ name,
145
+ }
146
+ }
147
+
148
+ /**
149
+ * 篮球
150
+ * @param id - 篮球ID
151
+ * @returns {BasketballElement} 篮球元素
152
+ */
153
+ basketball (id) {
154
+ return {
155
+ type: 'basketball',
156
+ id,
157
+ }
158
+ }
159
+
160
+ /**
161
+ * 骰子
162
+ * @param id - 骰子ID
163
+ * @returns {DiceElement} 骰子元素
164
+ */
165
+ dice (id) {
166
+ return {
167
+ type: 'dice',
168
+ id,
169
+ }
170
+ }
171
+
172
+ /**
173
+ * 石头剪刀布
174
+ * @param id - 石头剪刀布ID
175
+ * @returns {RpsElement} 石头剪刀布元素
176
+ */
177
+ rps (id) {
178
+ return {
179
+ type: 'rps',
180
+ id,
181
+ }
182
+ }
183
+
184
+ /**
185
+ * 戳一戳
186
+ * @param id - 戳一戳ID
187
+ * @param poke_type - 戳一戳类型
188
+ * @param strength - 戳一戳强度(1-5 默认1)
189
+ * @returns {PokeElement} 戳一戳元素
190
+ */
191
+ poke (id, poke_type, strength = 1) {
192
+ return {
193
+ type: 'poke',
194
+ id,
195
+ poke_type,
196
+ strength,
197
+ }
198
+ }
199
+
200
+ /**
201
+ * 自定义音乐
202
+ * @param url - 跳转链接
203
+ * @param audio - 音乐音频链接
204
+ * @param title - 标题
205
+ * @param author - 歌手
206
+ * @param pic - 封面
207
+ * @returns {CustomMusicElemen} 自定义音乐元素
208
+ */
209
+ customMusic (url, audio, title, author, pic) {
210
+ return {
211
+ type: 'music',
212
+ platform: 'custom',
213
+ url,
214
+ audio,
215
+ title,
216
+ author,
217
+ pic,
218
+ }
219
+ }
220
+
221
+ /**
222
+ * 音乐
223
+ * @param platform - 音乐平台
224
+ * @param id - 音乐ID
225
+ * @returns {MusicElement} 音乐元素
226
+ */
227
+ music (platform, id) {
228
+ return {
229
+ type: 'music',
230
+ platform,
231
+ id,
232
+ }
233
+ }
234
+
235
+ /**
236
+ * 天气
237
+ * @param city - 城市名称
238
+ * @param code - 城市代码
239
+ * @returns {WeatherElement} 天气元素
240
+ */
241
+ weather (city, code) {
242
+ return {
243
+ type: 'weather',
244
+ city,
245
+ code,
246
+ }
247
+ }
248
+
249
+ /**
250
+ * 位置
251
+ * @param lat - 纬度
252
+ * @param lon - 经度
253
+ * @param title - 标题
254
+ * @param address - 地址
255
+ * @returns {LocationElement} 位置元素
256
+ */
257
+ location (lat, lon, title, address) {
258
+ return {
259
+ type: 'location',
260
+ lat,
261
+ lon,
262
+ title,
263
+ address,
264
+ }
265
+ }
266
+
267
+ /**
268
+ * 分享
269
+ * @param url - 分享链接
270
+ * @param title - 分享标题
271
+ * @param content - 分享内容
272
+ * @param image - 分享图片
273
+ * @returns {ShareElement} 分享元素
274
+ */
275
+ share (url, title, content, image) {
276
+ return {
277
+ type: 'share',
278
+ url,
279
+ title,
280
+ content,
281
+ image,
282
+ }
283
+ }
284
+
285
+ /**
286
+ * 礼物
287
+ * @param qq - QQ 号
288
+ * @param id - 礼物ID
289
+ * @returns {GiftElement} 礼物元素
290
+ */
291
+ gift (qq, id) {
292
+ return {
293
+ type: 'gift',
294
+ qq,
295
+ id,
296
+ }
297
+ }
298
+
299
+ /**
300
+ * 商城表情
301
+ * @param id - 表情ID
302
+ * @returns {MarketFaceElement} 商城表情元素
303
+ */
304
+ marketFace (id) {
305
+ return {
306
+ type: 'market_face',
307
+ id,
308
+ }
309
+ }
310
+
311
+ /**
312
+ * 转发
313
+ * @param res_id - 资源ID
314
+ * @param uniseq - 序列号(可能不对?)
315
+ * @param summary - 摘要
316
+ * @param description - 描述
317
+ * @returns {ForwardElement} 转发元素
318
+ */
319
+ forward (res_id, uniseq, summary, description) {
320
+ return {
321
+ type: 'forward',
322
+ res_id,
323
+ uniseq: uniseq || '',
324
+ summary: summary || '',
325
+ description: description || '',
326
+ }
327
+ }
328
+
329
+ /**
330
+ * 分享名片
331
+ * @param scene - 分享类型
332
+ * @param peer - 被推荐人的QQ号或者被推荐群的群号
333
+ * @returns {ContactElement} 分享名片元素
334
+ */
335
+ contact (scene, peer) {
336
+ return {
337
+ type: 'contact',
338
+ scene,
339
+ peer,
340
+ }
341
+ }
342
+
343
+ /**
344
+ * JSON
345
+ * @param data - JSON序列化过的字符串
346
+ * @returns {JsonElement} JSON元素
347
+ */
348
+ json (data) {
349
+ return {
350
+ type: 'json',
351
+ data,
352
+ }
353
+ }
354
+
355
+ /**
356
+ * XML
357
+ * @param data - XML字符串
358
+ * @returns {XmlElement} XML元素
359
+ */
360
+ xml (data) {
361
+ return {
362
+ type: 'xml',
363
+ data,
364
+ }
365
+ }
366
+
367
+ /**
368
+ * 文件
369
+ */
370
+ file (options) {
371
+ return {
372
+ type: 'file',
373
+ file: options.url,
374
+ name: options.name || '',
375
+ size: options.size || 0,
376
+ expire_time: options.expire_time || 0,
377
+ id: options.id || '',
378
+ url: options.url,
379
+ biz: options.biz || 0,
380
+ sub_id: options.sub_id || '',
381
+ md5: options.md5 || '',
382
+ }
383
+ }
384
+
385
+ /**
386
+ * Markdown
387
+ * @param content - 原生markdown内容
388
+ * @returns {ContentElement} Markdown元素
389
+ */
390
+ markdown (
391
+ /**
392
+ * - 原生markdown内容 或 模板ID
393
+ */
394
+ content,
395
+ /**
396
+ * - 模板markdown参数 原生markdown内容时无效
397
+ */
398
+ params = []) {
399
+ if (typeof content === 'string') {
400
+ return {
401
+ type: 'markdown',
402
+ content,
403
+ }
404
+ }
405
+ return {
406
+ type: 'markdown',
407
+ custom_template_id: content,
408
+ params,
409
+ }
410
+ }
411
+
412
+ /**
413
+ * 按钮
414
+ * @param data - 按钮数据
415
+ * @returns {ButtonElement} 按钮元素
416
+ */
417
+ button (data) {
418
+ return {
419
+ type: 'button',
420
+ data,
421
+ }
422
+ }
423
+
424
+ rows (data) {
425
+ const rows = []
426
+ if (!Array.isArray(data)) { data = [data] }
427
+ for (const i of data) {
428
+ rows.push(this.button(i))
429
+ continue
430
+ }
431
+ return { type: 'rows', rows }
432
+ }
433
+
434
+ /**
435
+ * 转发自定义节点
436
+ * @param user_id - 用户ID
437
+ * @param nickname - 用户昵称
438
+ * @param content - 节点内容
439
+ */
440
+ node (user_id, nickname, content) {
441
+ return {
442
+ type: 'node',
443
+ user_id,
444
+ nickname,
445
+ content,
446
+ }
447
+ }
448
+ })()