node-karin 0.9.0 → 0.10.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 (131) hide show
  1. package/config/defSet/group.yaml +40 -2
  2. package/lib/adapter/onebot/11/index.d.ts +2 -0
  3. package/lib/adapter/onebot/11/index.js +3 -1
  4. package/lib/cli/init.js +1 -1
  5. package/lib/cli/karin.js +1 -1
  6. package/lib/core/index.d.ts +9 -9
  7. package/lib/core/index.js +9 -9
  8. package/lib/core/init/dir.js +7 -0
  9. package/lib/core/init/init.js +46 -0
  10. package/lib/core/{karin.d.ts → karin/karin.d.ts} +1 -1
  11. package/lib/core/karin/karin.js +194 -0
  12. package/lib/core/{listener.d.ts → listener/listener.d.ts} +1 -1
  13. package/lib/core/listener/listener.js +213 -0
  14. package/lib/core/{plugin.app.d.ts → plugin/app.d.ts} +1 -1
  15. package/lib/core/plugin/app.js +19 -0
  16. package/lib/core/{plugin.d.ts → plugin/base.d.ts} +1 -1
  17. package/lib/core/plugin/base.js +140 -0
  18. package/lib/core/{plugin.loader.d.ts → plugin/loader.d.ts} +3 -3
  19. package/lib/core/plugin/loader.js +579 -0
  20. package/lib/core/process/process.js +100 -0
  21. package/lib/core/server/server.js +283 -0
  22. package/lib/db/index.d.ts +2 -2
  23. package/lib/db/index.js +2 -2
  24. package/lib/db/level/level.js +36 -0
  25. package/lib/db/redis/redis.js +135 -0
  26. package/lib/db/redis/redis_level.js +287 -0
  27. package/lib/event/{event.handler.d.ts → handler/base.d.ts} +2 -2
  28. package/lib/event/handler/base.js +173 -0
  29. package/lib/event/{message.handler.d.ts → handler/message.d.ts} +3 -3
  30. package/lib/event/handler/message.js +270 -0
  31. package/lib/event/{notice.handler.d.ts → handler/notice.d.ts} +3 -3
  32. package/lib/event/handler/notice.js +212 -0
  33. package/lib/event/{request.handler.d.ts → handler/request.d.ts} +3 -3
  34. package/lib/event/handler/request.js +118 -0
  35. package/lib/event/{review.handler.d.ts → handler/review.d.ts} +3 -3
  36. package/lib/event/handler/review.js +391 -0
  37. package/lib/event/index.d.ts +5 -5
  38. package/lib/event/index.js +5 -5
  39. package/lib/render/base.d.ts +1 -1
  40. package/lib/render/client.d.ts +1 -1
  41. package/lib/render/client.js +5 -7
  42. package/lib/render/client_even.d.ts +30 -0
  43. package/lib/render/client_even.js +153 -0
  44. package/lib/render/http.d.ts +1 -1
  45. package/lib/render/http.js +1 -1
  46. package/lib/render/server.js +1 -1
  47. package/lib/types/adapter/api.d.ts +5 -1
  48. package/lib/types/adapter/{adapter.d.ts → base.d.ts} +2 -2
  49. package/lib/types/config/config.js +1 -0
  50. package/lib/types/element/element.js +1 -0
  51. package/lib/types/event/message.d.ts +1 -1
  52. package/lib/types/event/reply.d.ts +1 -1
  53. package/lib/types/index.d.ts +6 -6
  54. package/lib/types/index.js +6 -6
  55. package/lib/types/logger/logger.js +1 -0
  56. package/lib/types/{plugin.d.ts → plugin/plugin.d.ts} +3 -3
  57. package/lib/types/plugin/plugin.js +1 -0
  58. package/lib/types/render/render.js +1 -0
  59. package/lib/utils/{common.d.ts → common/common.d.ts} +14 -13
  60. package/lib/utils/common/common.js +591 -0
  61. package/lib/utils/{config.d.ts → config/config.d.ts} +37 -19
  62. package/lib/utils/config/config.js +328 -0
  63. package/lib/utils/config/updateVersion.js +145 -0
  64. package/lib/utils/config/yamlEditor.js +292 -0
  65. package/lib/utils/{handler.d.ts → core/handler.d.ts} +1 -1
  66. package/lib/utils/core/handler.js +115 -0
  67. package/lib/utils/core/init.js +213 -0
  68. package/lib/utils/core/logger.js +105 -0
  69. package/lib/utils/{segment.d.ts → core/segment.d.ts} +1 -1
  70. package/lib/utils/core/segment.js +441 -0
  71. package/lib/utils/index.d.ts +11 -11
  72. package/lib/utils/index.js +11 -11
  73. package/lib/utils/{button.d.ts → tools/button.d.ts} +1 -1
  74. package/lib/utils/tools/button.js +38 -0
  75. package/lib/utils/tools/exec.js +37 -0
  76. package/lib/utils/tools/ffmpeg.js +25 -0
  77. package/lib/utils/tools/update.js +139 -0
  78. package/package.json +1 -1
  79. package/lib/core/dir.js +0 -7
  80. package/lib/core/init.js +0 -42
  81. package/lib/core/karin.js +0 -194
  82. package/lib/core/listener.js +0 -217
  83. package/lib/core/plugin.app.js +0 -19
  84. package/lib/core/plugin.js +0 -145
  85. package/lib/core/plugin.loader.js +0 -561
  86. package/lib/core/process.js +0 -98
  87. package/lib/core/server.js +0 -269
  88. package/lib/db/level.js +0 -37
  89. package/lib/db/redis.js +0 -134
  90. package/lib/db/redis_level.js +0 -293
  91. package/lib/event/event.handler.js +0 -167
  92. package/lib/event/message.handler.js +0 -254
  93. package/lib/event/notice.handler.js +0 -204
  94. package/lib/event/request.handler.js +0 -110
  95. package/lib/event/review.handler.js +0 -386
  96. package/lib/types/config.js +0 -1
  97. package/lib/types/element.js +0 -1
  98. package/lib/types/logger.js +0 -1
  99. package/lib/types/plugin.js +0 -1
  100. package/lib/types/render.js +0 -1
  101. package/lib/utils/button.js +0 -34
  102. package/lib/utils/common.js +0 -596
  103. package/lib/utils/config.js +0 -318
  104. package/lib/utils/exec.js +0 -36
  105. package/lib/utils/ffmpeg.js +0 -25
  106. package/lib/utils/handler.js +0 -109
  107. package/lib/utils/init.js +0 -208
  108. package/lib/utils/logger.js +0 -104
  109. package/lib/utils/segment.js +0 -470
  110. package/lib/utils/update.js +0 -135
  111. package/lib/utils/updateVersion.js +0 -145
  112. package/lib/utils/yamlEditor.js +0 -279
  113. /package/lib/core/{dir.d.ts → init/dir.d.ts} +0 -0
  114. /package/lib/core/{init.d.ts → init/init.d.ts} +0 -0
  115. /package/lib/core/{process.d.ts → process/process.d.ts} +0 -0
  116. /package/lib/core/{server.d.ts → server/server.d.ts} +0 -0
  117. /package/lib/db/{level.d.ts → level/level.d.ts} +0 -0
  118. /package/lib/db/{redis.d.ts → redis/redis.d.ts} +0 -0
  119. /package/lib/db/{redis_level.d.ts → redis/redis_level.d.ts} +0 -0
  120. /package/lib/types/adapter/{adapter.js → base.js} +0 -0
  121. /package/lib/types/{config.d.ts → config/config.d.ts} +0 -0
  122. /package/lib/types/{element.d.ts → element/element.d.ts} +0 -0
  123. /package/lib/types/{logger.d.ts → logger/logger.d.ts} +0 -0
  124. /package/lib/types/{render.d.ts → render/render.d.ts} +0 -0
  125. /package/lib/utils/{updateVersion.d.ts → config/updateVersion.d.ts} +0 -0
  126. /package/lib/utils/{yamlEditor.d.ts → config/yamlEditor.d.ts} +0 -0
  127. /package/lib/utils/{init.d.ts → core/init.d.ts} +0 -0
  128. /package/lib/utils/{logger.d.ts → core/logger.d.ts} +0 -0
  129. /package/lib/utils/{exec.d.ts → tools/exec.d.ts} +0 -0
  130. /package/lib/utils/{ffmpeg.d.ts → tools/ffmpeg.d.ts} +0 -0
  131. /package/lib/utils/{update.d.ts → tools/update.d.ts} +0 -0
@@ -1,204 +0,0 @@
1
- import { review } from './review.handler.js'
2
- import EventHandler from './event.handler.js'
3
- import { logger, config } from '../utils/index.js'
4
- import { pluginLoader } from '../core/index.js'
5
- /**
6
- * 通知事件
7
- */
8
- export default class NoticeHandler extends EventHandler {
9
- e
10
- constructor (e) {
11
- super(e)
12
- this.e = e
13
- /** 事件处理 */
14
- if (this.review()) { return }
15
- /** 处理回复 */
16
- this.reply()
17
- /** raw */
18
- this.raw_message()
19
- /** 处理消息 */
20
- this.deal()
21
- }
22
-
23
- /**
24
- * 处理事件
25
- */
26
- async deal () {
27
- /** 主人 */
28
- if (config.master.includes(String(this.e.user_id))) {
29
- this.e.isMaster = true
30
- this.e.isAdmin = true
31
- } else if (config.admin.includes(String(this.e.user_id))) {
32
- /** 管理员 */
33
- this.e.isAdmin = true
34
- }
35
- if (this.e.contact.scene === 'friend') {
36
- this.e.isPrivate = true
37
- this.e.logText = `[Private:${this.e.sender.nick || ''}(${this.e.user_id})]`
38
- logger.bot('info', this.e.self_id, `${logger.green('私聊通知: ')}[${this.e.user_id}(${this.e.sender.nick || ''})] ${this.e.raw_message}`)
39
- if (!this.private()) { return }
40
- } else if (this.e.contact.scene === 'group') {
41
- this.e.isGroup = true
42
- this.e.logText = `[Group:${this.e.group_id}-${this.e.user_id}(${this.e.sender.nick || ''})]`
43
- this.GroupMsgPrint = review.GroupMsgPrint(this.e)
44
- this.GroupMsgPrint && logger.bot('info', this.e.self_id, `${logger.green('群通知: ')}[${this.e.group_id}-${this.e.user_id}(${this.e.sender.nick || ''})] ${this.e.raw_message}`)
45
- } else {
46
- logger.bot('info', this.e.self_id, `未知来源通知事件:${JSON.stringify(this.e)}`)
47
- }
48
- /* eslint-disable no-labels */
49
- a: for (const index of pluginLoader.acceptIds) {
50
- const app = pluginLoader.PluginList[index]
51
- /** 判断事件 */
52
- if (!this.filtEvent(app.event)) { continue }
53
- /** 检查黑白名单插件 */
54
- if ('GroupCD' in this.config && !review.PluginEnable(app, this.config)) { continue }
55
- /** 日志方法字符串 */
56
- this.e.logFnc = `[${app.file.dir}][${app.name}][accept]`
57
- const logFnc = logger.fnc(`[${app.name}][accept]`)
58
- /** 计算插件处理时间 */
59
- const start = Date.now()
60
- let res
61
- try {
62
- if (typeof app.accept === 'function') {
63
- res = await app.accept(this.e)
64
- } else {
65
- const cla = new app.file.Fnc()
66
- if (!cla.accept || typeof cla.accept !== 'function') { continue }
67
- (cla.e) = this.e
68
- res = await cla.accept(this.e)
69
- }
70
- if (res !== false) {
71
- this.GroupMsgPrint && logger.bot('info', this.e.self_id, `${logFnc} 处理完成 ${logger.green(Date.now() - start + 'ms')}`)
72
- break a
73
- }
74
- } catch (error) {
75
- logger.error(`${logFnc}`)
76
- logger.error(error.stack || error.message || JSON.stringify(error))
77
- break a
78
- }
79
- }
80
- }
81
-
82
- /**
83
- * 构建原始消息
84
- */
85
- raw_message () {
86
- switch (this.e.sub_event) {
87
- /** 好友头像戳一戳 */
88
- case 'private_poke' /* NoticeSubType.PrivatePoke */: {
89
- this.e.raw_message = '[好友戳一戳]: 戳了你一下'
90
- break
91
- }
92
- /** 好友消息撤回 */
93
- case 'private_recall' /* NoticeSubType.PrivateRecall */: {
94
- this.e.raw_message = `[好友消息撤回]: ${this.e.content.message_id}`
95
- break
96
- }
97
- /** 私聊文件上传 */
98
- case 'private_file_uploaded' /* NoticeSubType.PrivateFileUploaded */: {
99
- const content = this.e.content
100
- const { file_url } = content
101
- this.e.raw_message = `[私聊文件上传]: ${file_url}`
102
- break
103
- }
104
- /** 群头像戳一戳 */
105
- case 'group_poke' /* NoticeSubType.GroupPoke */: {
106
- const { operator_uid, operator_uin, target_uid, target_uin } = this.e.content
107
- this.e.raw_message = `[群戳一戳]: ${operator_uid || operator_uin} 戳了戳 ${target_uid || target_uin}`
108
- break
109
- }
110
- /** 群消息撤回 */
111
- case 'group_recall' /* NoticeSubType.GroupRecall */: {
112
- const { operator_uid, operator_uin, message_id } = this.e.content
113
- this.e.raw_message = `[群消息撤回]: ${operator_uid || operator_uin} 撤回了一条消息 ${message_id}`
114
- break
115
- }
116
- /** 群文件上传 */
117
- case 'group_file_uploaded' /* NoticeSubType.GroupFileUploaded */: {
118
- const { file_url, operator_uid, operator_uin } = this.e.content
119
- this.e.raw_message = `[群文件上传]: ${operator_uid || operator_uin} 上传了 ${file_url}`
120
- break
121
- }
122
- /** 群成员增加 */
123
- case 'group_member_increase' /* NoticeSubType.GroupMemberIncrease */: {
124
- const { operator_uid, operator_uin, target_uid, target_uin, type } = this.e.content
125
- this.e.raw_message = `[群成员新增]: ${operator_uid || operator_uin} ${type === 'invite' ? '邀请' : '同意'} ${target_uid || target_uin} 加入群聊`
126
- break
127
- }
128
- /** 群成员减少 */
129
- case 'group_member_decrease' /* NoticeSubType.GroupMemberDecrease */: {
130
- switch (this.e.content.type) {
131
- case 'leave': {
132
- const { target_uid, target_uin } = this.e.content
133
- this.e.raw_message = `[群成员减少]: ${target_uid || target_uin} 主动退出群聊`
134
- break
135
- }
136
- // 群成员被踢
137
- case 'kick': {
138
- const { operator_uid, operator_uin, target_uid, target_uin } = this.e.content
139
- this.e.raw_message = `[群成员减少]: ${operator_uid || operator_uin} 将 ${target_uid || target_uin} 踢出群聊`
140
- break
141
- }
142
- // bot被踢
143
- case 'kick_me': {
144
- const { operator_uid, operator_uin } = this.e.content
145
- this.e.raw_message = `[群成员减少]: 机器人被移除群聊,操作人:${operator_uid || operator_uin}`
146
- break
147
- }
148
- }
149
- break
150
- }
151
- /** 群管理员变动 */
152
- case 'group_admin_changed' /* NoticeSubType.GroupAdminChanged */: {
153
- const { target_uid, target_uin, is_admin } = this.e.content
154
- this.e.raw_message = `[群管理员变动]: ${target_uid || target_uin} 被${is_admin ? '设置' : '取消'}群管理员`
155
- break
156
- }
157
- /** 群成员被禁言 */
158
- case 'group_member_ban' /* NoticeSubType.GroupMemberBan */: {
159
- const { operator_uid, operator_uin, target_uid, target_uin, type } = this.e.content
160
- this.e.raw_message = `[群成员禁言]: ${operator_uid || operator_uin} ${type === 'ban' ? '禁言' : '解禁'}了 ${target_uid || target_uin}`
161
- break
162
- }
163
- /** 群签到 */
164
- case 'group_sign_in' /* NoticeSubType.GroupSignIn */: {
165
- const { target_uid, target_uin } = this.e.content
166
- this.e.raw_message = `[群签到]: ${target_uid || target_uin}`
167
- break
168
- }
169
- /** 群全员禁言 */
170
- case 'group_whole_ban' /* NoticeSubType.GroupWholeBan */: {
171
- const { operator_uid, operator_uin, is_ban } = this.e.content
172
- this.e.raw_message = `[群全员禁言]: ${operator_uid || operator_uin} ${is_ban ? '开启全员禁言' : '解除全员禁言'}`
173
- break
174
- }
175
- /** 群名片改变 */
176
- case 'group_card_changed' /* NoticeSubType.GroupCardChanged */: {
177
- const { operator_uid, operator_uin, target_uid, target_uin, new_card } = this.e.content
178
- this.e.raw_message = `[群名片改变]: ${operator_uid || operator_uin} 修改了 ${target_uid || target_uin} 的名片为 ${new_card}`
179
- break
180
- }
181
- /** 群成员专属头衔改变 */
182
- case 'group_member_unique_title_changed' /* NoticeSubType.GroupMemberUniqueTitleChanged */: {
183
- const { target_uid, target_uin, title } = this.e.content
184
- this.e.raw_message = `[群头衔更改]: ${target_uid || target_uin} 的专属头衔改变为 ${title}`
185
- break
186
- }
187
- /** 群精华消息改变 */
188
- case 'group_essence_changed' /* NoticeSubType.GroupEssenceChanged */: {
189
- const { operator_uid, operator_uin, target_uid, target_uin, message_id, is_set } = this.e.content
190
- this.e.raw_message = `[群精华消息]: ${operator_uid || operator_uin} ${is_set ? `将${target_uid || target_uin}的消息${message_id}设置为精华消息` : `取消了${target_uid || target_uin}精华消息 ${message_id}`}`
191
- break
192
- }
193
- /** 群表情回应 */
194
- case 'group_message_reaction' /* NoticeSubType.GroupMessageReaction */: {
195
- const { message_id, face_id } = this.e.content
196
- this.e.raw_message = `[群表情回应]: ${this.e.user_id} 给消息 ${message_id} 回应了一个${face_id}的表情`
197
- break
198
- }
199
- default: {
200
- this.e.raw_message = `[未知事件]: ${JSON.stringify(this.e)}`
201
- }
202
- }
203
- }
204
- }
@@ -1,110 +0,0 @@
1
- import { review } from './review.handler.js'
2
- import EventHandler from './event.handler.js'
3
- import { logger, config } from '../utils/index.js'
4
- import { pluginLoader } from '../core/index.js'
5
- /**
6
- * 请求事件
7
- */
8
- export default class RequestHandler extends EventHandler {
9
- e
10
- constructor (e) {
11
- super(e)
12
- this.e = e
13
- /** 事件处理 */
14
- if (this.review()) { return }
15
- /** 处理回复 */
16
- this.reply()
17
- /** raw */
18
- this.raw_message()
19
- /** 处理消息 */
20
- this.deal()
21
- }
22
-
23
- /**
24
- * 处理事件
25
- */
26
- async deal () {
27
- /** 主人 */
28
- if (config.master.includes(String(this.e.user_id))) {
29
- this.e.isMaster = true
30
- this.e.isAdmin = true
31
- } else if (config.admin.includes(String(this.e.user_id))) {
32
- /** 管理员 */
33
- this.e.isAdmin = true
34
- }
35
- if (this.e.contact.scene === 'friend') {
36
- this.e.isPrivate = true
37
- this.e.logText = `[Private:${this.e.sender.nick || ''}(${this.e.user_id})]`
38
- logger.bot('info', this.e.self_id, `${logger.green('私聊请求: ')}[${this.e.user_id}(${this.e.sender.nick || ''})] ${this.e.raw_message}`)
39
- if (!this.private()) { return }
40
- } else if (this.e.contact.scene === 'group') {
41
- this.e.isGroup = true
42
- this.e.logText = `[Group:${this.e.group_id}-${this.e.user_id}(${this.e.sender.nick || ''})]`
43
- this.GroupMsgPrint = review.GroupMsgPrint(this.e)
44
- this.GroupMsgPrint && logger.bot('info', this.e.self_id, `${logger.green('群请求: ')}[${this.e.group_id}-${this.e.user_id}(${this.e.sender.nick || ''})] ${this.e.raw_message}`)
45
- } else {
46
- logger.bot('info', this.e.self_id, `未知来源请求事件:${JSON.stringify(this.e)}`)
47
- }
48
- /* eslint-disable no-labels */
49
- a: for (const index of pluginLoader.acceptIds) {
50
- const app = pluginLoader.PluginList[index]
51
- /** 判断事件 */
52
- if (!this.filtEvent(app.event)) { continue }
53
- /** 检查黑白名单插件 */
54
- if ('GroupCD' in this.config && !review.PluginEnable(app, this.config)) { continue }
55
- /** 日志方法字符串 */
56
- this.e.logFnc = `[${app.file.dir}][${app.name}][accept]`
57
- const logFnc = logger.fnc(`[${app.name}][accept]`)
58
- /** 计算插件处理时间 */
59
- const start = Date.now()
60
- let res
61
- try {
62
- if (typeof app.accept === 'function') {
63
- res = await app.accept(this.e)
64
- } else {
65
- const cla = new app.file.Fnc()
66
- if (!cla.accept || typeof cla.accept !== 'function') { continue }
67
- (cla.e) = this.e
68
- res = await cla.accept(this.e)
69
- }
70
- if (res !== false) {
71
- this.GroupMsgPrint && logger.bot('info', this.e.self_id, `${logFnc} 处理完成 ${logger.green(Date.now() - start + 'ms')}`)
72
- break a
73
- }
74
- } catch (error) {
75
- logger.error(`${logFnc}`)
76
- logger.error(error.stack || error.message || JSON.stringify(error))
77
- break a
78
- }
79
- }
80
- }
81
-
82
- /**
83
- * 构建原始消息
84
- */
85
- raw_message () {
86
- switch (this.e.sub_event) {
87
- /** 好友申请 */
88
- case 'private_apply' /* RequestSubType.PrivateApply */: {
89
- const { applier_uid, applier_uin, message } = this.e.content
90
- this.e.raw_message = `[好友申请]: ${applier_uid || applier_uin} 申请理由: ${message}`
91
- break
92
- }
93
- /** 群申请 */
94
- case 'group_apply' /* RequestSubType.GroupApply */: {
95
- const { group_id, applier_uid, applier_uin, inviter_uid, inviter_uin, reason } = this.e.content
96
- this.e.raw_message = `[群申请]: ${group_id} 申请人: ${applier_uid || applier_uin} 邀请人: ${inviter_uid || inviter_uin} 理由: ${reason}`
97
- break
98
- }
99
- /** 邀请入群 */
100
- case 'invited_group' /* RequestSubType.InvitedGroup */: {
101
- const { group_id, inviter_uid, inviter_uin } = this.e.content
102
- this.e.raw_message = `[邀请入群]: ${group_id} 邀请人: ${inviter_uid || inviter_uin}`
103
- break
104
- }
105
- default: {
106
- this.e.raw_message = `[未知事件]: ${JSON.stringify(this.e)}`
107
- }
108
- }
109
- }
110
- }
@@ -1,386 +0,0 @@
1
- import { logger, config } from '../utils/index.js'
2
- /**
3
- * 事件拦截器
4
- * 利用可执行函数的特性,热更新所有拦截器
5
- * 所有拦截器返回的都是布尔值 为true说明通过 为false则未通过
6
- */
7
- export const review = new (class Handler {
8
- GroupCD
9
- GroupUserCD
10
- App = config['App']
11
- Config = config['Config']
12
- CD
13
- mode
14
- alias
15
- GroupEnable
16
- UserEnable
17
- GroupMsgPrint
18
- PluginEnable
19
- Private
20
- constructor () {
21
- /** 群聊所有消息cd */
22
- this.GroupCD = {}
23
- /** 群聊个人cd */
24
- this.GroupUserCD = {}
25
- /** 事件cd */
26
- this.CD = (e, config) => true
27
- /** 响应模式 */
28
- this.mode = (e, config) => true
29
- /** 前缀、别名 */
30
- this.alias = (e, config) => true
31
- /** 群聊黑白名单 哪个群可以触发事件 */
32
- this.GroupEnable = e => true
33
- /** 用户黑白名单 谁可以触发事件 */
34
- this.UserEnable = e => true
35
- /** 群聊事件日志 哪个群可以打印日志 */
36
- this.GroupMsgPrint = e => true
37
- /** 插件黑白名单 哪个插件可以被触发 */
38
- this.PluginEnable = (app, config) => true
39
- /** 私聊功能 */
40
- this.Private = () => false
41
- // 延迟1秒执行
42
- setTimeout(() => {
43
- this.main()
44
- }, 1000)
45
- }
46
-
47
- main () {
48
- this.App = config.App
49
- this.Config = config.Config
50
- this.#CD()
51
- this.#mode()
52
- this.#alias()
53
- this.#GroupEnable()
54
- this.#UserEnable()
55
- this.#GroupMsgPrint()
56
- this.#PluginEnable()
57
- this.#Private()
58
- }
59
-
60
- /**
61
- * 群聊黑白名单 允许哪个群触发事件
62
- */
63
- #GroupEnable () {
64
- /** 同时启用 */
65
- if (this.App.WhiteList.groups && this.App.BlackList.groups) {
66
- this.GroupEnable = e => {
67
- /** 白名单不为空 */
68
- if (Array.isArray(this.Config.WhiteList.groups) && this.Config.WhiteList.groups.length) {
69
- return this.Config.WhiteList.groups.includes(String(e.group_id))
70
- }
71
- /** 白名单为空 检查黑名单是否为空 */
72
- if (Array.isArray(this.Config.BlackList.groups) && this.Config.BlackList.groups.length) {
73
- return !this.Config.BlackList.groups.includes(String(e.group_id))
74
- }
75
- /** 黑白名单都为空 */
76
- return true
77
- }
78
- return true
79
- }
80
- /** 白名单启用 */
81
- if (this.App.WhiteList.groups) {
82
- this.GroupEnable = e => {
83
- if (Array.isArray(this.Config.WhiteList.groups) && this.Config.WhiteList.groups.length) {
84
- return this.Config.WhiteList.groups.includes(String(e.group_id))
85
- }
86
- return true
87
- }
88
- return true
89
- }
90
- /** 黑名单启用 */
91
- if (this.App.BlackList.groups) {
92
- this.GroupEnable = e => {
93
- if (Array.isArray(this.Config.BlackList.groups) && this.Config.BlackList.groups.length) {
94
- return !this.Config.BlackList.groups.includes(String(e.group_id))
95
- }
96
- return true
97
- }
98
- return true
99
- }
100
- /** 都没有启用 */
101
- this.GroupEnable = () => true
102
- }
103
-
104
- /**
105
- * 用户黑白名单 允许那个用户触发事件
106
- */
107
- #UserEnable () {
108
- /** 同时启用 */
109
- if (this.App.WhiteList.users && this.App.BlackList.users) {
110
- this.UserEnable = e => {
111
- /** 白名单不为空 */
112
- if (Array.isArray(this.Config.WhiteList.users) && this.Config.WhiteList.users.length) {
113
- return this.Config.WhiteList.users.includes(String(e.user_id))
114
- }
115
- /** 白名单为空 检查黑名单是否为空 */
116
- if (Array.isArray(this.Config.BlackList.users) && this.Config.BlackList.users.length) {
117
- return !this.Config.BlackList.users.includes(String(e.user_id))
118
- }
119
- /** 黑白名单都为空 */
120
- return true
121
- }
122
- return true
123
- }
124
- /** 白名单启用 */
125
- if (this.App.WhiteList.users) {
126
- this.UserEnable = e => {
127
- if (Array.isArray(this.Config.WhiteList.users) && this.Config.WhiteList.users.length) {
128
- return this.Config.WhiteList.users.includes(String(e.user_id))
129
- }
130
- return true
131
- }
132
- return true
133
- }
134
- /** 黑名单启用 */
135
- if (this.App.BlackList.users) {
136
- this.UserEnable = e => {
137
- if (Array.isArray(this.Config.BlackList.users) && this.Config.BlackList.users.length) {
138
- return !this.Config.BlackList.users.includes(String(e.user_id))
139
- }
140
- return true
141
- }
142
- return true
143
- }
144
- /** 都没有启用 */
145
- this.UserEnable = () => true
146
- }
147
-
148
- /**
149
- * 群聊事件日志 是否打印
150
- */
151
- #GroupMsgPrint () {
152
- /** 同时启用 */
153
- if (this.App.WhiteList.GroupMsgLog && this.App.BlackList.GroupMsgLog) {
154
- this.GroupMsgPrint = e => {
155
- /** 白名单不为空 */
156
- if (Array.isArray(this.Config.WhiteList.GroupMsgLog) && this.Config.WhiteList.GroupMsgLog.length) {
157
- return this.Config.WhiteList.GroupMsgLog.includes(String(e.group_id))
158
- }
159
- /** 白名单为空 检查黑名单是否为空 */
160
- if (Array.isArray(this.Config.BlackList.GroupMsgLog) && this.Config.BlackList.GroupMsgLog.length) {
161
- return !this.Config.BlackList.GroupMsgLog.includes(String(e.group_id))
162
- }
163
- /** 黑白名单都为空 */
164
- return true
165
- }
166
- return true
167
- }
168
- /** 白名单启用 */
169
- if (this.App.WhiteList.GroupMsgLog) {
170
- this.GroupMsgPrint = e => {
171
- if (Array.isArray(this.Config.WhiteList.GroupMsgLog) && this.Config.WhiteList.GroupMsgLog.length) {
172
- return this.Config.WhiteList.GroupMsgLog.includes(String(e.group_id))
173
- }
174
- return true
175
- }
176
- return true
177
- }
178
- /** 黑名单启用 */
179
- if (this.App.BlackList.GroupMsgLog) {
180
- this.GroupMsgPrint = e => {
181
- if (Array.isArray(this.Config.BlackList.GroupMsgLog) && this.Config.BlackList.GroupMsgLog.length) {
182
- return !this.Config.BlackList.GroupMsgLog.includes(String(e.group_id))
183
- }
184
- return true
185
- }
186
- return true
187
- }
188
- /** 都没有启用 */
189
- this.GroupMsgPrint = () => true
190
- }
191
-
192
- /**
193
- * 黑白名单插件 哪个插件可以被触发
194
- */
195
- #PluginEnable () {
196
- /** 同时启用 */
197
- if (this.App.GroupConfig.enable && this.App.GroupConfig.disable) {
198
- this.PluginEnable = (app, config) => {
199
- /** 白名单不为空 */
200
- if (Array.isArray(config.enable) && config.enable.length) {
201
- /** 插件包是否处于功能白名单 */
202
- if (config.enable.includes(app.file.dir)) { return true }
203
- /** 插件是否处于功能白名单 */
204
- if (config.enable.includes(`${app.file.dir}/${app.file.name}`)) { return true }
205
- /** 插件名称是否处于功能白名单 */
206
- if (config.enable.includes(app.name)) { return true }
207
- logger.debug(logger.green(`[功能白名单] 插件名称 [${app.name}] 不存在功能白名单中`))
208
- return false
209
- }
210
- /** 白名单为空 检查黑名单是否为空 */
211
- if (Array.isArray(config.disable) && config.disable.length) {
212
- /** 插件包是否处于功能黑名单 */
213
- if (config.disable.includes(app.file.dir)) {
214
- logger.debug(logger.red(`[功能黑名单] 插件包 [${app.file.dir}] 处于功能黑名单`))
215
- return false
216
- }
217
- /** 插件是否处于功能黑名单 */
218
- if (config.disable.includes(`${app.file.dir}/${app.file.name}`)) {
219
- logger.debug(logger.red(`[功能黑名单] 插件 [${app.file.dir}/${app.file.name}] 处于功能黑名单`))
220
- return false
221
- }
222
- /** 插件名称是否处于功能黑名单 */
223
- if (config.disable.includes(app.name)) {
224
- logger.debug(logger.red(`[功能黑名单] 插件名称 [${app.name}] 处于功能黑名单`))
225
- return false
226
- }
227
- return true
228
- }
229
- /** 黑白名单都为空 */
230
- return true
231
- }
232
- return true
233
- }
234
- /** 白名单启用 */
235
- if (this.App.GroupConfig.enable) {
236
- this.PluginEnable = (app, config) => {
237
- if (Array.isArray(config.enable) && config.enable.length) {
238
- if (config.enable.includes(app.file.dir)) { return true }
239
- if (config.enable.includes(`${app.file.dir}/${app.file.name}`)) { return true }
240
- if (config.enable.includes(app.name)) { return true }
241
- logger.debug(logger.green(`[功能白名单] 插件名称 [${app.name}] 不存在功能白名单中`))
242
- return false
243
- }
244
- return true
245
- }
246
- return true
247
- }
248
- /** 黑名单启用 */
249
- if (this.App.GroupConfig.disable) {
250
- this.PluginEnable = (app, config) => {
251
- if (Array.isArray(config.disable) && config.disable.length) {
252
- if (config.disable.includes(app.file.dir)) {
253
- logger.debug(logger.red(`[功能黑名单] 插件包 [${app.file.dir}] 处于功能黑名单`))
254
- return false
255
- }
256
- if (config.disable.includes(`${app.file.dir}/${app.file.name}`)) {
257
- logger.debug(logger.red(`[功能黑名单] 插件 [${app.file.dir}/${app.file.name}] 处于功能黑名单`))
258
- return false
259
- }
260
- if (config.disable.includes(app.name)) {
261
- logger.debug(logger.red(`[功能黑名单] 插件名称 [${app.name}] 处于功能黑名单`))
262
- return false
263
- }
264
- return true
265
- }
266
- return true
267
- }
268
- return true
269
- }
270
- /** 都没有启用 */
271
- this.PluginEnable = () => true
272
- return true
273
- }
274
-
275
- /** 群聊cd */
276
- #CD () {
277
- /** 同时启用 */
278
- if (this.App.GroupConfig.GroupCD && this.App.GroupConfig.GroupUserCD) {
279
- this.CD = (e, config) => {
280
- const key = `${e.group_id}.${e.user_id}`
281
- /** cd中... */
282
- if (this.GroupCD[e.group_id] || this.GroupUserCD[key]) { return false }
283
- /** 全局 */
284
- this.GroupCD[e.group_id] = true
285
- setTimeout(() => delete this.GroupCD[e.group_id], config.GroupCD * 1000)
286
- /** 个人 */
287
- this.GroupUserCD[key] = true
288
- setTimeout(() => delete this.GroupUserCD[key], config.GroupUserCD * 1000)
289
- return true
290
- }
291
- return true
292
- }
293
- /** 启用单个群聊所有消息冷却时间 */
294
- if (this.App.GroupConfig.GroupCD) {
295
- this.CD = (e, config) => {
296
- /** cd中... */
297
- if (this.GroupCD[e.group_id]) { return false }
298
- /** 全局 */
299
- this.GroupCD[e.group_id] = true
300
- setTimeout(() => delete this.GroupCD[e.group_id], config.GroupCD * 1000)
301
- return true
302
- }
303
- return true
304
- }
305
- /** 启用单个群聊个人消息冷却时间 */
306
- if (this.App.GroupConfig.GroupUserCD) {
307
- this.CD = (e, config) => {
308
- const key = `${e.group_id}.${e.user_id}`
309
- /** cd中... */
310
- if (this.GroupUserCD[key]) { return false }
311
- /** 个人 */
312
- this.GroupUserCD[key] = true
313
- setTimeout(() => delete this.GroupUserCD[key], config.GroupUserCD * 1000)
314
- return true
315
- }
316
- return true
317
- }
318
- /** 都没有启用 */
319
- this.CD = () => true
320
- }
321
-
322
- /**
323
- * 响应模式
324
- */
325
- #mode () {
326
- /** 启用 */
327
- if (this.App.GroupConfig.mode) {
328
- this.mode = (e, config) => {
329
- const modeMap = {
330
- 0: () => true,
331
- 1: () => e.atBot,
332
- 2: () => e.isMaster,
333
- 3: () => !!e.alias,
334
- 4: () => {
335
- if (e.atBot) { return true }
336
- return !!e.alias
337
- },
338
- 5: () => {
339
- if (e.isMaster) { return true }
340
- if (e.atBot) { return true }
341
- return !!e.alias
342
- },
343
- }
344
- return modeMap[Number(config.mode) || 0]()
345
- }
346
- return true
347
- }
348
- /** 未启用 */
349
- this.mode = () => true
350
- }
351
-
352
- /**
353
- * 前缀、别名
354
- */
355
- #alias () {
356
- /** 启用 */
357
- if (this.App.GroupConfig.alias) {
358
- this.alias = (e, config) => {
359
- const aliasRegex = new RegExp(`^(${config.alias.join('|')})`)
360
- const match = e.msg.match(aliasRegex)
361
- if (match) {
362
- e.msg = e.msg.replace(aliasRegex, '').trim()
363
- e.alias = match[1]
364
- return true
365
- }
366
- return false
367
- }
368
- return true
369
- }
370
- /** 未启用 */
371
- this.alias = () => true
372
- }
373
-
374
- /**
375
- * 私聊功能
376
- */
377
- #Private () {
378
- /** 启用 */
379
- if (this.App.PrivateConfig?.enable) {
380
- this.Private = () => true
381
- return true
382
- }
383
- /** 未启用 */
384
- this.Private = () => false
385
- }
386
- })()
@@ -1 +0,0 @@
1
- export {}