From ec6f0de35b93a318ec2cd8513bf5ae3d8e44780e Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Tue, 5 Nov 2024 15:28:39 -0600 Subject: [PATCH 01/11] types(GuildAuditLogEntry): Fix some incorrect types --- packages/discord.js/typings/index.d.ts | 40 +++++++++++++++----------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 94b76ff48ef2..70882f946743 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -1566,16 +1566,16 @@ export class GuildAuditLogsEntry< public get createdAt(): Date; public get createdTimestamp(): number; public executorId: Snowflake | null; - public executor: User | null; + public executor: User | PartialUser | null; public extra: TResolvedType extends keyof GuildAuditLogsEntryExtraField ? GuildAuditLogsEntryExtraField[TResolvedType] : null; public id: Snowflake; public reason: string | null; public targetId: Snowflake | null; - public target: TTargetType extends keyof GuildAuditLogsEntryTargetField - ? GuildAuditLogsEntryTargetField[TTargetType] - : Role | GuildEmoji | { id: Snowflake } | null; + public target: TTargetType extends keyof GuildAuditLogsEntryTargetField + ? GuildAuditLogsEntryTargetField[TTargetType] + : { id: Snowflake | undefined; [x: string]: unknown } | null; public targetType: TTargetType; public static actionType(action: AuditLogEvent): GuildAuditLogsActionType; public static targetType(target: AuditLogEvent): GuildAuditLogsTargetType; @@ -5906,17 +5906,19 @@ interface GuildAuditLogsTypes { [AuditLogEvent.ThreadUpdate]: ['Thread', 'Update']; [AuditLogEvent.ThreadDelete]: ['Thread', 'Delete']; [AuditLogEvent.ApplicationCommandPermissionUpdate]: ['ApplicationCommand', 'Update']; + [AuditLogEvent.SoundboardSoundCreate]: ['SoundboardSound', 'Create']; + [AuditLogEvent.SoundboardSoundUpdate]: ['SoundboardSound', 'Update']; + [AuditLogEvent.SoundboardSoundDelete]: ['SoundboardSound', 'Delete']; [AuditLogEvent.AutoModerationRuleCreate]: ['AutoModeration', 'Create']; [AuditLogEvent.AutoModerationRuleUpdate]: ['AutoModeration', 'Update']; [AuditLogEvent.AutoModerationRuleDelete]: ['AutoModeration', 'Delete']; - [AuditLogEvent.AutoModerationBlockMessage]: ['AutoModeration', 'Create']; - [AuditLogEvent.AutoModerationFlagToChannel]: ['AutoModeration', 'Create']; - [AuditLogEvent.AutoModerationUserCommunicationDisabled]: ['AutoModeration', 'Create']; + [AuditLogEvent.AutoModerationBlockMessage]: ['User', 'Update']; + [AuditLogEvent.AutoModerationFlagToChannel]: ['User', 'Update']; + [AuditLogEvent.AutoModerationUserCommunicationDisabled]: ['User', 'Update']; [AuditLogEvent.OnboardingPromptCreate]: ['GuildOnboardingPrompt', 'Create']; [AuditLogEvent.OnboardingPromptUpdate]: ['GuildOnboardingPrompt', 'Update']; [AuditLogEvent.OnboardingPromptDelete]: ['GuildOnboardingPrompt', 'Delete']; - [AuditLogEvent.OnboardingCreate]: ['GuildOnboarding', 'Create']; - [AuditLogEvent.OnboardingUpdate]: ['GuildOnboarding', 'Update']; + // Never have a target: CreatorMonetizationRequestCreated, CreatorMonetizationTermsAccepted, OnboardingCreate, OnboardingUpdate, HomeSettingsCreate, HomeSettingsUpdate } export type GuildAuditLogsActionType = GuildAuditLogsTypes[keyof GuildAuditLogsTypes][1] | 'All'; @@ -5927,7 +5929,7 @@ export interface GuildAuditLogsEntryExtraField { [AuditLogEvent.MemberPrune]: { removed: number; days: number }; [AuditLogEvent.MemberMove]: { channel: VoiceBasedChannel | { id: Snowflake }; count: number }; [AuditLogEvent.MessageDelete]: { channel: GuildTextBasedChannel | { id: Snowflake }; count: number }; - [AuditLogEvent.MessageBulkDelete]: { channel: GuildTextBasedChannel | { id: Snowflake }; count: number }; + [AuditLogEvent.MessageBulkDelete]: { count: number }; [AuditLogEvent.MessagePin]: { channel: GuildTextBasedChannel | { id: Snowflake }; messageId: Snowflake }; [AuditLogEvent.MessageUnpin]: { channel: GuildTextBasedChannel | { id: Snowflake }; messageId: Snowflake }; [AuditLogEvent.MemberDisconnect]: { count: number }; @@ -5967,12 +5969,12 @@ export interface GuildAuditLogsEntryExtraField { }; } -export interface GuildAuditLogsEntryTargetField { - User: User | null; +export interface GuildAuditLogsEntryTargetField { + User: User | PartialUser | null; Guild: Guild; Webhook: Webhook; Invite: Invite; - Message: TActionType extends AuditLogEvent.MessageBulkDelete ? Guild | { id: Snowflake } : User; + Message: TAction extends AuditLogEvent.MessageBulkDelete ? GuildTextBasedChannel | { id: Snowflake } : User | null; Integration: Integration; Channel: NonThreadGuildBasedChannel | { id: Snowflake; [x: string]: unknown }; Thread: AnyThreadChannel | { id: Snowflake; [x: string]: unknown }; @@ -5980,8 +5982,12 @@ export interface GuildAuditLogsEntryTargetField { @@ -5994,10 +6000,10 @@ export interface GuildAuditLogsFetchOptions Date: Tue, 5 Nov 2024 15:35:06 -0600 Subject: [PATCH 02/11] Fix some runtime logic --- .../src/structures/GuildAuditLogsEntry.js | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/discord.js/src/structures/GuildAuditLogsEntry.js b/packages/discord.js/src/structures/GuildAuditLogsEntry.js index 53c5b3d3fcd3..347bbab3c8f7 100644 --- a/packages/discord.js/src/structures/GuildAuditLogsEntry.js +++ b/packages/discord.js/src/structures/GuildAuditLogsEntry.js @@ -14,7 +14,6 @@ const Partials = require('../util/Partials'); const { flatten } = require('../util/Util'); const Targets = { - All: 'All', Guild: 'Guild', GuildScheduledEvent: 'GuildScheduledEvent', Channel: 'Channel', @@ -30,11 +29,12 @@ const Targets = { Thread: 'Thread', ApplicationCommand: 'ApplicationCommand', AutoModeration: 'AutoModeration', - GuildOnboarding: 'GuildOnboarding', GuildOnboardingPrompt: 'GuildOnboardingPrompt', + SoundboardSound: 'SoundboardSound', Unknown: 'Unknown', }; +// TODO: Add soundboard sounds when https://github.com/discordjs/discord.js/pull/10590 is merged /** * The target of a guild audit log entry. It can be one of: * * A guild @@ -43,8 +43,7 @@ const Targets = { * * A role * * An invite * * A webhook - * * An emoji - * * A message + * * A guild emoji * * An integration * * A stage instance * * A sticker @@ -55,7 +54,7 @@ const Targets = { * * A guild onboarding prompt * * An object with an id key if target was deleted or fake entity * * An object where the keys represent either the new value or the old value - * @typedef {?(Object|Guild|BaseChannel|User|Role|Invite|Webhook|GuildEmoji|Message|Integration|StageInstance|Sticker| + * @typedef {?(Object|Guild|BaseChannel|User|Role|Invite|Webhook|GuildEmoji|Integration|StageInstance|Sticker| * GuildScheduledEvent|ApplicationCommand|AutoModerationRule|GuildOnboardingPrompt)} AuditLogEntryTarget */ @@ -83,9 +82,10 @@ const Targets = { * * Sticker * * Thread * * GuildScheduledEvent - * * ApplicationCommandPermission - * * GuildOnboarding + * * ApplicationCommand * * GuildOnboardingPrompt + * * SoundboardSound + * * AutoModeration * * Unknown * @typedef {string} AuditLogTargetType */ @@ -199,7 +199,6 @@ class GuildAuditLogsEntry { case AuditLogEvent.MemberMove: case AuditLogEvent.MessageDelete: - case AuditLogEvent.MessageBulkDelete: this.extra = { channel: guild.channels.cache.get(data.options.channel_id) ?? { id: data.options.channel_id }, count: Number(data.options.count), @@ -214,6 +213,7 @@ class GuildAuditLogsEntry { }; break; + case AuditLogEvent.MessageBulkDelete: case AuditLogEvent.MemberDisconnect: this.extra = { count: Number(data.options.count), @@ -365,10 +365,15 @@ class GuildAuditLogsEntry { data.action_type === AuditLogEvent.OnboardingPromptCreate ? new GuildOnboardingPrompt(guild.client, changesReduce(this.changes, { id: data.target_id }), guild.id) : changesReduce(this.changes, { id: data.target_id }); - } else if (targetType === Targets.GuildOnboarding) { - this.target = changesReduce(this.changes, { id: data.target_id }); + } else if (targetType === Targets.Role) { + this.target = guild.roles.cache.get(data.target_id) ?? { id: data.target_id }; + } else if (targetType === Targets.Emoji) { + this.target = guild.emojis.cache.get(data.target_id) ?? { id: data.target_id }; + // TODO: Uncomment after https://github.com/discordjs/discord.js/pull/10590 is merged + // } else if (targetType === Targets.SoundboardSound) { + // this.target = guild.soundboardSounds.cache.get(data.target_id) ?? { id: data.target_id }; } else if (data.target_id) { - this.target = guild[`${targetType.toLowerCase()}s`]?.cache.get(data.target_id) ?? { id: data.target_id }; + this.target = { id: data.target_id }; } } @@ -392,9 +397,10 @@ class GuildAuditLogsEntry { if (target < 110) return Targets.GuildScheduledEvent; if (target < 120) return Targets.Thread; if (target < 130) return Targets.ApplicationCommand; - if (target >= 140 && target < 150) return Targets.AutoModeration; + if (target < 140) return Targets.SoundboardSound; + if (target >= 140 && target <= 142) return Targets.AutoModeration; + if (target >= 143 && target <= 145) return Targets.User; if (target >= 163 && target <= 165) return Targets.GuildOnboardingPrompt; - if (target >= 160 && target < 170) return Targets.GuildOnboarding; return Targets.Unknown; } @@ -421,9 +427,7 @@ class GuildAuditLogsEntry { AuditLogEvent.GuildScheduledEventCreate, AuditLogEvent.ThreadCreate, AuditLogEvent.AutoModerationRuleCreate, - AuditLogEvent.AutoModerationBlockMessage, AuditLogEvent.OnboardingPromptCreate, - AuditLogEvent.OnboardingCreate, ].includes(action) ) { return 'Create'; @@ -475,8 +479,10 @@ class GuildAuditLogsEntry { AuditLogEvent.ThreadUpdate, AuditLogEvent.ApplicationCommandPermissionUpdate, AuditLogEvent.AutoModerationRuleUpdate, + AuditLogEvent.AutoModerationBlockMessage, + AuditLogEvent.AutoModerationFlagToChannel, + AuditLogEvent.AutoModerationUserCommunicationDisabled, AuditLogEvent.OnboardingPromptUpdate, - AuditLogEvent.OnboardingUpdate, ].includes(action) ) { return 'Update'; From 2ae6aada6d8ac08e1c757c2fbd61db91c0701932 Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Tue, 5 Nov 2024 16:07:40 -0600 Subject: [PATCH 03/11] Capitalize `key` type parameter --- packages/discord.js/typings/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index ef6f04863981..48eb2c1edef6 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -5741,7 +5741,7 @@ export type GuildAuditLogsResolvable = AuditLogEvent | null; export type GuildAuditLogsTargetType = GuildAuditLogsTypes[keyof GuildAuditLogsTypes][0] | 'Unknown'; export type GuildAuditLogsTargets = { - [key in GuildAuditLogsTargetType]: key; + [Key in GuildAuditLogsTargetType]: Key; }; export type GuildBanResolvable = GuildBan | UserResolvable; From 5b27a0f1a68ff2f769de13890a161ac7644bec8e Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Tue, 5 Nov 2024 16:10:38 -0600 Subject: [PATCH 04/11] Update index.test-d.ts --- packages/discord.js/typings/index.test-d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 390d698223f6..42b7d0237e51 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -2166,13 +2166,13 @@ expectType al.entries.first()?.extra), ); -expectType>( +expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.MemberKick }).then(al => al.entries.first()?.target), ); expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.StageInstanceCreate }).then(al => al.entries.first()?.target), ); -expectType>( +expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.MessageDelete }).then(al => al.entries.first()?.target), ); From 21445810856583b54740965dcf852e243081e344 Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Tue, 5 Nov 2024 16:43:01 -0600 Subject: [PATCH 05/11] Format --- packages/discord.js/src/structures/GuildAuditLogsEntry.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/discord.js/src/structures/GuildAuditLogsEntry.js b/packages/discord.js/src/structures/GuildAuditLogsEntry.js index 347bbab3c8f7..2c7f0f2925b3 100644 --- a/packages/discord.js/src/structures/GuildAuditLogsEntry.js +++ b/packages/discord.js/src/structures/GuildAuditLogsEntry.js @@ -369,9 +369,9 @@ class GuildAuditLogsEntry { this.target = guild.roles.cache.get(data.target_id) ?? { id: data.target_id }; } else if (targetType === Targets.Emoji) { this.target = guild.emojis.cache.get(data.target_id) ?? { id: data.target_id }; - // TODO: Uncomment after https://github.com/discordjs/discord.js/pull/10590 is merged - // } else if (targetType === Targets.SoundboardSound) { - // this.target = guild.soundboardSounds.cache.get(data.target_id) ?? { id: data.target_id }; + // TODO: Uncomment after https://github.com/discordjs/discord.js/pull/10590 is merged + // } else if (targetType === Targets.SoundboardSound) { + // this.target = guild.soundboardSounds.cache.get(data.target_id) ?? { id: data.target_id }; } else if (data.target_id) { this.target = { id: data.target_id }; } From 288c7e7ecbc8f211f729cbf64cfb27aa5f9ec6a4 Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Wed, 6 Nov 2024 06:59:32 -0600 Subject: [PATCH 06/11] Add runtime action type resolver for soundboard sounds --- packages/discord.js/src/structures/GuildAuditLogsEntry.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/discord.js/src/structures/GuildAuditLogsEntry.js b/packages/discord.js/src/structures/GuildAuditLogsEntry.js index 2c7f0f2925b3..129cf253c4fc 100644 --- a/packages/discord.js/src/structures/GuildAuditLogsEntry.js +++ b/packages/discord.js/src/structures/GuildAuditLogsEntry.js @@ -426,6 +426,7 @@ class GuildAuditLogsEntry { AuditLogEvent.StickerCreate, AuditLogEvent.GuildScheduledEventCreate, AuditLogEvent.ThreadCreate, + AuditLogEvent.SoundboardSoundCreate, AuditLogEvent.AutoModerationRuleCreate, AuditLogEvent.OnboardingPromptCreate, ].includes(action) @@ -453,6 +454,7 @@ class GuildAuditLogsEntry { AuditLogEvent.StickerDelete, AuditLogEvent.GuildScheduledEventDelete, AuditLogEvent.ThreadDelete, + AuditLogEvent.SoundboardSoundDelete, AuditLogEvent.AutoModerationRuleDelete, AuditLogEvent.OnboardingPromptDelete, ].includes(action) @@ -478,6 +480,7 @@ class GuildAuditLogsEntry { AuditLogEvent.GuildScheduledEventUpdate, AuditLogEvent.ThreadUpdate, AuditLogEvent.ApplicationCommandPermissionUpdate, + AuditLogEvent.SoundboardSoundUpdate, AuditLogEvent.AutoModerationRuleUpdate, AuditLogEvent.AutoModerationBlockMessage, AuditLogEvent.AutoModerationFlagToChannel, From 9d29a4e282f1fd63f5d7808deba3e0502c1abcfe Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Wed, 6 Nov 2024 07:06:39 -0600 Subject: [PATCH 07/11] Change test that shouldn't be passing and was never correct anyway --- packages/discord.js/typings/index.test-d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 42b7d0237e51..f88eaa7df7fc 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -2172,7 +2172,7 @@ expectType>( expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.StageInstanceCreate }).then(al => al.entries.first()?.target), ); -expectType>( +expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.MessageDelete }).then(al => al.entries.first()?.target), ); From 7c7e80728d6e7be8b54d152669cbde10835cef6f Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Wed, 6 Nov 2024 19:11:14 -0600 Subject: [PATCH 08/11] add MessageBulkDelete test cause I can't read --- packages/discord.js/typings/index.test-d.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index f88eaa7df7fc..e9ccc1517260 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -2172,9 +2172,12 @@ expectType>( expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.StageInstanceCreate }).then(al => al.entries.first()?.target), ); -expectType>( +expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.MessageDelete }).then(al => al.entries.first()?.target), ); +expectType>( + guild.fetchAuditLogs({ type: AuditLogEvent.MessageBulkDelete }).then(al => al.entries.first()?.target), +); declare const AuditLogChange: AuditLogChange; // @ts-expect-error From a35a0777946041de5be58ef4dcc0b3f7d8569f3a Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Wed, 6 Nov 2024 20:16:28 -0600 Subject: [PATCH 09/11] Update index.test-d.ts --- packages/discord.js/typings/index.test-d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index e9ccc1517260..e19171ca7e24 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -2175,7 +2175,7 @@ expectType>( expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.MessageDelete }).then(al => al.entries.first()?.target), ); -expectType>( +expectType>( guild.fetchAuditLogs({ type: AuditLogEvent.MessageBulkDelete }).then(al => al.entries.first()?.target), ); From 1217d9cdc08066137f53155e8e03cfa106e734ea Mon Sep 17 00:00:00 2001 From: cobalt <61329810+cobaltt7@users.noreply.github.com> Date: Sun, 17 Nov 2024 14:08:17 -0600 Subject: [PATCH 10/11] Remove duplicate types Signed-off-by: cobalt <61329810+cobaltt7@users.noreply.github.com> --- packages/discord.js/src/structures/GuildAuditLogsEntry.js | 1 + packages/discord.js/typings/index.d.ts | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/discord.js/src/structures/GuildAuditLogsEntry.js b/packages/discord.js/src/structures/GuildAuditLogsEntry.js index 129cf253c4fc..e0ef33bdafd9 100644 --- a/packages/discord.js/src/structures/GuildAuditLogsEntry.js +++ b/packages/discord.js/src/structures/GuildAuditLogsEntry.js @@ -14,6 +14,7 @@ const Partials = require('../util/Partials'); const { flatten } = require('../util/Util'); const Targets = { + All: 'All', Guild: 'Guild', GuildScheduledEvent: 'GuildScheduledEvent', Channel: 'Channel', diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 7a7b19427bab..e77b4b8cafa8 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -5711,11 +5711,13 @@ export interface GuildAuditLogsEntryExtraField { }; } -export interface GuildAuditLogsEntryTargetField { +export interface GuildAuditLogsEntryTargetField { User: User | PartialUser | null; Guild: Guild; Webhook: Webhook; Invite: Invite; + Emoji: GuildEmoji | { id: Snowflake }; + Role: Role | { id: Snowflake }; Message: TAction extends AuditLogEvent.MessageBulkDelete ? GuildTextBasedChannel | { id: Snowflake } : User | null; Integration: Integration; Channel: NonThreadGuildBasedChannel | { id: Snowflake; [x: string]: unknown }; @@ -5726,8 +5728,6 @@ export interface GuildAuditLogsEntryTargetField Date: Sat, 25 Jan 2025 20:28:10 -0600 Subject: [PATCH 11/11] Update packages/discord.js/src/structures/GuildAuditLogsEntry.js Co-authored-by: Almeida --- packages/discord.js/src/structures/GuildAuditLogsEntry.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/discord.js/src/structures/GuildAuditLogsEntry.js b/packages/discord.js/src/structures/GuildAuditLogsEntry.js index d3c2bf069434..51ff5c3ee150 100644 --- a/packages/discord.js/src/structures/GuildAuditLogsEntry.js +++ b/packages/discord.js/src/structures/GuildAuditLogsEntry.js @@ -398,8 +398,8 @@ class GuildAuditLogsEntry { if (target < 120) return Targets.Thread; if (target < 130) return Targets.ApplicationCommand; if (target < 140) return Targets.SoundboardSound; - if (target >= 140 && target <= 142) return Targets.AutoModeration; - if (target >= 143 && target <= 145) return Targets.User; + if (target < 143) return Targets.AutoModeration; + if (target < 146) return Targets.User; if (target >= 163 && target <= 165) return Targets.GuildOnboardingPrompt; return Targets.Unknown; }