node-karin 0.0.3 → 0.1.0

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 (105) hide show
  1. package/LICENSE +674 -674
  2. package/README.md +57 -57
  3. package/config/defSet/App.yaml +37 -37
  4. package/config/defSet/config.yaml +43 -43
  5. package/config/defSet/group.yaml +18 -18
  6. package/config/defSet/pm2.yaml +21 -21
  7. package/config/defSet/server.yaml +42 -42
  8. package/config/view/App.yaml +74 -74
  9. package/config/view/config.yaml +100 -100
  10. package/config/view/group.yaml +62 -62
  11. package/config/view/pm2.yaml +41 -41
  12. package/config/view/redis.yaml +25 -25
  13. package/config/view/server.yaml +93 -93
  14. package/lib/adapter/onebot/onebot11.d.ts +430 -430
  15. package/lib/adapter/onebot/onebot11.js +1265 -1302
  16. package/lib/core/init.js +4 -4
  17. package/lib/core/karin.d.ts +72 -72
  18. package/lib/core/karin.js +51 -51
  19. package/lib/core/listener.d.ts +121 -121
  20. package/lib/core/listener.js +178 -178
  21. package/lib/core/plugin.app.d.ts +15 -15
  22. package/lib/core/plugin.app.js +18 -18
  23. package/lib/core/plugin.d.ts +182 -182
  24. package/lib/core/plugin.js +132 -132
  25. package/lib/core/plugin.loader.d.ts +149 -149
  26. package/lib/core/plugin.loader.js +451 -451
  27. package/lib/core/server.d.ts +26 -26
  28. package/lib/core/server.js +209 -209
  29. package/lib/db/level.d.ts +20 -20
  30. package/lib/db/level.js +36 -36
  31. package/lib/db/redis.d.ts +41 -41
  32. package/lib/db/redis.js +131 -131
  33. package/lib/db/redis_level.d.ts +113 -113
  34. package/lib/db/redis_level.js +274 -274
  35. package/lib/event/event.d.ts +138 -138
  36. package/lib/event/event.handler.d.ts +29 -29
  37. package/lib/event/event.handler.js +138 -138
  38. package/lib/event/event.js +120 -120
  39. package/lib/event/message.d.ts +102 -102
  40. package/lib/event/message.handler.d.ts +25 -25
  41. package/lib/event/message.handler.js +237 -237
  42. package/lib/event/message.js +69 -69
  43. package/lib/event/notice.d.ts +49 -49
  44. package/lib/event/notice.js +14 -14
  45. package/lib/event/request.d.ts +49 -49
  46. package/lib/event/request.js +14 -14
  47. package/lib/event/review.handler.d.ts +54 -54
  48. package/lib/event/review.handler.js +374 -374
  49. package/lib/index.d.ts +23 -23
  50. package/lib/index.js +39 -40
  51. package/lib/renderer/app.d.ts +53 -53
  52. package/lib/renderer/app.js +88 -88
  53. package/lib/renderer/base.d.ts +30 -30
  54. package/lib/renderer/base.js +68 -68
  55. package/lib/renderer/client.d.ts +30 -30
  56. package/lib/renderer/client.js +155 -155
  57. package/lib/renderer/http.d.ts +19 -19
  58. package/lib/renderer/http.js +50 -50
  59. package/lib/renderer/server.d.ts +42 -42
  60. package/lib/renderer/server.js +110 -110
  61. package/lib/renderer/wormhole.d.ts +1 -1
  62. package/lib/renderer/wormhole.js +154 -154
  63. package/lib/types/adapter.d.ts +575 -575
  64. package/lib/types/adapter.js +1 -1
  65. package/lib/types/config.d.ts +327 -327
  66. package/lib/types/config.js +1 -1
  67. package/lib/types/element.d.ts +576 -576
  68. package/lib/types/element.js +1 -1
  69. package/lib/types/index.d.ts +8 -8
  70. package/lib/types/index.js +8 -8
  71. package/lib/types/logger.d.ts +109 -109
  72. package/lib/types/logger.js +1 -1
  73. package/lib/types/onebots11.d.ts +1371 -1371
  74. package/lib/types/onebots11.js +1 -1
  75. package/lib/types/plugin.d.ts +282 -282
  76. package/lib/types/plugin.js +1 -1
  77. package/lib/types/render.d.ts +111 -111
  78. package/lib/types/render.js +1 -1
  79. package/lib/types/reply.d.ts +40 -40
  80. package/lib/types/reply.js +1 -1
  81. package/lib/types/types.d.ts +898 -898
  82. package/lib/types/types.js +1 -1
  83. package/lib/utils/YamlEditor.d.ts +62 -62
  84. package/lib/utils/YamlEditor.js +197 -197
  85. package/lib/utils/button.d.ts +49 -49
  86. package/lib/utils/button.js +75 -75
  87. package/lib/utils/common.d.ts +123 -123
  88. package/lib/utils/common.js +396 -396
  89. package/lib/utils/config.d.ts +72 -72
  90. package/lib/utils/config.js +254 -254
  91. package/lib/utils/exec.d.ts +22 -22
  92. package/lib/utils/exec.js +36 -36
  93. package/lib/utils/ffmpeg.d.ts +12 -12
  94. package/lib/utils/ffmpeg.js +25 -25
  95. package/lib/utils/handler.d.ts +76 -76
  96. package/lib/utils/handler.js +98 -98
  97. package/lib/utils/logger.d.ts +3 -3
  98. package/lib/utils/logger.js +104 -104
  99. package/lib/utils/segment.d.ts +276 -276
  100. package/lib/utils/segment.js +420 -420
  101. package/lib/utils/update.d.ts +69 -69
  102. package/lib/utils/update.js +145 -145
  103. package/lib/utils/updateVersion.d.ts +33 -33
  104. package/lib/utils/updateVersion.js +140 -140
  105. package/package.json +92 -91
@@ -1,138 +1,138 @@
1
- import { Reply, replyCallback } from '../types/reply.js';
2
- import { KarinAdapter } from '../types/adapter.js';
3
- import { Event, contact, Sender, SubEventForEvent } from '../types/types.js';
4
- /**
5
- * - 事件基类 所有事件都继承自此类并且需要实现此类的所有属性
6
- * @class KarinEvent
7
- */
8
- export declare class KarinEvent {
9
- /**
10
- * - 机器人ID 请尽量使用UID
11
- */
12
- self_id: string;
13
- /**
14
- * - 用户ID
15
- */
16
- user_id: string;
17
- /**
18
- * - 群ID 仅在群聊中存在
19
- * @default ''
20
- */
21
- group_id: string;
22
- /**
23
- * - 事件类型
24
- */
25
- event: Event;
26
- /**
27
- * - 事件子类型
28
- */
29
- sub_event: SubEventForEvent<Event>;
30
- /**
31
- * - 事件ID
32
- */
33
- event_id: string;
34
- /**
35
- * - 事件触发时间戳
36
- */
37
- time: number;
38
- /**
39
- * - 事件联系人信息
40
- */
41
- contact: contact;
42
- /**
43
- * - 事件发送者信息
44
- */
45
- sender: Sender;
46
- /**
47
- * - 是否为主人
48
- * @default false
49
- */
50
- isMaster: boolean;
51
- /**
52
- * - 是否为管理员
53
- * @default false
54
- */
55
- isAdmin: boolean;
56
- /**
57
- * - 是否为私聊
58
- * @default false
59
- */
60
- isPrivate: boolean;
61
- /**
62
- * - 是否为群聊
63
- * @default false
64
- */
65
- isGroup: boolean;
66
- /**
67
- * - 是否为频道
68
- * @default false
69
- */
70
- isGuild: boolean;
71
- /**
72
- * - 是否为群临时会话
73
- * @default false
74
- */
75
- isGroupTemp: boolean;
76
- /**
77
- * - 日志函数字符串
78
- */
79
- logFnc: string;
80
- /**
81
- * - 日志用户字符串
82
- */
83
- logText: string;
84
- /**
85
- * - 存储器 由开发者自行调用
86
- */
87
- store: Map<string, any>;
88
- /**
89
- * - 回复函数
90
- */
91
- reply: Reply;
92
- /**
93
- * - 回复函数 由适配器实现,开发者不应该直接调用
94
- */
95
- replyCallback: replyCallback;
96
- /**
97
- * - bot实现
98
- */
99
- bot: KarinAdapter;
100
- constructor({ event, self_id, user_id, group_id, time, contact, sender, sub_event, event_id, }: {
101
- /**
102
- * - 事件类型
103
- */
104
- event: Event;
105
- /**
106
- * - 机器人ID 请尽量使用UID
107
- */
108
- self_id: string;
109
- /**
110
- * - 用户ID
111
- */
112
- user_id: string;
113
- /**
114
- * - 群ID 仅在群聊中需要提供
115
- */
116
- group_id?: string;
117
- /**
118
- * - 事件触发时间戳
119
- */
120
- time: number;
121
- /**
122
- * - 事件联系人信息
123
- */
124
- contact: contact;
125
- /**
126
- * - 事件发送者信息
127
- */
128
- sender: Sender;
129
- /**
130
- * - 事件子类型
131
- */
132
- sub_event: SubEventForEvent<Event>;
133
- /**
134
- * - 事件ID
135
- */
136
- event_id: string;
137
- });
138
- }
1
+ import { Reply, replyCallback } from '../types/reply.js';
2
+ import { KarinAdapter } from '../types/adapter.js';
3
+ import { Event, contact, Sender, SubEventForEvent } from '../types/types.js';
4
+ /**
5
+ * - 事件基类 所有事件都继承自此类并且需要实现此类的所有属性
6
+ * @class KarinEvent
7
+ */
8
+ export declare class KarinEvent {
9
+ /**
10
+ * - 机器人ID 请尽量使用UID
11
+ */
12
+ self_id: string;
13
+ /**
14
+ * - 用户ID
15
+ */
16
+ user_id: string;
17
+ /**
18
+ * - 群ID 仅在群聊中存在
19
+ * @default ''
20
+ */
21
+ group_id: string;
22
+ /**
23
+ * - 事件类型
24
+ */
25
+ event: Event;
26
+ /**
27
+ * - 事件子类型
28
+ */
29
+ sub_event: SubEventForEvent<Event>;
30
+ /**
31
+ * - 事件ID
32
+ */
33
+ event_id: string;
34
+ /**
35
+ * - 事件触发时间戳
36
+ */
37
+ time: number;
38
+ /**
39
+ * - 事件联系人信息
40
+ */
41
+ contact: contact;
42
+ /**
43
+ * - 事件发送者信息
44
+ */
45
+ sender: Sender;
46
+ /**
47
+ * - 是否为主人
48
+ * @default false
49
+ */
50
+ isMaster: boolean;
51
+ /**
52
+ * - 是否为管理员
53
+ * @default false
54
+ */
55
+ isAdmin: boolean;
56
+ /**
57
+ * - 是否为私聊
58
+ * @default false
59
+ */
60
+ isPrivate: boolean;
61
+ /**
62
+ * - 是否为群聊
63
+ * @default false
64
+ */
65
+ isGroup: boolean;
66
+ /**
67
+ * - 是否为频道
68
+ * @default false
69
+ */
70
+ isGuild: boolean;
71
+ /**
72
+ * - 是否为群临时会话
73
+ * @default false
74
+ */
75
+ isGroupTemp: boolean;
76
+ /**
77
+ * - 日志函数字符串
78
+ */
79
+ logFnc: string;
80
+ /**
81
+ * - 日志用户字符串
82
+ */
83
+ logText: string;
84
+ /**
85
+ * - 存储器 由开发者自行调用
86
+ */
87
+ store: Map<string, any>;
88
+ /**
89
+ * - 回复函数
90
+ */
91
+ reply: Reply;
92
+ /**
93
+ * - 回复函数 由适配器实现,开发者不应该直接调用
94
+ */
95
+ replyCallback: replyCallback;
96
+ /**
97
+ * - bot实现
98
+ */
99
+ bot: KarinAdapter;
100
+ constructor({ event, self_id, user_id, group_id, time, contact, sender, sub_event, event_id, }: {
101
+ /**
102
+ * - 事件类型
103
+ */
104
+ event: Event;
105
+ /**
106
+ * - 机器人ID 请尽量使用UID
107
+ */
108
+ self_id: string;
109
+ /**
110
+ * - 用户ID
111
+ */
112
+ user_id: string;
113
+ /**
114
+ * - 群ID 仅在群聊中需要提供
115
+ */
116
+ group_id?: string;
117
+ /**
118
+ * - 事件触发时间戳
119
+ */
120
+ time: number;
121
+ /**
122
+ * - 事件联系人信息
123
+ */
124
+ contact: contact;
125
+ /**
126
+ * - 事件发送者信息
127
+ */
128
+ sender: Sender;
129
+ /**
130
+ * - 事件子类型
131
+ */
132
+ sub_event: SubEventForEvent<Event>;
133
+ /**
134
+ * - 事件ID
135
+ */
136
+ event_id: string;
137
+ });
138
+ }
@@ -1,29 +1,29 @@
1
- import { GroupCfg } from '../types/config.js';
2
- import { KarinMessage } from './message.js';
3
- import { KarinNotice } from './notice.js';
4
- import { KarinRequest } from './request.js';
5
- import { Event, Permission, SubEvent } from '../types/types.js';
6
- export default class EventHandler {
7
- e: KarinMessage | KarinNotice | KarinRequest;
8
- config: GroupCfg | {};
9
- /**
10
- * 处理事件,加入自定义字段
11
- */
12
- constructor(e: KarinMessage | KarinNotice | KarinRequest);
13
- /**
14
- * 事件处理
15
- */
16
- review(): boolean;
17
- /**
18
- * 根据事件类型过滤事件
19
- */
20
- filtEvent(event: Event | `${Event}.${SubEvent}`): boolean;
21
- /**
22
- * 判断权限
23
- */
24
- filterPermission(permission: Permission | undefined): boolean;
25
- /**
26
- * 快速回复
27
- */
28
- reply(): void;
29
- }
1
+ import { GroupCfg } from '../types/config.js';
2
+ import { KarinMessage } from './message.js';
3
+ import { KarinNotice } from './notice.js';
4
+ import { KarinRequest } from './request.js';
5
+ import { Event, Permission, SubEvent } from '../types/types.js';
6
+ export default class EventHandler {
7
+ e: KarinMessage | KarinNotice | KarinRequest;
8
+ config: GroupCfg | {};
9
+ /**
10
+ * 处理事件,加入自定义字段
11
+ */
12
+ constructor(e: KarinMessage | KarinNotice | KarinRequest);
13
+ /**
14
+ * 事件处理
15
+ */
16
+ review(): boolean;
17
+ /**
18
+ * 根据事件类型过滤事件
19
+ */
20
+ filtEvent(event: Event | `${Event}.${SubEvent}`): boolean;
21
+ /**
22
+ * 判断权限
23
+ */
24
+ filterPermission(permission: Permission | undefined): boolean;
25
+ /**
26
+ * 快速回复
27
+ */
28
+ reply(): void;
29
+ }
@@ -1,142 +1,142 @@
1
- import Review from './review.handler.js'
2
- import config from '../utils/config.js'
3
- import logger from '../utils/logger.js'
4
- import Common from '../utils/common.js'
5
- import Segment from '../utils/segment.js'
6
- import Listeners from '../core/listener.js'
7
- export default class EventHandler {
8
- e
9
- config
10
- /**
11
- * 处理事件,加入自定义字段
12
- */
13
- constructor (e) {
14
- this.e = e
15
- this.config = {}
16
- /** 加入e.bot */
17
- Object.defineProperty(this.e, 'bot', { value: Listeners.getBot(this.e.self_id) })
18
- if (this.e.group_id) { this.config = config.group(this.e.group_id) }
1
+ import Review from './review.handler.js'
2
+ import config from '../utils/config.js'
3
+ import logger from '../utils/logger.js'
4
+ import Common from '../utils/common.js'
5
+ import Segment from '../utils/segment.js'
6
+ import Listeners from '../core/listener.js'
7
+ export default class EventHandler {
8
+ e
9
+ config
10
+ /**
11
+ * 处理事件,加入自定义字段
12
+ */
13
+ constructor (e) {
14
+ this.e = e
15
+ this.config = {}
16
+ /** 加入e.bot */
17
+ Object.defineProperty(this.e, 'bot', { value: Listeners.getBot(this.e.self_id) })
18
+ if (this.e.group_id) { this.config = config.group(this.e.group_id) }
19
19
  }
20
-
21
- /**
22
- * 事件处理
23
- */
24
- review () {
25
- /** 检查CD */
26
- if (!Review.CD(this.e, this.config)) {
27
- logger.debug('[消息拦截] 正在冷却中')
28
- return true
29
- }
30
- /** 检查群聊黑白名单 */
31
- if (!Review.GroupEnable(this.e)) {
32
- logger.debug('[消息拦截] 未通过群聊黑白名单检查')
33
- return true
34
- }
35
- /** 检查用户黑白名单 */
36
- if (!Review.UserEnable(this.e)) {
37
- logger.debug('[消息拦截] 未通过用户黑白名单检查')
38
- return true
39
- }
40
- /** 都通过了 */
41
- return false
20
+
21
+ /**
22
+ * 事件处理
23
+ */
24
+ review () {
25
+ /** 检查CD */
26
+ if (!Review.CD(this.e, this.config)) {
27
+ logger.debug('[消息拦截] 正在冷却中')
28
+ return true
29
+ }
30
+ /** 检查群聊黑白名单 */
31
+ if (!Review.GroupEnable(this.e)) {
32
+ logger.debug('[消息拦截] 未通过群聊黑白名单检查')
33
+ return true
34
+ }
35
+ /** 检查用户黑白名单 */
36
+ if (!Review.UserEnable(this.e)) {
37
+ logger.debug('[消息拦截] 未通过用户黑白名单检查')
38
+ return true
39
+ }
40
+ /** 都通过了 */
41
+ return false
42
42
  }
43
-
44
- /**
45
- * 根据事件类型过滤事件
46
- */
47
- filtEvent (event) {
48
- /** 事件映射表 */
49
- const eventMap = {
50
- message: () => `message.${this.e.sub_event}`,
51
- message_sent: () => `message_sent.${this.e.sub_event}`,
52
- meta_event: () => `message.${this.e.sub_event}`,
53
- notice: () => `notice.${this.e.sub_event}`,
54
- request: () => `request.${this.e.sub_event}`,
55
- }
56
- const eventType = eventMap[this.e.event]()
57
- return eventType.includes(event)
43
+
44
+ /**
45
+ * 根据事件类型过滤事件
46
+ */
47
+ filtEvent (event) {
48
+ /** 事件映射表 */
49
+ const eventMap = {
50
+ message: () => `message.${this.e.sub_event}`,
51
+ message_sent: () => `message_sent.${this.e.sub_event}`,
52
+ meta_event: () => `message.${this.e.sub_event}`,
53
+ notice: () => `notice.${this.e.sub_event}`,
54
+ request: () => `request.${this.e.sub_event}`,
55
+ }
56
+ const eventType = eventMap[this.e.event]()
57
+ return eventType.includes(event)
58
58
  }
59
-
60
- /**
61
- * 判断权限
62
- */
63
- filterPermission (permission) {
64
- if (!permission || permission === 'all') { return true }
65
- if (permission === 'master') {
66
- if (!this.e.isMaster) {
67
- this.e.reply('暂无权限,只有主人才能操作')
68
- return false
69
- }
70
- return true
71
- }
72
- if (permission === 'admin') {
73
- if (!this.e.isMaster && !this.e.isAdmin) {
74
- this.e.reply('暂无权限,只有管理员才能操作')
75
- return false
76
- }
77
- return true
78
- }
79
- if (this.e.isGroup) {
80
- const list = {
81
- 'group.owner': {
82
- role: 'owner',
83
- name: '群主',
84
- },
85
- 'group.admin': {
86
- role: 'admin',
87
- name: '群管理员',
88
- },
89
- }
90
- const role = list[permission]
91
- if (role && this.e.sender?.role !== role.role) {
92
- this.e.reply(`暂无权限,只有${role.name}才能操作`)
93
- return false
94
- }
95
- }
96
- return true
59
+
60
+ /**
61
+ * 判断权限
62
+ */
63
+ filterPermission (permission) {
64
+ if (!permission || permission === 'all') { return true }
65
+ if (permission === 'master') {
66
+ if (!this.e.isMaster) {
67
+ this.e.reply('暂无权限,只有主人才能操作')
68
+ return false
69
+ }
70
+ return true
71
+ }
72
+ if (permission === 'admin') {
73
+ if (!this.e.isMaster && !this.e.isAdmin) {
74
+ this.e.reply('暂无权限,只有管理员才能操作')
75
+ return false
76
+ }
77
+ return true
78
+ }
79
+ if (this.e.isGroup) {
80
+ const list = {
81
+ 'group.owner': {
82
+ role: 'owner',
83
+ name: '群主',
84
+ },
85
+ 'group.admin': {
86
+ role: 'admin',
87
+ name: '群管理员',
88
+ },
89
+ }
90
+ const role = list[permission]
91
+ if (role && this.e.sender?.role !== role.role) {
92
+ this.e.reply(`暂无权限,只有${role.name}才能操作`)
93
+ return false
94
+ }
95
+ }
96
+ return true
97
97
  }
98
-
99
- /**
100
- * 快速回复
101
- */
102
- reply () {
103
- /**
104
- * 快速回复
105
- * @param elements 回复内容
106
- * @param options 回复选项
107
- */
108
- this.e.reply = async (elements = '', options = { reply: false, recallMsg: 0, at: false, retry_count: 1 }) => {
109
- const message = Common.makeMessage(elements)
110
- const { reply = false, recallMsg = 0, at, retry_count = 1 } = options
111
- /** 加入at */
112
- if (at && this.e.isGroup) { message.unshift(Segment.at(this.e.user_id)) }
113
- /** 加入引用回复 */
114
- if (reply && 'message_id' in this.e) { message.unshift(Segment.reply(this.e.message_id)) }
115
- /** 先发 提升速度 */
116
- const result = this.e.replyCallback(message, retry_count)
117
- const ReplyLog = Common.makeMessageLog(message)
118
- if (this.e.isGroup) {
119
- Review.GroupMsgPrint(this.e) && logger.bot('info', this.e.self_id, `${logger.green(`Send Group ${this.e.group_id}: `)}${ReplyLog}`)
120
- } else {
121
- logger.bot('info', this.e.self_id, `${logger.green(`Send private ${this.e.user_id}: `)}${ReplyLog}`)
122
- }
123
- let message_id = ''
124
- try {
125
- Listeners.emit('karin:count:send', 1)
126
- /** 取结果 */
127
- const Res = await result
128
- message_id = Res.message_id || ''
129
- logger.bot('debug', this.e.self_id, `回复消息结果:${JSON.stringify(result)}`)
130
- } catch (error) {
131
- logger.bot('error', this.e.self_id, `回复消息失败:${ReplyLog}`)
132
- logger.bot('error', this.e.self_id, error.stack || error.message || JSON.stringify(error))
133
- }
134
- /** 快速撤回 */
135
- if (recallMsg > 0 && message_id) {
136
- setTimeout(() => this.e.bot.RecallMessage(this.e.contact, message_id), recallMsg * 1000)
137
- }
138
- return result
139
- }
140
- Object.freeze(this.e.reply)
141
- }
142
- }
98
+
99
+ /**
100
+ * 快速回复
101
+ */
102
+ reply () {
103
+ /**
104
+ * 快速回复
105
+ * @param elements 回复内容
106
+ * @param options 回复选项
107
+ */
108
+ this.e.reply = async (elements = '', options = { reply: false, recallMsg: 0, at: false, retry_count: 1 }) => {
109
+ const message = Common.makeMessage(elements)
110
+ const { reply = false, recallMsg = 0, at, retry_count = 1 } = options
111
+ /** 加入at */
112
+ if (at && this.e.isGroup) { message.unshift(Segment.at(this.e.user_id)) }
113
+ /** 加入引用回复 */
114
+ if (reply && 'message_id' in this.e) { message.unshift(Segment.reply(this.e.message_id)) }
115
+ /** 先发 提升速度 */
116
+ const result = this.e.replyCallback(message, retry_count)
117
+ const ReplyLog = Common.makeMessageLog(message)
118
+ if (this.e.isGroup) {
119
+ Review.GroupMsgPrint(this.e) && logger.bot('info', this.e.self_id, `${logger.green(`Send Group ${this.e.group_id}: `)}${ReplyLog}`)
120
+ } else {
121
+ logger.bot('info', this.e.self_id, `${logger.green(`Send private ${this.e.user_id}: `)}${ReplyLog}`)
122
+ }
123
+ let message_id = ''
124
+ try {
125
+ Listeners.emit('karin:count:send', 1)
126
+ /** 取结果 */
127
+ const Res = await result
128
+ message_id = Res.message_id || ''
129
+ logger.bot('debug', this.e.self_id, `回复消息结果:${JSON.stringify(result)}`)
130
+ } catch (error) {
131
+ logger.bot('error', this.e.self_id, `回复消息失败:${ReplyLog}`)
132
+ logger.bot('error', this.e.self_id, error.stack || error.message || JSON.stringify(error))
133
+ }
134
+ /** 快速撤回 */
135
+ if (recallMsg > 0 && message_id) {
136
+ setTimeout(() => this.e.bot.RecallMessage(this.e.contact, message_id), recallMsg * 1000)
137
+ }
138
+ return result
139
+ }
140
+ Object.freeze(this.e.reply)
141
+ }
142
+ }