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.
@@ -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 "messageCreate":
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 "messageDelete":
45
+ case discord_js_1.Events.MessageDelete:
44
46
  const deletedMessage = args[0];
45
47
  data.message = { ...deletedMessage };
46
48
  break;
47
- case "messageUpdate":
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 "messageReactionAdd":
54
- case "messageReactionRemove":
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 "messageReactionRemoveAll":
85
+ case discord_js_1.Events.MessageReactionRemoveAll:
61
86
  const messageReactionRemoved = args[0];
62
87
  data.message = { ...messageReactionRemoved };
63
88
  break;
64
- case "typingStart":
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
- // Channel events
72
- case "channelCreate":
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 "channelDelete":
120
+ case discord_js_1.Events.ChannelDelete:
84
121
  const deletedChannel = args[0];
85
122
  data.channel = { ...deletedChannel };
86
123
  break;
87
- case "channelUpdate":
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 "channelPinsUpdate":
94
- const pinsChannel = args[0];
95
- const pinTimestamp = args[1];
96
- data.channel = { ...pinsChannel };
97
- data.pinTimestamp = pinTimestamp;
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
- // Thread events
100
- case "threadCreate":
101
- const thread = args[0];
102
- data.thread = { ...thread };
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 "threadDelete":
105
- const deletedThread = args[0];
106
- data.thread = { ...deletedThread };
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 "threadUpdate":
109
- const oldThread = args[0];
110
- const newThread = args[1];
111
- data.oldThread = { ...oldThread };
112
- data.newThread = { ...newThread };
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 "threadListSync":
115
- const threads = args[0];
116
- data.threads = { ...threads };
117
- break;
118
- case "threadMembersUpdate":
119
- const threadMembersUpdate = args[0];
120
- data.thread = { ...threadMembersUpdate };
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
- // Guild events
123
- case "guildCreate":
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 "roleUpdate":
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
- // Stage instance events
149
- case "stageInstanceCreate":
150
- case "stageInstanceDelete":
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
- // Member events
156
- case "guildMemberAdd":
157
- case "guildMemberRemove":
158
- case "guildMemberUpdate":
159
- const member = args[0];
160
- data.member = { ...member };
161
- data.guild = { ...member.guild };
162
- // Enrich with roles information
163
- if (member.roles) {
164
- data.member.roles = member.roles.cache.map((role) => ({
165
- id: role.id,
166
- name: role.name,
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 "guildMembersChunk":
171
- const membersChunk = args[0];
172
- const guild = args[1];
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
- // Ban events
177
- case "guildBanAdd":
178
- case "guildBanRemove":
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 "emojiCreate":
186
- case "emojiDelete":
187
- case "emojiUpdate":
188
- const emoji = args[0];
189
- data.emoji = { ...emoji };
190
- // data.guild = { ...emoji.guild };
191
- break;
192
- case "stickerCreate":
193
- case "stickerDelete":
194
- case "stickerUpdate":
195
- const sticker = args[0];
196
- data.sticker = { ...sticker };
197
- data.guild = { ...sticker.guild };
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 "voiceStateUpdate":
201
- const oldState = args[0];
202
- const newState = args[1];
203
- data.oldState = { ...oldState };
204
- data.newState = { ...newState };
205
- if (newState.member) {
206
- data.member = await enrichMember(newState.member, newState.guild.id);
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 "presenceUpdate":
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 "guildScheduledEventCreate":
219
- case "guildScheduledEventDelete":
220
- case "guildScheduledEventUpdate":
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 "interactionCreate":
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 "autoModerationRuleCreate":
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
- // Try to extract user/member and guild info from the first argument
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]),