node-karin 0.10.0 → 0.10.2

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 (129) hide show
  1. package/config/defSet/group.yaml +40 -2
  2. package/lib/adapter/onebot/11/index.js +1 -1
  3. package/lib/cli/init.js +1 -1
  4. package/lib/cli/karin.js +1 -1
  5. package/lib/core/index.d.ts +9 -9
  6. package/lib/core/index.js +9 -9
  7. package/lib/core/init/dir.js +7 -0
  8. package/lib/core/init/init.js +46 -0
  9. package/lib/core/{karin.d.ts → karin/karin.d.ts} +1 -1
  10. package/lib/core/karin/karin.js +194 -0
  11. package/lib/core/{listener.d.ts → listener/listener.d.ts} +1 -1
  12. package/lib/core/listener/listener.js +213 -0
  13. package/lib/core/{plugin.app.d.ts → plugin/app.d.ts} +1 -1
  14. package/lib/core/plugin/app.js +19 -0
  15. package/lib/core/{plugin.d.ts → plugin/base.d.ts} +1 -1
  16. package/lib/core/plugin/base.js +140 -0
  17. package/lib/core/{plugin.loader.d.ts → plugin/loader.d.ts} +3 -3
  18. package/lib/core/plugin/loader.js +579 -0
  19. package/lib/core/process/process.js +100 -0
  20. package/lib/core/server/server.js +283 -0
  21. package/lib/db/index.d.ts +2 -2
  22. package/lib/db/index.js +2 -2
  23. package/lib/db/level/level.js +36 -0
  24. package/lib/db/redis/redis.js +135 -0
  25. package/lib/db/redis/redis_level.js +287 -0
  26. package/lib/event/{event.handler.d.ts → handler/base.d.ts} +2 -2
  27. package/lib/event/handler/base.js +173 -0
  28. package/lib/event/{message.handler.d.ts → handler/message.d.ts} +3 -3
  29. package/lib/event/handler/message.js +270 -0
  30. package/lib/event/{notice.handler.d.ts → handler/notice.d.ts} +3 -3
  31. package/lib/event/handler/notice.js +212 -0
  32. package/lib/event/{request.handler.d.ts → handler/request.d.ts} +3 -3
  33. package/lib/event/handler/request.js +118 -0
  34. package/lib/event/{review.handler.d.ts → handler/review.d.ts} +3 -3
  35. package/lib/event/handler/review.js +391 -0
  36. package/lib/event/index.d.ts +5 -5
  37. package/lib/event/index.js +5 -5
  38. package/lib/render/base.d.ts +1 -1
  39. package/lib/render/client.d.ts +1 -1
  40. package/lib/render/client.js +2 -12
  41. package/lib/render/client_even.d.ts +1 -1
  42. package/lib/render/client_even.js +2 -12
  43. package/lib/render/http.d.ts +1 -1
  44. package/lib/render/http.js +1 -1
  45. package/lib/render/server.js +1 -1
  46. package/lib/types/adapter/{adapter.d.ts → base.d.ts} +2 -2
  47. package/lib/types/config/config.js +1 -0
  48. package/lib/types/element/element.js +1 -0
  49. package/lib/types/event/message.d.ts +1 -1
  50. package/lib/types/event/reply.d.ts +1 -1
  51. package/lib/types/index.d.ts +6 -6
  52. package/lib/types/index.js +6 -6
  53. package/lib/types/logger/logger.js +1 -0
  54. package/lib/types/{plugin.d.ts → plugin/plugin.d.ts} +3 -3
  55. package/lib/types/plugin/plugin.js +1 -0
  56. package/lib/types/render/render.js +1 -0
  57. package/lib/utils/{common.d.ts → common/common.d.ts} +1 -1
  58. package/lib/utils/common/common.js +591 -0
  59. package/lib/utils/{config.d.ts → config/config.d.ts} +37 -19
  60. package/lib/utils/config/config.js +328 -0
  61. package/lib/utils/config/updateVersion.js +145 -0
  62. package/lib/utils/config/yamlEditor.js +292 -0
  63. package/lib/utils/{handler.d.ts → core/handler.d.ts} +1 -1
  64. package/lib/utils/core/handler.js +115 -0
  65. package/lib/utils/core/init.js +213 -0
  66. package/lib/utils/core/logger.js +105 -0
  67. package/lib/utils/{segment.d.ts → core/segment.d.ts} +1 -1
  68. package/lib/utils/core/segment.js +441 -0
  69. package/lib/utils/index.d.ts +11 -11
  70. package/lib/utils/index.js +11 -11
  71. package/lib/utils/{button.d.ts → tools/button.d.ts} +1 -1
  72. package/lib/utils/tools/button.js +38 -0
  73. package/lib/utils/tools/exec.js +37 -0
  74. package/lib/utils/tools/ffmpeg.js +25 -0
  75. package/lib/utils/tools/update.js +139 -0
  76. package/package.json +1 -1
  77. package/lib/core/dir.js +0 -7
  78. package/lib/core/init.js +0 -42
  79. package/lib/core/karin.js +0 -194
  80. package/lib/core/listener.js +0 -217
  81. package/lib/core/plugin.app.js +0 -19
  82. package/lib/core/plugin.js +0 -145
  83. package/lib/core/plugin.loader.js +0 -561
  84. package/lib/core/process.js +0 -98
  85. package/lib/core/server.js +0 -269
  86. package/lib/db/level.js +0 -37
  87. package/lib/db/redis.js +0 -134
  88. package/lib/db/redis_level.js +0 -293
  89. package/lib/event/event.handler.js +0 -167
  90. package/lib/event/message.handler.js +0 -254
  91. package/lib/event/notice.handler.js +0 -204
  92. package/lib/event/request.handler.js +0 -110
  93. package/lib/event/review.handler.js +0 -387
  94. package/lib/types/config.js +0 -1
  95. package/lib/types/element.js +0 -1
  96. package/lib/types/logger.js +0 -1
  97. package/lib/types/plugin.js +0 -1
  98. package/lib/types/render.js +0 -1
  99. package/lib/utils/button.js +0 -34
  100. package/lib/utils/common.js +0 -572
  101. package/lib/utils/config.js +0 -318
  102. package/lib/utils/exec.js +0 -36
  103. package/lib/utils/ffmpeg.js +0 -25
  104. package/lib/utils/handler.js +0 -109
  105. package/lib/utils/init.js +0 -208
  106. package/lib/utils/logger.js +0 -104
  107. package/lib/utils/segment.js +0 -470
  108. package/lib/utils/update.js +0 -135
  109. package/lib/utils/updateVersion.js +0 -145
  110. package/lib/utils/yamlEditor.js +0 -279
  111. /package/lib/core/{dir.d.ts → init/dir.d.ts} +0 -0
  112. /package/lib/core/{init.d.ts → init/init.d.ts} +0 -0
  113. /package/lib/core/{process.d.ts → process/process.d.ts} +0 -0
  114. /package/lib/core/{server.d.ts → server/server.d.ts} +0 -0
  115. /package/lib/db/{level.d.ts → level/level.d.ts} +0 -0
  116. /package/lib/db/{redis.d.ts → redis/redis.d.ts} +0 -0
  117. /package/lib/db/{redis_level.d.ts → redis/redis_level.d.ts} +0 -0
  118. /package/lib/types/adapter/{adapter.js → base.js} +0 -0
  119. /package/lib/types/{config.d.ts → config/config.d.ts} +0 -0
  120. /package/lib/types/{element.d.ts → element/element.d.ts} +0 -0
  121. /package/lib/types/{logger.d.ts → logger/logger.d.ts} +0 -0
  122. /package/lib/types/{render.d.ts → render/render.d.ts} +0 -0
  123. /package/lib/utils/{updateVersion.d.ts → config/updateVersion.d.ts} +0 -0
  124. /package/lib/utils/{yamlEditor.d.ts → config/yamlEditor.d.ts} +0 -0
  125. /package/lib/utils/{init.d.ts → core/init.d.ts} +0 -0
  126. /package/lib/utils/{logger.d.ts → core/logger.d.ts} +0 -0
  127. /package/lib/utils/{exec.d.ts → tools/exec.d.ts} +0 -0
  128. /package/lib/utils/{ffmpeg.d.ts → tools/ffmpeg.d.ts} +0 -0
  129. /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,387 +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
- if (!e.group_id) { return false }
68
- /** 白名单不为空 */
69
- if (Array.isArray(this.Config.WhiteList.groups) && this.Config.WhiteList.groups.length) {
70
- return this.Config.WhiteList.groups.includes(String(e.group_id))
71
- }
72
- /** 白名单为空 检查黑名单是否为空 */
73
- if (Array.isArray(this.Config.BlackList.groups) && this.Config.BlackList.groups.length) {
74
- return !this.Config.BlackList.groups.includes(String(e.group_id))
75
- }
76
- /** 黑白名单都为空 */
77
- return true
78
- }
79
- return true
80
- }
81
- /** 白名单启用 */
82
- if (this.App.WhiteList.groups) {
83
- this.GroupEnable = e => {
84
- if (Array.isArray(this.Config.WhiteList.groups) && this.Config.WhiteList.groups.length) {
85
- return this.Config.WhiteList.groups.includes(String(e.group_id))
86
- }
87
- return true
88
- }
89
- return true
90
- }
91
- /** 黑名单启用 */
92
- if (this.App.BlackList.groups) {
93
- this.GroupEnable = e => {
94
- if (Array.isArray(this.Config.BlackList.groups) && this.Config.BlackList.groups.length) {
95
- return !this.Config.BlackList.groups.includes(String(e.group_id))
96
- }
97
- return true
98
- }
99
- return true
100
- }
101
- /** 都没有启用 */
102
- this.GroupEnable = () => true
103
- }
104
-
105
- /**
106
- * 用户黑白名单 允许那个用户触发事件
107
- */
108
- #UserEnable () {
109
- /** 同时启用 */
110
- if (this.App.WhiteList.users && this.App.BlackList.users) {
111
- this.UserEnable = e => {
112
- /** 白名单不为空 */
113
- if (Array.isArray(this.Config.WhiteList.users) && this.Config.WhiteList.users.length) {
114
- return this.Config.WhiteList.users.includes(String(e.user_id))
115
- }
116
- /** 白名单为空 检查黑名单是否为空 */
117
- if (Array.isArray(this.Config.BlackList.users) && this.Config.BlackList.users.length) {
118
- return !this.Config.BlackList.users.includes(String(e.user_id))
119
- }
120
- /** 黑白名单都为空 */
121
- return true
122
- }
123
- return true
124
- }
125
- /** 白名单启用 */
126
- if (this.App.WhiteList.users) {
127
- this.UserEnable = e => {
128
- if (Array.isArray(this.Config.WhiteList.users) && this.Config.WhiteList.users.length) {
129
- return this.Config.WhiteList.users.includes(String(e.user_id))
130
- }
131
- return true
132
- }
133
- return true
134
- }
135
- /** 黑名单启用 */
136
- if (this.App.BlackList.users) {
137
- this.UserEnable = e => {
138
- if (Array.isArray(this.Config.BlackList.users) && this.Config.BlackList.users.length) {
139
- return !this.Config.BlackList.users.includes(String(e.user_id))
140
- }
141
- return true
142
- }
143
- return true
144
- }
145
- /** 都没有启用 */
146
- this.UserEnable = () => true
147
- }
148
-
149
- /**
150
- * 群聊事件日志 是否打印
151
- */
152
- #GroupMsgPrint () {
153
- /** 同时启用 */
154
- if (this.App.WhiteList.GroupMsgLog && this.App.BlackList.GroupMsgLog) {
155
- this.GroupMsgPrint = e => {
156
- /** 白名单不为空 */
157
- if (Array.isArray(this.Config.WhiteList.GroupMsgLog) && this.Config.WhiteList.GroupMsgLog.length) {
158
- return this.Config.WhiteList.GroupMsgLog.includes(String(e.group_id))
159
- }
160
- /** 白名单为空 检查黑名单是否为空 */
161
- if (Array.isArray(this.Config.BlackList.GroupMsgLog) && this.Config.BlackList.GroupMsgLog.length) {
162
- return !this.Config.BlackList.GroupMsgLog.includes(String(e.group_id))
163
- }
164
- /** 黑白名单都为空 */
165
- return true
166
- }
167
- return true
168
- }
169
- /** 白名单启用 */
170
- if (this.App.WhiteList.GroupMsgLog) {
171
- this.GroupMsgPrint = e => {
172
- if (Array.isArray(this.Config.WhiteList.GroupMsgLog) && this.Config.WhiteList.GroupMsgLog.length) {
173
- return this.Config.WhiteList.GroupMsgLog.includes(String(e.group_id))
174
- }
175
- return true
176
- }
177
- return true
178
- }
179
- /** 黑名单启用 */
180
- if (this.App.BlackList.GroupMsgLog) {
181
- this.GroupMsgPrint = e => {
182
- if (Array.isArray(this.Config.BlackList.GroupMsgLog) && this.Config.BlackList.GroupMsgLog.length) {
183
- return !this.Config.BlackList.GroupMsgLog.includes(String(e.group_id))
184
- }
185
- return true
186
- }
187
- return true
188
- }
189
- /** 都没有启用 */
190
- this.GroupMsgPrint = () => true
191
- }
192
-
193
- /**
194
- * 黑白名单插件 哪个插件可以被触发
195
- */
196
- #PluginEnable () {
197
- /** 同时启用 */
198
- if (this.App.GroupConfig.enable && this.App.GroupConfig.disable) {
199
- this.PluginEnable = (app, config) => {
200
- /** 白名单不为空 */
201
- if (Array.isArray(config.enable) && config.enable.length) {
202
- /** 插件包是否处于功能白名单 */
203
- if (config.enable.includes(app.file.dir)) { return true }
204
- /** 插件是否处于功能白名单 */
205
- if (config.enable.includes(`${app.file.dir}/${app.file.name}`)) { return true }
206
- /** 插件名称是否处于功能白名单 */
207
- if (config.enable.includes(app.name)) { return true }
208
- logger.debug(logger.green(`[功能白名单] 插件名称 [${app.name}] 不存在功能白名单中`))
209
- return false
210
- }
211
- /** 白名单为空 检查黑名单是否为空 */
212
- if (Array.isArray(config.disable) && config.disable.length) {
213
- /** 插件包是否处于功能黑名单 */
214
- if (config.disable.includes(app.file.dir)) {
215
- logger.debug(logger.red(`[功能黑名单] 插件包 [${app.file.dir}] 处于功能黑名单`))
216
- return false
217
- }
218
- /** 插件是否处于功能黑名单 */
219
- if (config.disable.includes(`${app.file.dir}/${app.file.name}`)) {
220
- logger.debug(logger.red(`[功能黑名单] 插件 [${app.file.dir}/${app.file.name}] 处于功能黑名单`))
221
- return false
222
- }
223
- /** 插件名称是否处于功能黑名单 */
224
- if (config.disable.includes(app.name)) {
225
- logger.debug(logger.red(`[功能黑名单] 插件名称 [${app.name}] 处于功能黑名单`))
226
- return false
227
- }
228
- return true
229
- }
230
- /** 黑白名单都为空 */
231
- return true
232
- }
233
- return true
234
- }
235
- /** 白名单启用 */
236
- if (this.App.GroupConfig.enable) {
237
- this.PluginEnable = (app, config) => {
238
- if (Array.isArray(config.enable) && config.enable.length) {
239
- if (config.enable.includes(app.file.dir)) { return true }
240
- if (config.enable.includes(`${app.file.dir}/${app.file.name}`)) { return true }
241
- if (config.enable.includes(app.name)) { return true }
242
- logger.debug(logger.green(`[功能白名单] 插件名称 [${app.name}] 不存在功能白名单中`))
243
- return false
244
- }
245
- return true
246
- }
247
- return true
248
- }
249
- /** 黑名单启用 */
250
- if (this.App.GroupConfig.disable) {
251
- this.PluginEnable = (app, config) => {
252
- if (Array.isArray(config.disable) && config.disable.length) {
253
- if (config.disable.includes(app.file.dir)) {
254
- logger.debug(logger.red(`[功能黑名单] 插件包 [${app.file.dir}] 处于功能黑名单`))
255
- return false
256
- }
257
- if (config.disable.includes(`${app.file.dir}/${app.file.name}`)) {
258
- logger.debug(logger.red(`[功能黑名单] 插件 [${app.file.dir}/${app.file.name}] 处于功能黑名单`))
259
- return false
260
- }
261
- if (config.disable.includes(app.name)) {
262
- logger.debug(logger.red(`[功能黑名单] 插件名称 [${app.name}] 处于功能黑名单`))
263
- return false
264
- }
265
- return true
266
- }
267
- return true
268
- }
269
- return true
270
- }
271
- /** 都没有启用 */
272
- this.PluginEnable = () => true
273
- return true
274
- }
275
-
276
- /** 群聊cd */
277
- #CD () {
278
- /** 同时启用 */
279
- if (this.App.GroupConfig.GroupCD && this.App.GroupConfig.GroupUserCD) {
280
- this.CD = (e, config) => {
281
- const key = `${e.group_id}.${e.user_id}`
282
- /** cd中... */
283
- if (this.GroupCD[e.group_id] || this.GroupUserCD[key]) { return false }
284
- /** 全局 */
285
- this.GroupCD[e.group_id] = true
286
- setTimeout(() => delete this.GroupCD[e.group_id], config.GroupCD * 1000)
287
- /** 个人 */
288
- this.GroupUserCD[key] = true
289
- setTimeout(() => delete this.GroupUserCD[key], config.GroupUserCD * 1000)
290
- return true
291
- }
292
- return true
293
- }
294
- /** 启用单个群聊所有消息冷却时间 */
295
- if (this.App.GroupConfig.GroupCD) {
296
- this.CD = (e, config) => {
297
- /** cd中... */
298
- if (this.GroupCD[e.group_id]) { return false }
299
- /** 全局 */
300
- this.GroupCD[e.group_id] = true
301
- setTimeout(() => delete this.GroupCD[e.group_id], config.GroupCD * 1000)
302
- return true
303
- }
304
- return true
305
- }
306
- /** 启用单个群聊个人消息冷却时间 */
307
- if (this.App.GroupConfig.GroupUserCD) {
308
- this.CD = (e, config) => {
309
- const key = `${e.group_id}.${e.user_id}`
310
- /** cd中... */
311
- if (this.GroupUserCD[key]) { return false }
312
- /** 个人 */
313
- this.GroupUserCD[key] = true
314
- setTimeout(() => delete this.GroupUserCD[key], config.GroupUserCD * 1000)
315
- return true
316
- }
317
- return true
318
- }
319
- /** 都没有启用 */
320
- this.CD = () => true
321
- }
322
-
323
- /**
324
- * 响应模式
325
- */
326
- #mode () {
327
- /** 启用 */
328
- if (this.App.GroupConfig.mode) {
329
- this.mode = (e, config) => {
330
- const modeMap = {
331
- 0: () => true,
332
- 1: () => e.atBot,
333
- 2: () => e.isMaster,
334
- 3: () => !!e.alias,
335
- 4: () => {
336
- if (e.atBot) { return true }
337
- return !!e.alias
338
- },
339
- 5: () => {
340
- if (e.isMaster) { return true }
341
- if (e.atBot) { return true }
342
- return !!e.alias
343
- },
344
- }
345
- return modeMap[Number(config.mode) || 0]()
346
- }
347
- return true
348
- }
349
- /** 未启用 */
350
- this.mode = () => true
351
- }
352
-
353
- /**
354
- * 前缀、别名
355
- */
356
- #alias () {
357
- /** 启用 */
358
- if (this.App.GroupConfig.alias) {
359
- this.alias = (e, config) => {
360
- const aliasRegex = new RegExp(`^(${config.alias.join('|')})`)
361
- const match = e.msg.match(aliasRegex)
362
- if (match) {
363
- e.msg = e.msg.replace(aliasRegex, '').trim()
364
- e.alias = match[1]
365
- return true
366
- }
367
- return false
368
- }
369
- return true
370
- }
371
- /** 未启用 */
372
- this.alias = () => true
373
- }
374
-
375
- /**
376
- * 私聊功能
377
- */
378
- #Private () {
379
- /** 启用 */
380
- if (this.App.PrivateConfig?.enable) {
381
- this.Private = () => true
382
- return true
383
- }
384
- /** 未启用 */
385
- this.Private = () => false
386
- }
387
- })()
@@ -1 +0,0 @@
1
- export {}