Skip to content

Commit c45d912

Browse files
Qjuhalmeidx
andauthored
refactor(GuildAuditLogsEntry)!: add type guard for narrowing (#10521)
BREAKING CHANGE: removed `GuildAuditLogsEntry.Targets.All` which wasn’t used anywhere --------- Co-authored-by: Almeida <[email protected]>
1 parent 3669d5e commit c45d912

File tree

3 files changed

+34
-20
lines changed

3 files changed

+34
-20
lines changed

packages/discord.js/src/structures/GuildAuditLogsEntry.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ const Partials = require('../util/Partials');
1414
const { flatten } = require('../util/Util');
1515

1616
const Targets = {
17-
All: 'All',
1817
Guild: 'Guild',
1918
GuildScheduledEvent: 'GuildScheduledEvent',
2019
Channel: 'Channel',
@@ -503,6 +502,15 @@ class GuildAuditLogsEntry {
503502
return new Date(this.createdTimestamp);
504503
}
505504

505+
/**
506+
* Checks whether this GuildAuditLogsEntry is of the specified {@link AuditLogEvent} type.
507+
* @param {AuditLogEvent} action The type to check for
508+
* @returns {boolean}
509+
*/
510+
isAction(action) {
511+
return this.action === action;
512+
}
513+
506514
toJSON() {
507515
return flatten(this, { createdTimestamp: true });
508516
}

packages/discord.js/typings/index.d.ts

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,9 +1467,9 @@ export class Guild extends AnonymousGuild {
14671467
public editOnboarding(options: GuildOnboardingEditOptions): Promise<GuildOnboarding>;
14681468
public editWelcomeScreen(options: WelcomeScreenEditOptions): Promise<WelcomeScreen>;
14691469
public equals(guild: Guild): boolean;
1470-
public fetchAuditLogs<Event extends GuildAuditLogsResolvable = null>(
1470+
public fetchAuditLogs<Event extends GuildAuditLogsResolvable = AuditLogEvent>(
14711471
options?: GuildAuditLogsFetchOptions<Event>,
1472-
): Promise<GuildAuditLogs<Event>>;
1472+
): Promise<GuildAuditLogs<Event extends null ? AuditLogEvent : Event>>;
14731473
public fetchIntegrations(): Promise<Collection<Snowflake | string, Integration>>;
14741474
public fetchOnboarding(): Promise<GuildOnboarding>;
14751475
public fetchOwner(options?: BaseFetchOptions): Promise<GuildMember>;
@@ -1515,7 +1515,7 @@ export class Guild extends AnonymousGuild {
15151515
public toJSON(): unknown;
15161516
}
15171517

1518-
export class GuildAuditLogs<Event extends GuildAuditLogsResolvable = AuditLogEvent> {
1518+
export class GuildAuditLogs<Event extends AuditLogEvent = AuditLogEvent> {
15191519
private constructor(guild: Guild, data: RawGuildAuditLogData);
15201520
private applicationCommands: Collection<Snowflake, ApplicationCommand>;
15211521
private webhooks: Collection<Snowflake, Webhook<WebhookType.ChannelFollower | WebhookType.Incoming>>;
@@ -1527,36 +1527,40 @@ export class GuildAuditLogs<Event extends GuildAuditLogsResolvable = AuditLogEve
15271527
}
15281528

15291529
export class GuildAuditLogsEntry<
1530-
TAction extends GuildAuditLogsResolvable = AuditLogEvent,
1530+
TAction extends AuditLogEvent = AuditLogEvent,
15311531
TActionType extends GuildAuditLogsActionType = TAction extends keyof GuildAuditLogsTypes
15321532
? GuildAuditLogsTypes[TAction][1]
1533-
: GuildAuditLogsActionType,
1533+
: 'All',
15341534
TTargetType extends GuildAuditLogsTargetType = TAction extends keyof GuildAuditLogsTypes
15351535
? GuildAuditLogsTypes[TAction][0]
1536-
: GuildAuditLogsTargetType,
1537-
TResolvedType = TAction extends null ? AuditLogEvent : TAction,
1536+
: 'Unknown',
15381537
> {
15391538
private constructor(guild: Guild, data: RawGuildAuditLogEntryData, logs?: GuildAuditLogs);
15401539
public static Targets: GuildAuditLogsTargets;
1541-
public action: TResolvedType;
1540+
public action: TAction;
15421541
public actionType: TActionType;
15431542
public changes: AuditLogChange[];
15441543
public get createdAt(): Date;
15451544
public get createdTimestamp(): number;
15461545
public executorId: Snowflake | null;
15471546
public executor: User | null;
1548-
public extra: TResolvedType extends keyof GuildAuditLogsEntryExtraField
1549-
? GuildAuditLogsEntryExtraField[TResolvedType]
1550-
: null;
1547+
public extra: TAction extends keyof GuildAuditLogsEntryExtraField ? GuildAuditLogsEntryExtraField[TAction] : null;
15511548
public id: Snowflake;
15521549
public reason: string | null;
15531550
public targetId: Snowflake | null;
1554-
public target: TTargetType extends keyof GuildAuditLogsEntryTargetField<TActionType>
1555-
? GuildAuditLogsEntryTargetField<TActionType>[TTargetType]
1551+
public target: TTargetType extends keyof GuildAuditLogsEntryTargetField<TAction>
1552+
? GuildAuditLogsEntryTargetField<TAction>[TTargetType]
15561553
: Role | GuildEmoji | { id: Snowflake } | null;
15571554
public targetType: TTargetType;
15581555
public static actionType(action: AuditLogEvent): GuildAuditLogsActionType;
15591556
public static targetType(target: AuditLogEvent): GuildAuditLogsTargetType;
1557+
public isAction<TCheckAction extends TAction>(
1558+
action: TCheckAction,
1559+
): this is GuildAuditLogsEntry<
1560+
TCheckAction,
1561+
TCheckAction extends keyof GuildAuditLogsTypes ? GuildAuditLogsTypes[TCheckAction][1] : 'All',
1562+
TCheckAction extends keyof GuildAuditLogsTypes ? GuildAuditLogsTypes[TCheckAction][0] : 'Unknown'
1563+
>;
15601564
public toJSON(): unknown;
15611565
}
15621566

@@ -5726,12 +5730,14 @@ export interface GuildAuditLogsEntryExtraField {
57265730
};
57275731
}
57285732

5729-
export interface GuildAuditLogsEntryTargetField<TActionType extends GuildAuditLogsActionType> {
5733+
export interface GuildAuditLogsEntryTargetField<TAction extends AuditLogEvent> {
57305734
User: User | null;
57315735
Guild: Guild;
57325736
Webhook: Webhook<WebhookType.ChannelFollower | WebhookType.Incoming>;
57335737
Invite: Invite;
5734-
Message: TActionType extends AuditLogEvent.MessageBulkDelete ? Guild | { id: Snowflake } : User;
5738+
Emoji: GuildEmoji;
5739+
Role: Role;
5740+
Message: TAction extends AuditLogEvent.MessageBulkDelete ? Guild | { id: Snowflake } : User;
57355741
Integration: Integration;
57365742
Channel: NonThreadGuildBasedChannel | { id: Snowflake; [x: string]: unknown };
57375743
Thread: AnyThreadChannel | { id: Snowflake; [x: string]: unknown };
@@ -5753,7 +5759,7 @@ export interface GuildAuditLogsFetchOptions<Event extends GuildAuditLogsResolvab
57535759

57545760
export type GuildAuditLogsResolvable = AuditLogEvent | null;
57555761

5756-
export type GuildAuditLogsTargetType = GuildAuditLogsTypes[keyof GuildAuditLogsTypes][0] | 'All' | 'Unknown';
5762+
export type GuildAuditLogsTargetType = GuildAuditLogsTypes[keyof GuildAuditLogsTypes][0] | 'Unknown';
57575763

57585764
export type GuildAuditLogsTargets = {
57595765
[Key in GuildAuditLogsTargetType]: GuildAuditLogsTargetType;

packages/discord.js/typings/index.test-d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2134,7 +2134,7 @@ expectType<Promise<GuildAuditLogs<AuditLogEvent.IntegrationUpdate>>>(
21342134
guild.fetchAuditLogs({ type: AuditLogEvent.IntegrationUpdate }),
21352135
);
21362136

2137-
expectType<Promise<GuildAuditLogs<null>>>(guild.fetchAuditLogs({ type: null }));
2137+
expectType<Promise<GuildAuditLogs<AuditLogEvent>>>(guild.fetchAuditLogs({ type: null }));
21382138
expectType<Promise<GuildAuditLogs<AuditLogEvent>>>(guild.fetchAuditLogs());
21392139

21402140
expectType<Promise<GuildAuditLogsEntry<AuditLogEvent.MemberKick, 'Delete', 'User'> | undefined>>(
@@ -2144,10 +2144,10 @@ expectAssignable<Promise<GuildAuditLogsEntry<AuditLogEvent.MemberKick, 'Delete',
21442144
guild.fetchAuditLogs({ type: AuditLogEvent.MemberKick }).then(al => al.entries.first()),
21452145
);
21462146

2147-
expectType<Promise<GuildAuditLogsEntry<null, GuildAuditLogsActionType, GuildAuditLogsTargetType> | undefined>>(
2147+
expectType<Promise<GuildAuditLogsEntry<AuditLogEvent, GuildAuditLogsActionType, GuildAuditLogsTargetType> | undefined>>(
21482148
guild.fetchAuditLogs({ type: null }).then(al => al.entries.first()),
21492149
);
2150-
expectType<Promise<GuildAuditLogsEntry<null, GuildAuditLogsActionType, GuildAuditLogsTargetType> | undefined>>(
2150+
expectType<Promise<GuildAuditLogsEntry<AuditLogEvent, GuildAuditLogsActionType, GuildAuditLogsTargetType> | undefined>>(
21512151
guild.fetchAuditLogs().then(al => al.entries.first()),
21522152
);
21532153

0 commit comments

Comments
 (0)