node-karin 0.0.3 → 0.1.1

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 (109) 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/dir.d.ts +1 -0
  17. package/lib/core/dir.js +4 -0
  18. package/lib/core/init.js +4 -4
  19. package/lib/core/karin.d.ts +72 -72
  20. package/lib/core/karin.js +51 -51
  21. package/lib/core/listener.d.ts +121 -121
  22. package/lib/core/listener.js +178 -178
  23. package/lib/core/plugin.app.d.ts +15 -15
  24. package/lib/core/plugin.app.js +18 -18
  25. package/lib/core/plugin.d.ts +182 -182
  26. package/lib/core/plugin.js +132 -132
  27. package/lib/core/plugin.loader.d.ts +149 -149
  28. package/lib/core/plugin.loader.js +451 -451
  29. package/lib/core/server.d.ts +26 -26
  30. package/lib/core/server.js +209 -209
  31. package/lib/db/level.d.ts +20 -20
  32. package/lib/db/level.js +36 -36
  33. package/lib/db/redis.d.ts +41 -41
  34. package/lib/db/redis.js +131 -131
  35. package/lib/db/redis_level.d.ts +113 -113
  36. package/lib/db/redis_level.js +274 -274
  37. package/lib/event/event.d.ts +138 -138
  38. package/lib/event/event.handler.d.ts +29 -29
  39. package/lib/event/event.handler.js +138 -138
  40. package/lib/event/event.js +120 -120
  41. package/lib/event/message.d.ts +102 -102
  42. package/lib/event/message.handler.d.ts +25 -25
  43. package/lib/event/message.handler.js +237 -237
  44. package/lib/event/message.js +69 -69
  45. package/lib/event/notice.d.ts +49 -49
  46. package/lib/event/notice.js +14 -14
  47. package/lib/event/request.d.ts +49 -49
  48. package/lib/event/request.js +14 -14
  49. package/lib/event/review.handler.d.ts +54 -54
  50. package/lib/event/review.handler.js +374 -374
  51. package/lib/index.d.ts +24 -23
  52. package/lib/index.js +40 -40
  53. package/lib/renderer/app.d.ts +53 -53
  54. package/lib/renderer/app.js +88 -88
  55. package/lib/renderer/base.d.ts +30 -30
  56. package/lib/renderer/base.js +68 -68
  57. package/lib/renderer/client.d.ts +30 -30
  58. package/lib/renderer/client.js +155 -155
  59. package/lib/renderer/http.d.ts +19 -19
  60. package/lib/renderer/http.js +50 -50
  61. package/lib/renderer/server.d.ts +42 -42
  62. package/lib/renderer/server.js +110 -110
  63. package/lib/renderer/wormhole.d.ts +1 -1
  64. package/lib/renderer/wormhole.js +154 -154
  65. package/lib/tools/init.d.ts +2 -0
  66. package/lib/tools/init.js +31 -0
  67. package/lib/types/adapter.d.ts +575 -575
  68. package/lib/types/adapter.js +1 -1
  69. package/lib/types/config.d.ts +327 -327
  70. package/lib/types/config.js +1 -1
  71. package/lib/types/element.d.ts +576 -576
  72. package/lib/types/element.js +1 -1
  73. package/lib/types/index.d.ts +8 -8
  74. package/lib/types/index.js +8 -8
  75. package/lib/types/logger.d.ts +109 -109
  76. package/lib/types/logger.js +1 -1
  77. package/lib/types/onebots11.d.ts +1371 -1371
  78. package/lib/types/onebots11.js +1 -1
  79. package/lib/types/plugin.d.ts +282 -282
  80. package/lib/types/plugin.js +1 -1
  81. package/lib/types/render.d.ts +111 -111
  82. package/lib/types/render.js +1 -1
  83. package/lib/types/reply.d.ts +40 -40
  84. package/lib/types/reply.js +1 -1
  85. package/lib/types/types.d.ts +898 -898
  86. package/lib/types/types.js +1 -1
  87. package/lib/utils/YamlEditor.d.ts +62 -62
  88. package/lib/utils/YamlEditor.js +197 -197
  89. package/lib/utils/button.d.ts +49 -49
  90. package/lib/utils/button.js +75 -75
  91. package/lib/utils/common.d.ts +123 -123
  92. package/lib/utils/common.js +396 -396
  93. package/lib/utils/config.d.ts +72 -72
  94. package/lib/utils/config.js +259 -254
  95. package/lib/utils/exec.d.ts +22 -22
  96. package/lib/utils/exec.js +36 -36
  97. package/lib/utils/ffmpeg.d.ts +12 -12
  98. package/lib/utils/ffmpeg.js +25 -25
  99. package/lib/utils/handler.d.ts +76 -76
  100. package/lib/utils/handler.js +98 -98
  101. package/lib/utils/logger.d.ts +3 -3
  102. package/lib/utils/logger.js +104 -104
  103. package/lib/utils/segment.d.ts +276 -276
  104. package/lib/utils/segment.js +420 -420
  105. package/lib/utils/update.d.ts +69 -69
  106. package/lib/utils/update.js +145 -145
  107. package/lib/utils/updateVersion.d.ts +33 -33
  108. package/lib/utils/updateVersion.js +140 -140
  109. package/package.json +95 -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
+ }