n8n-nodes-discord-dnd 0.1.69 → 0.1.71
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.
- package/dist/definitions/DiscordEventDefinitions.js +80 -79
- package/dist/definitions/DiscordEventDefinitions.js.map +1 -1
- package/dist/definitions/DiscordIntentMapping.d.ts +2 -2
- package/dist/definitions/DiscordIntentMapping.js +33 -11
- package/dist/definitions/DiscordIntentMapping.js.map +1 -1
- package/dist/handlers/DiscordEventHandler.js +670 -150
- package/dist/handlers/DiscordEventHandler.js.map +1 -1
- package/dist/nodes/DiscordTrigger.node.js +2 -2
- package/dist/nodes/DiscordTrigger.node.js.map +1 -1
- package/dist/nodes/client.d.ts +2 -2
- package/dist/nodes/client.js +2 -4
- package/dist/nodes/client.js.map +1 -1
- package/package.json +1 -1
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.DiscordEventHandler = void 0;
|
4
|
+
const discord_js_1 = require("discord.js");
|
4
5
|
const MessageTransformer_1 = require("../transformers/MessageTransformer");
|
5
6
|
class DiscordEventHandler {
|
6
7
|
constructor(client, triggerInstance) {
|
@@ -10,6 +11,7 @@ class DiscordEventHandler {
|
|
10
11
|
async setupEventHandler(event) {
|
11
12
|
// Handle main events
|
12
13
|
this.client.on(event, async (...args) => {
|
14
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
13
15
|
const data = {};
|
14
16
|
// Helper to enrich user/member info with roles
|
15
17
|
const enrichMember = async (memberOrUser, guildId) => {
|
@@ -29,7 +31,7 @@ class DiscordEventHandler {
|
|
29
31
|
};
|
30
32
|
switch (event) {
|
31
33
|
// Message events
|
32
|
-
case
|
34
|
+
case discord_js_1.Events.MessageCreate:
|
33
35
|
const message = args[0];
|
34
36
|
data.message = await (0, MessageTransformer_1.messageToJson)(message);
|
35
37
|
// Use the guild ID from the message when enriching the author
|
@@ -40,174 +42,612 @@ class DiscordEventHandler {
|
|
40
42
|
data.user = message.author;
|
41
43
|
}
|
42
44
|
break;
|
43
|
-
case
|
45
|
+
case discord_js_1.Events.MessageDelete:
|
44
46
|
const deletedMessage = args[0];
|
45
47
|
data.message = { ...deletedMessage };
|
46
48
|
break;
|
47
|
-
case
|
49
|
+
case discord_js_1.Events.MessageBulkDelete:
|
50
|
+
const deletedMessages = args[0]; // Collection<Snowflake, Message>
|
51
|
+
const channelMessageDeleteBulk = args[1]; // TextBasedChannel
|
52
|
+
// Trích xuất thông tin kênh
|
53
|
+
data.channel = {
|
54
|
+
id: channelMessageDeleteBulk.id,
|
55
|
+
name: channelMessageDeleteBulk.name || "DM",
|
56
|
+
guildId: channelMessageDeleteBulk.guildId || null,
|
57
|
+
type: channelMessageDeleteBulk.type,
|
58
|
+
};
|
59
|
+
// Trích xuất danh sách tin nhắn bị xóa
|
60
|
+
data.deletedMessages = deletedMessages.map((message) => {
|
61
|
+
var _a;
|
62
|
+
return ({
|
63
|
+
id: message.id,
|
64
|
+
content: message.content || "",
|
65
|
+
authorId: (_a = message.author) === null || _a === void 0 ? void 0 : _a.id,
|
66
|
+
createdTimestamp: message.createdTimestamp,
|
67
|
+
});
|
68
|
+
});
|
69
|
+
// Tổng số tin nhắn bị xóa
|
70
|
+
data.deletedCount = deletedMessages.size;
|
71
|
+
break;
|
72
|
+
case discord_js_1.Events.MessageUpdate:
|
48
73
|
const oldMessage = args[0];
|
49
74
|
const newMessage = args[1];
|
50
75
|
data.oldMessage = { ...oldMessage };
|
51
76
|
data.newMessage = { ...newMessage };
|
52
77
|
break;
|
53
|
-
case
|
54
|
-
case
|
78
|
+
case discord_js_1.Events.MessageReactionAdd:
|
79
|
+
case discord_js_1.Events.MessageReactionRemove:
|
55
80
|
const reaction = args[0];
|
56
81
|
const reactUser = args[1];
|
57
82
|
data.reaction = { ...reaction };
|
58
83
|
data.user = await enrichMember(reactUser, reaction.message.guildId || undefined);
|
59
84
|
break;
|
60
|
-
case
|
85
|
+
case discord_js_1.Events.MessageReactionRemoveAll:
|
61
86
|
const messageReactionRemoved = args[0];
|
62
87
|
data.message = { ...messageReactionRemoved };
|
63
88
|
break;
|
64
|
-
case
|
89
|
+
case discord_js_1.Events.MessageReactionRemoveEmoji:
|
90
|
+
const reactionMessageReactionRemoveEmoji = args[0]; // MessageReaction
|
91
|
+
console.log(`🚀 ~ messageReactionRemoveEmoji - Emoji ${reactionMessageReactionRemoveEmoji.emoji.name} removed from message ${reactionMessageReactionRemoveEmoji.message.id}`);
|
92
|
+
// Trích xuất thông tin tin nhắn và reaction
|
93
|
+
data.reaction = {
|
94
|
+
emoji: {
|
95
|
+
id: reactionMessageReactionRemoveEmoji.emoji.id,
|
96
|
+
name: reactionMessageReactionRemoveEmoji.emoji.name,
|
97
|
+
animated: reactionMessageReactionRemoveEmoji.emoji.animated || false,
|
98
|
+
},
|
99
|
+
message: {
|
100
|
+
id: reactionMessageReactionRemoveEmoji.message.id,
|
101
|
+
channelId: reactionMessageReactionRemoveEmoji.message.channelId,
|
102
|
+
guildId: reactionMessageReactionRemoveEmoji.message.guildId || null,
|
103
|
+
content: reactionMessageReactionRemoveEmoji.message.content || "",
|
104
|
+
authorId: (_a = reactionMessageReactionRemoveEmoji.message.author) === null || _a === void 0 ? void 0 : _a.id,
|
105
|
+
},
|
106
|
+
};
|
107
|
+
break;
|
108
|
+
case discord_js_1.Events.TypingStart:
|
65
109
|
const typing = args[0];
|
66
110
|
data.typing = { ...typing };
|
67
111
|
if (typing.user) {
|
68
112
|
data.user = await enrichMember(typing.user, typing.guildId);
|
69
113
|
}
|
70
114
|
break;
|
71
|
-
//
|
72
|
-
case
|
115
|
+
// Guild events
|
116
|
+
case discord_js_1.Events.ChannelCreate:
|
73
117
|
const channel = args[0];
|
74
118
|
data.channel = { ...channel };
|
75
|
-
// Enrich with guild data if available
|
76
|
-
if (channel.guild) {
|
77
|
-
data.guild = {
|
78
|
-
id: channel.guild.id,
|
79
|
-
name: channel.guild.name,
|
80
|
-
};
|
81
|
-
}
|
82
119
|
break;
|
83
|
-
case
|
120
|
+
case discord_js_1.Events.ChannelDelete:
|
84
121
|
const deletedChannel = args[0];
|
85
122
|
data.channel = { ...deletedChannel };
|
86
123
|
break;
|
87
|
-
case
|
124
|
+
case discord_js_1.Events.ChannelPinsUpdate:
|
125
|
+
const pinsChannel = args[0]; // GuildChannel hoặc ThreadChannel
|
126
|
+
const pinTimestamp = args[1]; // Date
|
127
|
+
// Trích xuất thông tin cơ bản của channel
|
128
|
+
data.channel = {
|
129
|
+
...pinsChannel,
|
130
|
+
};
|
131
|
+
data.pinTimestamp = pinTimestamp.toISOString(); // Chuyển Date thành chuỗi ISO để serialize
|
132
|
+
// Fetch danh sách tin nhắn ghim từ kênh
|
133
|
+
try {
|
134
|
+
const pinnedMessages = await pinsChannel.messages.fetchPinned();
|
135
|
+
// Lấy tin nhắn ghim mới nhất (giả định là tin nhắn vừa được ghim)
|
136
|
+
const latestPinnedMessage = pinnedMessages.last(); // Tin nhắn cuối cùng trong danh sách
|
137
|
+
if (latestPinnedMessage) {
|
138
|
+
// Trích xuất thông tin chi tiết từ tin nhắn ghim
|
139
|
+
data.pinnedMessage = {
|
140
|
+
id: latestPinnedMessage.id,
|
141
|
+
content: latestPinnedMessage.content,
|
142
|
+
channelId: latestPinnedMessage.channelId,
|
143
|
+
guildId: latestPinnedMessage.guildId,
|
144
|
+
createdTimestamp: latestPinnedMessage.createdTimestamp,
|
145
|
+
author: {
|
146
|
+
id: (_b = latestPinnedMessage.author) === null || _b === void 0 ? void 0 : _b.id,
|
147
|
+
username: (_c = latestPinnedMessage.author) === null || _c === void 0 ? void 0 : _c.username,
|
148
|
+
discriminator: (_d = latestPinnedMessage.author) === null || _d === void 0 ? void 0 : _d.discriminator,
|
149
|
+
globalName: (_e = latestPinnedMessage.author) === null || _e === void 0 ? void 0 : _e.globalName,
|
150
|
+
avatar: (_f = latestPinnedMessage.author) === null || _f === void 0 ? void 0 : _f.avatar,
|
151
|
+
bot: (_g = latestPinnedMessage.author) === null || _g === void 0 ? void 0 : _g.bot,
|
152
|
+
},
|
153
|
+
pinned: latestPinnedMessage.pinned,
|
154
|
+
pinnedAt: pinTimestamp.toISOString(), // Thời gian ghim (dùng pinTimestamp từ sự kiện)
|
155
|
+
};
|
156
|
+
// Nếu tin nhắn thuộc server và có thông tin member, lấy thêm thông tin member
|
157
|
+
if (latestPinnedMessage.guild && latestPinnedMessage.member) {
|
158
|
+
data.pinnedMessage.member = await enrichMember(latestPinnedMessage.member);
|
159
|
+
}
|
160
|
+
}
|
161
|
+
else {
|
162
|
+
console.log("🚀 ~ channelPinsUpdate - Không có tin nhắn ghim nào trong kênh.");
|
163
|
+
data.pinnedMessage = null;
|
164
|
+
}
|
165
|
+
// Lưu toàn bộ danh sách tin nhắn ghim (nếu cần)
|
166
|
+
data.pinnedMessages = pinnedMessages.map((message) => {
|
167
|
+
var _a;
|
168
|
+
return ({
|
169
|
+
id: message.id,
|
170
|
+
content: message.content,
|
171
|
+
authorId: (_a = message.author) === null || _a === void 0 ? void 0 : _a.id,
|
172
|
+
createdTimestamp: message.createdTimestamp,
|
173
|
+
});
|
174
|
+
});
|
175
|
+
}
|
176
|
+
catch (error) {
|
177
|
+
console.error("Lỗi khi fetch tin nhắn ghim:", error);
|
178
|
+
data.pinnedMessage = null;
|
179
|
+
data.pinnedMessages = [];
|
180
|
+
}
|
181
|
+
break;
|
182
|
+
case discord_js_1.Events.ChannelUpdate:
|
88
183
|
const oldChannel = args[0];
|
89
184
|
const newChannel = args[1];
|
90
185
|
data.oldChannel = { ...oldChannel };
|
91
186
|
data.newChannel = { ...newChannel };
|
92
187
|
break;
|
93
|
-
case
|
94
|
-
const
|
95
|
-
|
96
|
-
data.
|
97
|
-
|
188
|
+
case discord_js_1.Events.GuildAvailable:
|
189
|
+
const guildAvailable = args[0]; // Đối tượng Guild
|
190
|
+
// Trích xuất thông tin chi tiết từ guild
|
191
|
+
data.guild = {
|
192
|
+
id: guildAvailable.id,
|
193
|
+
name: guildAvailable.name,
|
194
|
+
icon: guildAvailable.icon,
|
195
|
+
description: guildAvailable.description,
|
196
|
+
memberCount: guildAvailable.memberCount,
|
197
|
+
ownerId: guildAvailable.ownerId,
|
198
|
+
joinedTimestamp: guildAvailable.joinedTimestamp,
|
199
|
+
available: guildAvailable.available,
|
200
|
+
channels: guildAvailable.channels.cache.map((channel) => ({
|
201
|
+
id: channel.id,
|
202
|
+
name: channel.name,
|
203
|
+
type: channel.type,
|
204
|
+
})),
|
205
|
+
roles: guildAvailable.roles.cache.map((role) => {
|
206
|
+
var _a;
|
207
|
+
return ({
|
208
|
+
id: role.id,
|
209
|
+
name: role.name,
|
210
|
+
color: role.color,
|
211
|
+
permissions: (_a = role.permissions) === null || _a === void 0 ? void 0 : _a.bitfield,
|
212
|
+
});
|
213
|
+
}),
|
214
|
+
// Nếu cần, fetch owner của guild
|
215
|
+
owner: await guildAvailable
|
216
|
+
.fetchOwner()
|
217
|
+
.then((owner) => {
|
218
|
+
var _a, _b;
|
219
|
+
return ({
|
220
|
+
id: owner.id,
|
221
|
+
username: (_a = owner.user) === null || _a === void 0 ? void 0 : _a.username,
|
222
|
+
globalName: (_b = owner.user) === null || _b === void 0 ? void 0 : _b.globalName,
|
223
|
+
nickname: owner.nickname,
|
224
|
+
});
|
225
|
+
})
|
226
|
+
.catch((error) => {
|
227
|
+
console.error("Lỗi khi fetch owner:", error);
|
228
|
+
return null;
|
229
|
+
}),
|
230
|
+
};
|
98
231
|
break;
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
data.
|
232
|
+
case discord_js_1.Events.GuildCreate:
|
233
|
+
const guildCreated = args[0]; // Guild
|
234
|
+
console.log(`🚀 ~ guildCreate - Bot được thêm vào guild ${guildCreated.name} (ID: ${guildCreated.id})`);
|
235
|
+
data.guild = {
|
236
|
+
id: guildCreated.id,
|
237
|
+
name: guildCreated.name,
|
238
|
+
icon: guildCreated.icon,
|
239
|
+
description: guildCreated.description,
|
240
|
+
memberCount: guildCreated.memberCount,
|
241
|
+
ownerId: guildCreated.ownerId,
|
242
|
+
joinedTimestamp: guildCreated.joinedTimestamp,
|
243
|
+
available: guildCreated.available,
|
244
|
+
channels: guildCreated.channels.cache.map((channel) => ({
|
245
|
+
id: channel.id,
|
246
|
+
name: channel.name,
|
247
|
+
type: channel.type,
|
248
|
+
})),
|
249
|
+
roles: guildCreated.roles.cache.map((role) => {
|
250
|
+
var _a;
|
251
|
+
return ({
|
252
|
+
id: role.id,
|
253
|
+
name: role.name,
|
254
|
+
color: role.color,
|
255
|
+
permissions: (_a = role.permissions) === null || _a === void 0 ? void 0 : _a.bitfield,
|
256
|
+
});
|
257
|
+
}),
|
258
|
+
owner: await guildCreated
|
259
|
+
.fetchOwner()
|
260
|
+
.then((owner) => {
|
261
|
+
var _a, _b;
|
262
|
+
return ({
|
263
|
+
id: owner.id,
|
264
|
+
username: (_a = owner.user) === null || _a === void 0 ? void 0 : _a.username,
|
265
|
+
globalName: (_b = owner.user) === null || _b === void 0 ? void 0 : _b.globalName,
|
266
|
+
nickname: owner.nickname,
|
267
|
+
});
|
268
|
+
})
|
269
|
+
.catch((error) => {
|
270
|
+
console.error("Lỗi khi fetch owner:", error);
|
271
|
+
return null;
|
272
|
+
}),
|
273
|
+
};
|
103
274
|
break;
|
104
|
-
case
|
105
|
-
const
|
106
|
-
|
275
|
+
case discord_js_1.Events.GuildDelete:
|
276
|
+
const guildDeleted = args[0]; // Guild hoặc PartialGuild
|
277
|
+
console.log(`🚀 ~ guildDelete - Bot bị xóa khỏi guild ${guildDeleted.name || "unknown"} (ID: ${guildDeleted.id})`);
|
278
|
+
data.guild = {
|
279
|
+
id: guildDeleted.id,
|
280
|
+
name: guildDeleted.name || "unknown",
|
281
|
+
available: guildDeleted.available || false, // Có thể là false nếu guild không khả dụng
|
282
|
+
};
|
107
283
|
break;
|
108
|
-
case
|
109
|
-
const
|
110
|
-
|
111
|
-
data.
|
112
|
-
|
284
|
+
case discord_js_1.Events.GuildUnavailable:
|
285
|
+
const guildUnavailable = args[0]; // Guild
|
286
|
+
console.log(`🚀 ~ guildUnavailable - Guild ${guildUnavailable.name} (ID: ${guildUnavailable.id}) không khả dụng.`);
|
287
|
+
data.guild = {
|
288
|
+
id: guildUnavailable.id,
|
289
|
+
name: guildUnavailable.name,
|
290
|
+
available: guildUnavailable.available, // Sẽ là false
|
291
|
+
};
|
113
292
|
break;
|
114
|
-
case
|
115
|
-
const
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
293
|
+
case discord_js_1.Events.GuildUpdate:
|
294
|
+
const oldGuild = args[0]; // Guild trước khi thay đổi
|
295
|
+
const newGuild = args[1]; // Guild sau khi thay đổi
|
296
|
+
console.log(`🚀 ~ guildUpdate - Guild ${oldGuild.name} (ID: ${oldGuild.id}) đã được cập nhật.`);
|
297
|
+
data.oldGuild = {
|
298
|
+
id: oldGuild.id,
|
299
|
+
name: oldGuild.name,
|
300
|
+
icon: oldGuild.icon,
|
301
|
+
description: oldGuild.description,
|
302
|
+
memberCount: oldGuild.memberCount,
|
303
|
+
ownerId: oldGuild.ownerId,
|
304
|
+
};
|
305
|
+
data.newGuild = {
|
306
|
+
id: newGuild.id,
|
307
|
+
name: newGuild.name,
|
308
|
+
icon: newGuild.icon,
|
309
|
+
description: newGuild.description,
|
310
|
+
memberCount: newGuild.memberCount,
|
311
|
+
ownerId: newGuild.ownerId,
|
312
|
+
};
|
313
|
+
// So sánh thay đổi (ví dụ: log những thay đổi chính)
|
314
|
+
data.changes = {};
|
315
|
+
if (oldGuild.name !== newGuild.name)
|
316
|
+
data.changes.name = {
|
317
|
+
old: oldGuild.name,
|
318
|
+
new: newGuild.name,
|
319
|
+
};
|
320
|
+
if (oldGuild.icon !== newGuild.icon)
|
321
|
+
data.changes.icon = {
|
322
|
+
old: oldGuild.icon,
|
323
|
+
new: newGuild.icon,
|
324
|
+
};
|
325
|
+
if (oldGuild.description !== newGuild.description)
|
326
|
+
data.changes.description = {
|
327
|
+
old: oldGuild.description,
|
328
|
+
new: newGuild.description,
|
329
|
+
};
|
121
330
|
break;
|
122
|
-
|
123
|
-
case
|
124
|
-
case "guildDelete":
|
125
|
-
case "guildUpdate":
|
126
|
-
const guildData = args[0];
|
127
|
-
data.guild = { ...guildData };
|
128
|
-
break;
|
129
|
-
case "guildUnavailable":
|
130
|
-
case "guildAvailable":
|
131
|
-
const unavailableGuild = args[0];
|
132
|
-
data.guild = { ...unavailableGuild };
|
133
|
-
break;
|
134
|
-
// Role events
|
135
|
-
case "roleCreate":
|
136
|
-
case "roleDelete":
|
331
|
+
case discord_js_1.Events.GuildRoleCreate:
|
332
|
+
case discord_js_1.Events.GuildRoleDelete:
|
137
333
|
const role = args[0];
|
138
334
|
data.role = { ...role };
|
139
335
|
data.guild = { ...role.guild };
|
140
336
|
break;
|
141
|
-
case
|
337
|
+
case discord_js_1.Events.GuildRoleUpdate:
|
142
338
|
const oldRole = args[0];
|
143
339
|
const newRole = args[1];
|
144
340
|
data.oldRole = { ...oldRole };
|
145
341
|
data.newRole = { ...newRole };
|
146
342
|
data.guild = { ...newRole.guild };
|
147
343
|
break;
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
case "stageInstanceUpdate":
|
152
|
-
const stageInstance = args[0];
|
153
|
-
data.stageInstance = { ...stageInstance };
|
344
|
+
case discord_js_1.Events.StageInstanceCreate:
|
345
|
+
const stageInstanceCreated = args[0]; // StageInstance
|
346
|
+
data.stageInstance = { ...stageInstanceCreated };
|
154
347
|
break;
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
348
|
+
case discord_js_1.Events.StageInstanceDelete:
|
349
|
+
const stageInstanceDeleted = args[0]; // StageInstance
|
350
|
+
data.stageInstance = {
|
351
|
+
id: stageInstanceDeleted.id,
|
352
|
+
channelId: stageInstanceDeleted.channelId,
|
353
|
+
guildId: stageInstanceDeleted.guildId,
|
354
|
+
topic: stageInstanceDeleted.topic,
|
355
|
+
privacyLevel: stageInstanceDeleted.privacyLevel,
|
356
|
+
};
|
357
|
+
break;
|
358
|
+
case discord_js_1.Events.StageInstanceUpdate:
|
359
|
+
const oldStageInstance = args[0]; // StageInstance trước khi thay đổi
|
360
|
+
const newStageInstance = args[1]; // StageInstance sau khi thay đổi
|
361
|
+
data.oldStageInstance = oldStageInstance
|
362
|
+
? {
|
363
|
+
id: oldStageInstance.id,
|
364
|
+
channelId: oldStageInstance.channelId,
|
365
|
+
guildId: oldStageInstance.guildId,
|
366
|
+
topic: oldStageInstance.topic,
|
367
|
+
privacyLevel: oldStageInstance.privacyLevel,
|
368
|
+
}
|
369
|
+
: null;
|
370
|
+
data.newStageInstance = {
|
371
|
+
id: newStageInstance.id,
|
372
|
+
channelId: newStageInstance.channelId,
|
373
|
+
guildId: newStageInstance.guildId,
|
374
|
+
topic: newStageInstance.topic,
|
375
|
+
privacyLevel: newStageInstance.privacyLevel,
|
376
|
+
discoverableDisabled: newStageInstance.discoverableDisabled,
|
377
|
+
};
|
378
|
+
// So sánh thay đổi
|
379
|
+
data.changes = {};
|
380
|
+
if (oldStageInstance &&
|
381
|
+
oldStageInstance.topic !== newStageInstance.topic) {
|
382
|
+
data.changes.topic = {
|
383
|
+
old: oldStageInstance.topic,
|
384
|
+
new: newStageInstance.topic,
|
385
|
+
};
|
386
|
+
}
|
387
|
+
if (oldStageInstance &&
|
388
|
+
oldStageInstance.privacyLevel !== newStageInstance.privacyLevel) {
|
389
|
+
data.changes.privacyLevel = {
|
390
|
+
old: oldStageInstance.privacyLevel,
|
391
|
+
new: newStageInstance.privacyLevel,
|
392
|
+
};
|
168
393
|
}
|
169
394
|
break;
|
170
|
-
case
|
171
|
-
const
|
172
|
-
|
173
|
-
data.members = { ...membersChunk };
|
174
|
-
data.guild = { ...guild };
|
395
|
+
case discord_js_1.Events.ThreadCreate:
|
396
|
+
const threadCreate = args[0];
|
397
|
+
data.thread = { ...threadCreate };
|
175
398
|
break;
|
176
|
-
|
177
|
-
|
178
|
-
|
399
|
+
case discord_js_1.Events.ThreadDelete:
|
400
|
+
const deletedThread = args[0];
|
401
|
+
data.thread = { ...deletedThread };
|
402
|
+
break;
|
403
|
+
case discord_js_1.Events.ThreadListSync:
|
404
|
+
const syncedThreads = args[0]; // Collection<Snowflake, ThreadChannel>
|
405
|
+
const channels = args[1]; // Collection<Snowflake, GuildChannel>
|
406
|
+
const guildThreadListSync = args[2]; // Guild
|
407
|
+
console.log(`🚀 ~ threadListSync - Synced ${syncedThreads.size} threads in guild ${guildThreadListSync.name} (ID: ${guildThreadListSync.id})`);
|
408
|
+
// Trích xuất thông tin guild
|
409
|
+
data.guild = {
|
410
|
+
id: guildThreadListSync.id,
|
411
|
+
name: guildThreadListSync.name,
|
412
|
+
};
|
413
|
+
// Trích xuất danh sách kênh
|
414
|
+
data.channels = channels.map((channel) => ({
|
415
|
+
id: channel.id,
|
416
|
+
name: channel.name,
|
417
|
+
type: channel.type,
|
418
|
+
}));
|
419
|
+
// Trích xuất danh sách thread được đồng bộ
|
420
|
+
data.syncedThreads = syncedThreads.map((thread) => ({
|
421
|
+
id: thread.id,
|
422
|
+
name: thread.name,
|
423
|
+
channelId: thread.parentId,
|
424
|
+
guildId: thread.guildId,
|
425
|
+
memberCount: thread.memberCount,
|
426
|
+
createdTimestamp: thread.createdTimestamp,
|
427
|
+
}));
|
428
|
+
case discord_js_1.Events.ThreadMembersUpdate:
|
429
|
+
const addedMembers = args[0]; // Collection<Snowflake, ThreadMember>
|
430
|
+
const removedMembers = args[1]; // Collection<Snowflake, ThreadMember>
|
431
|
+
const threadMembersUpdate = args[2]; // ThreadChannel
|
432
|
+
console.log(`🚀 ~ threadMembersUpdate - Thread ${threadMembersUpdate.name} (ID: ${threadMembersUpdate.id}) updated members.`);
|
433
|
+
// Trích xuất thông tin thread
|
434
|
+
data.thread = {
|
435
|
+
id: threadMembersUpdate.id,
|
436
|
+
name: threadMembersUpdate.name,
|
437
|
+
channelId: threadMembersUpdate.parentId,
|
438
|
+
guildId: threadMembersUpdate.guildId,
|
439
|
+
memberCount: threadMembersUpdate.memberCount,
|
440
|
+
};
|
441
|
+
// Trích xuất danh sách thành viên được thêm
|
442
|
+
data.addedMembers = addedMembers.map((member) => ({
|
443
|
+
id: member.id,
|
444
|
+
userId: member.user,
|
445
|
+
}));
|
446
|
+
// Trích xuất danh sách thành viên bị xóa
|
447
|
+
data.removedMembers = removedMembers.map((member) => ({
|
448
|
+
id: member.id,
|
449
|
+
user: member.user,
|
450
|
+
}));
|
451
|
+
// Nếu cần, fetch thông tin chi tiết của thành viên (yêu cầu GUILD_MEMBERS intent)
|
452
|
+
if (threadMembersUpdate.guild &&
|
453
|
+
(addedMembers.size > 0 || removedMembers.size > 0)) {
|
454
|
+
data.addedMembersDetails = await Promise.all(addedMembers.map(async (member) => ({
|
455
|
+
id: member.id,
|
456
|
+
user: await thread.guild.members
|
457
|
+
.fetch(member.user)
|
458
|
+
.then((m) => {
|
459
|
+
var _a, _b;
|
460
|
+
return ({
|
461
|
+
id: m.id,
|
462
|
+
username: (_a = m.user) === null || _a === void 0 ? void 0 : _a.username,
|
463
|
+
globalName: (_b = m.user) === null || _b === void 0 ? void 0 : _b.globalName,
|
464
|
+
nickname: m.nickname,
|
465
|
+
});
|
466
|
+
})
|
467
|
+
.catch(() => null),
|
468
|
+
})));
|
469
|
+
data.removedMembersDetails = await Promise.all(removedMembers.map(async (member) => ({
|
470
|
+
id: member.id,
|
471
|
+
user: await thread.guild.members
|
472
|
+
.fetch(member.user)
|
473
|
+
.then((m) => {
|
474
|
+
var _a, _b;
|
475
|
+
return ({
|
476
|
+
id: m.id,
|
477
|
+
username: (_a = m.user) === null || _a === void 0 ? void 0 : _a.username,
|
478
|
+
globalName: (_b = m.user) === null || _b === void 0 ? void 0 : _b.globalName,
|
479
|
+
nickname: m.nickname,
|
480
|
+
});
|
481
|
+
})
|
482
|
+
.catch(() => null),
|
483
|
+
})));
|
484
|
+
}
|
485
|
+
break;
|
486
|
+
case discord_js_1.Events.ThreadMemberUpdate:
|
487
|
+
const oldMember = args[0]; // ThreadMember trước khi thay đổi
|
488
|
+
const newMember = args[1]; // ThreadMember sau khi thay đổi
|
489
|
+
console.log(`🚀 ~ threadMemberUpdate - Thread member updated in thread ${newMember.thread.id}`);
|
490
|
+
// Trích xuất thông tin thread
|
491
|
+
const thread = newMember.thread;
|
492
|
+
data.thread = {
|
493
|
+
id: thread.id,
|
494
|
+
name: thread.name,
|
495
|
+
channelId: thread.parentId,
|
496
|
+
guildId: thread.guildId,
|
497
|
+
memberCount: thread.memberCount,
|
498
|
+
};
|
499
|
+
// Trích xuất thông tin thành viên trước và sau khi thay đổi
|
500
|
+
data.oldMember = {
|
501
|
+
id: oldMember.id,
|
502
|
+
userId: oldMember.userId,
|
503
|
+
threadId: oldMember.threadId,
|
504
|
+
};
|
505
|
+
data.newMember = {
|
506
|
+
id: newMember.id,
|
507
|
+
userId: newMember.userId,
|
508
|
+
threadId: newMember.threadId,
|
509
|
+
};
|
510
|
+
// So sánh thay đổi (nếu có)
|
511
|
+
data.changes = {};
|
512
|
+
// Hiện tại ThreadMember không có nhiều thuộc tính có thể thay đổi, nhưng bạn có thể thêm logic so sánh nếu Discord cập nhật thêm tính năng
|
513
|
+
// Ví dụ: if (oldMember.someProperty !== newMember.someProperty) { ... }
|
514
|
+
// Fetch thông tin chi tiết của thành viên (nếu cần)
|
515
|
+
if (thread.guild) {
|
516
|
+
data.memberDetails = await thread.guild.members
|
517
|
+
.fetch(newMember.userId)
|
518
|
+
.then((member) => {
|
519
|
+
var _a, _b;
|
520
|
+
return ({
|
521
|
+
id: member.id,
|
522
|
+
username: (_a = member.user) === null || _a === void 0 ? void 0 : _a.username,
|
523
|
+
globalName: (_b = member.user) === null || _b === void 0 ? void 0 : _b.globalName,
|
524
|
+
nickname: member.nickname,
|
525
|
+
roles: member.roles.cache.map((role) => ({
|
526
|
+
id: role.id,
|
527
|
+
name: role.name,
|
528
|
+
})),
|
529
|
+
});
|
530
|
+
})
|
531
|
+
.catch((error) => {
|
532
|
+
console.error("Lỗi khi fetch member:", error);
|
533
|
+
return null;
|
534
|
+
});
|
535
|
+
}
|
536
|
+
break;
|
537
|
+
case discord_js_1.Events.ThreadUpdate:
|
538
|
+
const oldThread = args[0];
|
539
|
+
const newThread = args[1];
|
540
|
+
data.oldThread = { ...oldThread };
|
541
|
+
data.newThread = { ...newThread };
|
542
|
+
break;
|
543
|
+
// Moderation events
|
544
|
+
case discord_js_1.Events.GuildBanAdd:
|
545
|
+
case discord_js_1.Events.GuildBanRemove:
|
179
546
|
const ban = args[0];
|
180
547
|
data.ban = { ...ban };
|
181
548
|
data.guild = { ...ban.guild };
|
182
549
|
data.user = await enrichMember(ban.user, ban.guild.id);
|
183
550
|
break;
|
551
|
+
case discord_js_1.Events.GuildAuditLogEntryCreate:
|
552
|
+
const auditLogEntry = args[0]; // GuildAuditLogsEntry
|
553
|
+
const guildAuditLogEntry = args[1]; // Guild
|
554
|
+
// Trích xuất thông tin từ audit log entry
|
555
|
+
data.auditLogEntry = {
|
556
|
+
id: auditLogEntry.id,
|
557
|
+
guildId: guildAuditLogEntry.id,
|
558
|
+
action: auditLogEntry.action,
|
559
|
+
executorId: auditLogEntry.executorId,
|
560
|
+
targetId: auditLogEntry.targetId,
|
561
|
+
reason: auditLogEntry.reason || null,
|
562
|
+
createdTimestamp: auditLogEntry.createdTimestamp,
|
563
|
+
};
|
564
|
+
// Fetch thông tin chi tiết của người thực hiện hành động (executor)
|
565
|
+
if (auditLogEntry.executorId) {
|
566
|
+
try {
|
567
|
+
const executor = await guildAuditLogEntry.client.users.fetch(auditLogEntry.executorId);
|
568
|
+
data.executor = {
|
569
|
+
id: executor.id,
|
570
|
+
username: executor.username,
|
571
|
+
globalName: executor.globalName,
|
572
|
+
tag: executor.tag,
|
573
|
+
};
|
574
|
+
}
|
575
|
+
catch (error) {
|
576
|
+
console.error("Lỗi khi fetch executor:", error);
|
577
|
+
data.executor = null;
|
578
|
+
}
|
579
|
+
}
|
580
|
+
break;
|
184
581
|
// Emoji & Sticker events
|
185
|
-
case
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
break;
|
192
|
-
case
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
data.
|
197
|
-
|
582
|
+
case discord_js_1.Events.GuildEmojiCreate:
|
583
|
+
const emojiCreated = args[0]; // Emoji
|
584
|
+
data.emoji = { ...emojiCreated };
|
585
|
+
case discord_js_1.Events.GuildEmojiDelete:
|
586
|
+
const emojiDeleted = args[0]; // Emoji
|
587
|
+
data.emoji = { ...emojiDeleted };
|
588
|
+
break;
|
589
|
+
case discord_js_1.Events.GuildEmojiUpdate:
|
590
|
+
const oldEmoji = args[0]; // Emoji trước khi thay đổi
|
591
|
+
const newEmoji = args[1]; // Emoji sau khi thay đổi
|
592
|
+
data.oldEmoji = { ...oldEmoji };
|
593
|
+
data.newEmoji = { ...newEmoji };
|
594
|
+
break;
|
595
|
+
case discord_js_1.Events.GuildStickerCreate:
|
596
|
+
const stickerCreated = args[0]; // Sticker
|
597
|
+
data.sticker = { ...stickerCreated };
|
598
|
+
break;
|
599
|
+
case discord_js_1.Events.GuildStickerDelete:
|
600
|
+
const stickerDeleted = args[0]; // Sticker
|
601
|
+
data.sticker = { ...stickerDeleted };
|
602
|
+
break;
|
603
|
+
case discord_js_1.Events.GuildStickerUpdate:
|
604
|
+
const oldSticker = args[0]; // Sticker trước khi thay đổi
|
605
|
+
const newSticker = args[1]; // Sticker sau khi thay đổi
|
606
|
+
data.oldSticker = { ...oldSticker };
|
607
|
+
data.newSticker = { ...newSticker };
|
608
|
+
break;
|
609
|
+
// Integration & Webhook events
|
610
|
+
case discord_js_1.Events.GuildIntegrationsUpdate:
|
611
|
+
const guildIntegrations = args[0]; // Guild
|
612
|
+
data.guild = {
|
613
|
+
id: guildIntegrations.id,
|
614
|
+
name: guildIntegrations.name,
|
615
|
+
};
|
616
|
+
break;
|
617
|
+
case discord_js_1.Events.WebhooksUpdate:
|
618
|
+
const webhooksChannel = args[0]; // Channel
|
619
|
+
data.webhooksChannel = {
|
620
|
+
...webhooksChannel,
|
621
|
+
};
|
622
|
+
data.guild = {
|
623
|
+
id: webhooksChannel.guildId,
|
624
|
+
name: webhooksChannel.guild.name,
|
625
|
+
};
|
626
|
+
break;
|
627
|
+
// Invite events
|
628
|
+
case discord_js_1.Events.InviteCreate:
|
629
|
+
const inviteCreated = args[0]; // Invite
|
630
|
+
data.invite = { ...inviteCreated };
|
631
|
+
data.guild = { ...inviteCreated.guild };
|
632
|
+
break;
|
633
|
+
case discord_js_1.Events.InviteDelete:
|
634
|
+
const inviteDeleted = args[0]; // Invite
|
635
|
+
data.invite = { ...inviteDeleted };
|
636
|
+
data.guild = { ...inviteDeleted.guild };
|
198
637
|
break;
|
199
638
|
// Voice events
|
200
|
-
case
|
201
|
-
const
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
}
|
639
|
+
case discord_js_1.Events.VoiceChannelEffectSend:
|
640
|
+
const voiceChannelEffectSend = args[0]; // VoiceChannelEffectSend
|
641
|
+
data.voiceChannelEffectSend = { ...voiceChannelEffectSend };
|
642
|
+
break;
|
643
|
+
case discord_js_1.Events.VoiceStateUpdate:
|
644
|
+
const oldVoiceState = args[0]; // VoiceState trước khi thay đổi
|
645
|
+
const newVoiceState = args[1]; // VoiceState sau khi thay đổi
|
646
|
+
data.oldVoiceState = { ...oldVoiceState };
|
647
|
+
data.newVoiceState = { ...newVoiceState };
|
208
648
|
break;
|
209
649
|
// Presence events
|
210
|
-
case
|
650
|
+
case discord_js_1.Events.PresenceUpdate:
|
211
651
|
const oldPresence = args[0];
|
212
652
|
const newPresence = args[1];
|
213
653
|
if (oldPresence)
|
@@ -215,15 +655,23 @@ class DiscordEventHandler {
|
|
215
655
|
data.newPresence = { ...newPresence };
|
216
656
|
break;
|
217
657
|
// Scheduled event events
|
218
|
-
case
|
219
|
-
case
|
220
|
-
case
|
658
|
+
case discord_js_1.Events.GuildScheduledEventCreate:
|
659
|
+
case discord_js_1.Events.GuildScheduledEventDelete:
|
660
|
+
case discord_js_1.Events.GuildScheduledEventUpdate:
|
221
661
|
const scheduledEvent = args[0];
|
222
662
|
data.scheduledEvent = { ...scheduledEvent };
|
223
663
|
data.guild = { ...scheduledEvent.guild };
|
224
664
|
break;
|
665
|
+
case discord_js_1.Events.GuildScheduledEventUserAdd:
|
666
|
+
case discord_js_1.Events.GuildScheduledEventUserRemove:
|
667
|
+
const guildScheduledEvent = args[0];
|
668
|
+
const user = args[1];
|
669
|
+
data.user = { ...user };
|
670
|
+
data.guildScheduledEvent = { ...guildScheduledEvent };
|
671
|
+
data.guild = { ...guildScheduledEvent.guild };
|
672
|
+
break;
|
225
673
|
// Interaction events
|
226
|
-
case
|
674
|
+
case discord_js_1.Events.InteractionCreate:
|
227
675
|
const interaction = args[0];
|
228
676
|
data.interaction = { ...interaction };
|
229
677
|
if (interaction.guild) {
|
@@ -236,54 +684,126 @@ class DiscordEventHandler {
|
|
236
684
|
data.user = await enrichMember(interaction.user, interaction.guildId || undefined);
|
237
685
|
}
|
238
686
|
break;
|
687
|
+
case discord_js_1.Events.ApplicationCommandPermissionsUpdate:
|
688
|
+
const dataApp = args[0]; // ApplicationCommandPermissionsUpdateData
|
689
|
+
data.dataApp = { ...dataApp };
|
690
|
+
break;
|
691
|
+
// Bot status events
|
692
|
+
case discord_js_1.Events.Debug:
|
693
|
+
const info = args[0];
|
694
|
+
data.info = info;
|
695
|
+
break;
|
696
|
+
case discord_js_1.Events.Error:
|
697
|
+
const error = args[0];
|
698
|
+
data.error = { ...error };
|
699
|
+
break;
|
700
|
+
case discord_js_1.Events.Warn:
|
701
|
+
const warn = args[0];
|
702
|
+
data.warn = warn;
|
703
|
+
break;
|
704
|
+
case discord_js_1.Events.ClientReady:
|
705
|
+
const client = args[0]; // Client
|
706
|
+
data.client = { ...client };
|
707
|
+
break;
|
708
|
+
case discord_js_1.Events.ShardDisconnect:
|
709
|
+
const event = args[0];
|
710
|
+
const ShardDisconnectId = args[1];
|
711
|
+
data.event = { ...event };
|
712
|
+
data.id = ShardDisconnectId;
|
713
|
+
break;
|
714
|
+
case discord_js_1.Events.ShardError:
|
715
|
+
const shardError = args[0];
|
716
|
+
const shardId = args[1];
|
717
|
+
data.errorShard = { ...shardError };
|
718
|
+
data.shardId = shardId;
|
719
|
+
break;
|
720
|
+
case discord_js_1.Events.ShardReady:
|
721
|
+
const ShardReadyId = args[0];
|
722
|
+
const unavailableGuilds = args[1];
|
723
|
+
data.ShardReadyId = ShardReadyId;
|
724
|
+
data.unavailableGuilds = unavailableGuilds;
|
725
|
+
break;
|
726
|
+
case discord_js_1.Events.ShardReconnecting:
|
727
|
+
const ShardReconnectingId = args[0];
|
728
|
+
data.ShardReconnectingId = ShardReconnectingId;
|
729
|
+
break;
|
730
|
+
case discord_js_1.Events.ShardResume:
|
731
|
+
const ShardResumeId = args[0];
|
732
|
+
const replayedEvents = args[1];
|
733
|
+
data.ShardResumeId = ShardResumeId;
|
734
|
+
data.replayedEvents = replayedEvents;
|
735
|
+
break;
|
736
|
+
// User event
|
737
|
+
case discord_js_1.Events.UserUpdate:
|
738
|
+
const oldUser = args[0]; // User trước khi thay đổi
|
739
|
+
const newUser = args[1]; // User sau khi thay đổi
|
740
|
+
data.oldUser = { ...oldUser };
|
741
|
+
data.newUser = { ...newUser };
|
742
|
+
break;
|
743
|
+
// Member events
|
744
|
+
case discord_js_1.Events.GuildMemberAdd:
|
745
|
+
const memberAdded = args[0]; // GuildMember
|
746
|
+
data.member = { ...memberAdded };
|
747
|
+
break;
|
748
|
+
case discord_js_1.Events.GuildMemberAvailable:
|
749
|
+
const memberAvailable = args[0]; // GuildMember
|
750
|
+
data.member = { ...memberAvailable };
|
751
|
+
break;
|
752
|
+
case discord_js_1.Events.GuildMemberRemove:
|
753
|
+
const memberRemoved = args[0]; // GuildMember
|
754
|
+
data.member = { ...memberRemoved };
|
755
|
+
break;
|
756
|
+
case discord_js_1.Events.GuildMemberUpdate:
|
757
|
+
const memberUpdate = args[0];
|
758
|
+
data.member = { ...memberUpdate };
|
759
|
+
data.guild = { ...memberUpdate.guild };
|
760
|
+
break;
|
761
|
+
case discord_js_1.Events.GuildMembersChunk:
|
762
|
+
const membersChunk = args[0];
|
763
|
+
const guild = args[1];
|
764
|
+
const chunk = args[2]; // Số lượng thành viên trong chunk
|
765
|
+
data.members = { ...membersChunk };
|
766
|
+
data.guild = { ...guild };
|
767
|
+
data.chunk = { ...chunk };
|
768
|
+
break;
|
239
769
|
// Auto moderation events
|
240
|
-
case
|
241
|
-
case "autoModerationRuleDelete":
|
242
|
-
case "autoModerationRuleUpdate":
|
243
|
-
const rule = args[0];
|
244
|
-
data.rule = { ...rule };
|
245
|
-
data.guild = { ...rule.guild };
|
246
|
-
break;
|
247
|
-
case "autoModerationActionExecution":
|
770
|
+
case discord_js_1.Events.AutoModerationActionExecution:
|
248
771
|
const action = args[0];
|
249
772
|
data.action = { ...action };
|
250
773
|
if (action.guild) {
|
251
774
|
data.guild = { ...action.guild };
|
252
775
|
}
|
253
776
|
break;
|
777
|
+
case discord_js_1.Events.AutoModerationRuleCreate:
|
778
|
+
const ruleCreated = args[0];
|
779
|
+
data.rule = { ...ruleCreated };
|
780
|
+
break;
|
781
|
+
case discord_js_1.Events.AutoModerationRuleDelete:
|
782
|
+
const ruleDeleted = args[0];
|
783
|
+
data.rule = { ...ruleDeleted };
|
784
|
+
break;
|
785
|
+
case discord_js_1.Events.AutoModerationRuleUpdate:
|
786
|
+
const oldRule = args[0]; // AutoModerationRule trước khi thay đổi
|
787
|
+
const newRule = args[1]; // AutoModerationRule sau khi thay đổi
|
788
|
+
data.oldRule = { ...oldRule };
|
789
|
+
data.newRule = { ...newRule };
|
790
|
+
break;
|
791
|
+
// Poll event
|
792
|
+
case discord_js_1.Events.MessagePollVoteAdd:
|
793
|
+
const pollVoteAdd = args[0]; // PollVote
|
794
|
+
const userId = args[1]; // User ID
|
795
|
+
data.pollVote = { ...pollVoteAdd };
|
796
|
+
data.userId = userId;
|
797
|
+
break;
|
798
|
+
case discord_js_1.Events.MessagePollVoteRemove:
|
799
|
+
const pollVoteRemove = args[0]; // PollVote
|
800
|
+
const userIdRemove = args[1]; // User ID
|
801
|
+
data.pollVote = { ...pollVoteRemove };
|
802
|
+
data.userId = userIdRemove;
|
803
|
+
break;
|
254
804
|
default:
|
255
805
|
data.eventData = args;
|
256
|
-
|
257
|
-
const firstArg = args[0];
|
258
|
-
if (firstArg) {
|
259
|
-
if (firstArg.author && firstArg.guildId) {
|
260
|
-
// Message-like object
|
261
|
-
data.user = await enrichMember(firstArg.author, firstArg.guildId);
|
262
|
-
}
|
263
|
-
else if (firstArg.user && firstArg.guild) {
|
264
|
-
// Member-like object
|
265
|
-
data.user = await enrichMember(firstArg.user, firstArg.guild.id);
|
266
|
-
}
|
267
|
-
else if (firstArg.id) {
|
268
|
-
// User-like object, try to find in guilds
|
269
|
-
const guilds = this.client.guilds.cache;
|
270
|
-
let enrichedUser = null;
|
271
|
-
// Try to find user in any guild the bot is in
|
272
|
-
for (const [, guild] of guilds) {
|
273
|
-
try {
|
274
|
-
const member = await guild.members.fetch(firstArg.id);
|
275
|
-
if (member) {
|
276
|
-
enrichedUser = await enrichMember(firstArg, guild.id);
|
277
|
-
break;
|
278
|
-
}
|
279
|
-
}
|
280
|
-
catch {
|
281
|
-
// Ignore errors, just try next guild
|
282
|
-
}
|
283
|
-
}
|
284
|
-
data.user = enrichedUser || firstArg;
|
285
|
-
}
|
286
|
-
}
|
806
|
+
break;
|
287
807
|
}
|
288
808
|
this.triggerInstance.emit([
|
289
809
|
this.triggerInstance.helpers.returnJsonArray([data]),
|