Skip to content

Commit

Permalink
types: improve audit logs' typings (#6647)
Browse files Browse the repository at this point in the history
Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com>
Co-authored-by: Noel <buechler.noel@outlook.com>
Co-authored-by: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com>
  • Loading branch information
4 people committed Dec 6, 2021
1 parent 8b200c0 commit b6b4570
Show file tree
Hide file tree
Showing 2 changed files with 261 additions and 94 deletions.
269 changes: 175 additions & 94 deletions typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -890,7 +890,9 @@ export class Guild extends AnonymousGuild {
public edit(data: GuildEditData, reason?: string): Promise<Guild>;
public editWelcomeScreen(data: WelcomeScreenEditData): Promise<WelcomeScreen>;
public equals(guild: Guild): boolean;
public fetchAuditLogs(options?: GuildAuditLogsFetchOptions): Promise<GuildAuditLogs>;
public fetchAuditLogs<T extends GuildAuditLogsResolvable = 'ALL'>(
options?: GuildAuditLogsFetchOptions<T>,
): Promise<GuildAuditLogs<T>>;
public fetchIntegrations(): Promise<Collection<Snowflake | string, Integration>>;
public fetchOwner(options?: BaseFetchOptions): Promise<GuildMember>;
public fetchPreview(): Promise<GuildPreview>;
Expand Down Expand Up @@ -935,12 +937,12 @@ export class Guild extends AnonymousGuild {
public toJSON(): unknown;
}

export class GuildAuditLogs {
export class GuildAuditLogs<T extends GuildAuditLogsResolvable = 'ALL'> {
private constructor(guild: Guild, data: RawGuildAuditLogData);
private webhooks: Collection<Snowflake, Webhook>;
private integrations: Collection<Snowflake | string, Integration>;

public entries: Collection<Snowflake, GuildAuditLogsEntry>;
public entries: Collection<Snowflake, GuildAuditLogsEntry<T>>;

public static Actions: GuildAuditLogsActions;
public static Targets: GuildAuditLogsTargets;
Expand All @@ -951,33 +953,34 @@ export class GuildAuditLogs {
public toJSON(): unknown;
}

export class GuildAuditLogsEntry {
export class GuildAuditLogsEntry<
TActionRaw extends GuildAuditLogsResolvable = 'ALL',
TAction = TActionRaw extends keyof GuildAuditLogsIds
? GuildAuditLogsIds[TActionRaw]
: TActionRaw extends null
? 'ALL'
: TActionRaw,
TActionType extends GuildAuditLogsActionType = TAction extends keyof GuildAuditLogsTypes
? GuildAuditLogsTypes[TAction][1]
: 'ALL',
TTargetType extends GuildAuditLogsTarget = TAction extends keyof GuildAuditLogsTypes
? GuildAuditLogsTypes[TAction][0]
: 'UNKNOWN',
> {
private constructor(logs: GuildAuditLogs, guild: Guild, data: RawGuildAuditLogEntryData);
public action: GuildAuditLogsAction;
public actionType: GuildAuditLogsActionType;
public action: TAction;
public actionType: TActionType;
public changes: AuditLogChange[] | null;
public readonly createdAt: Date;
public readonly createdTimestamp: number;
public executor: User | null;
public extra: unknown | Role | GuildMember | null;
public extra: TAction extends keyof GuildAuditLogsEntryExtraField ? GuildAuditLogsEntryExtraField[TAction] : null;
public id: Snowflake;
public reason: string | null;
public target:
| Guild
| GuildChannel
| User
| Role
| GuildEmoji
| Invite
| Webhook
| Message
| Integration
| StageInstance
| Sticker
| ThreadChannel
| { id: Snowflake }
| null;
public targetType: GuildAuditLogsTarget;
public target: TTargetType extends keyof GuildAuditLogsEntryTargetField<TActionType>
? GuildAuditLogsEntryTargetField<TActionType>[TTargetType]
: Role | GuildEmoji | { id: Snowflake } | null;
public targetType: TTargetType;
public toJSON(): unknown;
}

Expand Down Expand Up @@ -4178,84 +4181,162 @@ export interface GuildApplicationCommandPermissionData {
permissions: ApplicationCommandPermissionData[];
}

interface GuildAuditLogsTypes {
GUILD_UPDATE: ['GUILD', 'UPDATE'];
CHANNEL_CREATE: ['CHANNEL', 'CREATE'];
CHANNEL_UPDATE: ['CHANNEL', 'UPDATE'];
CHANNEL_DELETE: ['CHANNEL', 'DELETE'];
CHANNEL_OVERWRITE_CREATE: ['CHANNEL', 'CREATE'];
CHANNEL_OVERWRITE_UPDATE: ['CHANNEL', 'UPDATE'];
CHANNEL_OVERWRITE_DELETE: ['CHANNEL', 'DELETE'];
MEMBER_KICK: ['USER', 'DELETE'];
MEMBER_PRUNE: ['USER', 'DELETE'];
MEMBER_BAN_ADD: ['USER', 'DELETE'];
MEMBER_BAN_REMOVE: ['USER', 'CREATE'];
MEMBER_UPDATE: ['USER', 'UPDATE'];
MEMBER_ROLE_UPDATE: ['USER', 'UPDATE'];
MEMBER_MOVE: ['USER', 'UPDATE'];
MEMBER_DISCONNECT: ['USER', 'DELETE'];
BOT_ADD: ['USER', 'CREATE'];
ROLE_CREATE: ['ROLE', 'CREATE'];
ROLE_UPDATE: ['ROLE', 'UPDATE'];
ROLE_DELETE: ['ROLE', 'DELETE'];
INVITE_CREATE: ['INVITE', 'CREATE'];
INVITE_UPDATE: ['INVITE', 'UPDATE'];
INVITE_DELETE: ['INVITE', 'DELETE'];
WEBHOOK_CREATE: ['WEBHOOK', 'CREATE'];
WEBHOOK_UPDATE: ['WEBHOOK', 'UPDATE'];
WEBHOOK_DELETE: ['WEBHOOK', 'DELETE'];
EMOJI_CREATE: ['EMOJI', 'CREATE'];
EMOJI_UPDATE: ['EMOJI', 'UPDATE'];
EMOJI_DELETE: ['EMOJI', 'DELETE'];
MESSAGE_DELETE: ['MESSAGE', 'DELETE'];
MESSAGE_BULK_DELETE: ['MESSAGE', 'DELETE'];
MESSAGE_PIN: ['MESSAGE', 'CREATE'];
MESSAGE_UNPIN: ['MESSAGE', 'DELETE'];
INTEGRATION_CREATE: ['INTEGRATION', 'CREATE'];
INTEGRATION_UPDATE: ['INTEGRATION', 'UPDATE'];
INTEGRATION_DELETE: ['INTEGRATION', 'DELETE'];
STAGE_INSTANCE_CREATE: ['STAGE_INSTANCE', 'CREATE'];
STAGE_INSTANCE_UPDATE: ['STAGE_INSTANCE', 'UPDATE'];
STAGE_INSTANCE_DELETE: ['STAGE_INSTANCE', 'DELETE'];
STICKER_CREATE: ['STICKER', 'CREATE'];
STICKER_UPDATE: ['STICKER', 'UPDATE'];
STICKER_DELETE: ['STICKER', 'DELETE'];
THREAD_CREATE: ['THREAD', 'CREATE'];
THREAD_UPDATE: ['THREAD', 'UPDATE'];
THREAD_DELETE: ['THREAD', 'DELETE'];
}

export interface GuildAuditLogsIds {
1: 'GUILD_UPDATE';
10: 'CHANNEL_CREATE';
11: 'CHANNEL_UPDATE';
12: 'CHANNEL_DELETE';
13: 'CHANNEL_OVERWRITE_CREATE';
14: 'CHANNEL_OVERWRITE_UPDATE';
15: 'CHANNEL_OVERWRITE_DELETE';
20: 'MEMBER_KICK';
21: 'MEMBER_PRUNE';
22: 'MEMBER_BAN_ADD';
23: 'MEMBER_BAN_REMOVE';
24: 'MEMBER_UPDATE';
25: 'MEMBER_ROLE_UPDATE';
26: 'MEMBER_MOVE';
27: 'MEMBER_DISCONNECT';
28: 'BOT_ADD';
30: 'ROLE_CREATE';
31: 'ROLE_UPDATE';
32: 'ROLE_DELETE';
40: 'INVITE_CREATE';
41: 'INVITE_UPDATE';
42: 'INVITE_DELETE';
50: 'WEBHOOK_CREATE';
51: 'WEBHOOK_UPDATE';
52: 'WEBHOOK_DELETE';
60: 'EMOJI_CREATE';
61: 'EMOJI_UPDATE';
62: 'EMOJI_DELETE';
72: 'MESSAGE_DELETE';
73: 'MESSAGE_BULK_DELETE';
74: 'MESSAGE_PIN';
75: 'MESSAGE_UNPIN';
80: 'INTEGRATION_CREATE';
81: 'INTEGRATION_UPDATE';
82: 'INTEGRATION_DELETE';
83: 'STAGE_INSTANCE_CREATE';
84: 'STAGE_INSTANCE_UPDATE';
85: 'STAGE_INSTANCE_DELETE';
90: 'STICKER_CREATE';
91: 'STICKER_UPDATE';
92: 'STICKER_DELETE';
110: 'THREAD_CREATE';
111: 'THREAD_UPDATE';
112: 'THREAD_DELETE';
}

export type GuildAuditLogsActions = { [Key in keyof GuildAuditLogsIds as GuildAuditLogsIds[Key]]: Key } & { ALL: null };

export type GuildAuditLogsAction = keyof GuildAuditLogsActions;

export interface GuildAuditLogsActions {
ALL?: null;
GUILD_UPDATE?: number;
CHANNEL_CREATE?: number;
CHANNEL_UPDATE?: number;
CHANNEL_DELETE?: number;
CHANNEL_OVERWRITE_CREATE?: number;
CHANNEL_OVERWRITE_UPDATE?: number;
CHANNEL_OVERWRITE_DELETE?: number;
MEMBER_KICK?: number;
MEMBER_PRUNE?: number;
MEMBER_BAN_ADD?: number;
MEMBER_BAN_REMOVE?: number;
MEMBER_UPDATE?: number;
MEMBER_ROLE_UPDATE?: number;
MEMBER_MOVE?: number;
MEMBER_DISCONNECT?: number;
BOT_ADD?: number;
ROLE_CREATE?: number;
ROLE_UPDATE?: number;
ROLE_DELETE?: number;
INVITE_CREATE?: number;
INVITE_UPDATE?: number;
INVITE_DELETE?: number;
WEBHOOK_CREATE?: number;
WEBHOOK_UPDATE?: number;
WEBHOOK_DELETE?: number;
EMOJI_CREATE?: number;
EMOJI_UPDATE?: number;
EMOJI_DELETE?: number;
MESSAGE_DELETE?: number;
MESSAGE_BULK_DELETE?: number;
MESSAGE_PIN?: number;
MESSAGE_UNPIN?: number;
INTEGRATION_CREATE?: number;
INTEGRATION_UPDATE?: number;
INTEGRATION_DELETE?: number;
STAGE_INSTANCE_CREATE?: number;
STAGE_INSTANCE_UPDATE?: number;
STAGE_INSTANCE_DELETE?: number;
STICKER_CREATE?: number;
STICKER_UPDATE?: number;
STICKER_DELETE?: number;
THREAD_CREATE?: number;
THREAD_UPDATE?: number;
THREAD_DELETE?: number;
}

export type GuildAuditLogsActionType = 'CREATE' | 'DELETE' | 'UPDATE' | 'ALL';

export interface GuildAuditLogsFetchOptions {
export type GuildAuditLogsActionType = GuildAuditLogsTypes[keyof GuildAuditLogsTypes][1] | 'ALL';

export interface GuildAuditLogsEntryExtraField {
MEMBER_PRUNE: { removed: number; days: number };
MEMBER_MOVE: { channel: GuildChannel | { id: Snowflake }; count: number };
MESSAGE_DELETE: { channel: GuildChannel | { id: Snowflake }; count: number };
MESSAGE_BULK_DELETE: { channel: GuildChannel | { id: Snowflake }; count: number };
MESSAGE_PIN: { channel: GuildChannel | { id: Snowflake }; messageId: Snowflake };
MESSAGE_UNPIN: { channel: GuildChannel | { id: Snowflake }; messageId: Snowflake };
MEMBER_DISCONNECT: { count: number };
CHANNEL_OVERWRITE_CREATE:
| Role
| GuildMember
| { id: Snowflake; name: string; type: OverwriteTypes.role }
| { id: Snowflake; type: OverwriteTypes.member };
CHANNEL_OVERWRITE_UPDATE:
| Role
| GuildMember
| { id: Snowflake; name: string; type: OverwriteTypes.role }
| { id: Snowflake; type: OverwriteTypes.member };
CHANNEL_OVERWRITE_DELETE:
| Role
| GuildMember
| { id: Snowflake; name: string; type: OverwriteTypes.role }
| { id: Snowflake; type: OverwriteTypes.member };
STAGE_INSTANCE_CREATE: GuildChannel | { id: Snowflake };
STAGE_INSTANCE_DELETE: GuildChannel | { id: Snowflake };
STAGE_INSTANCE_UPDATE: GuildChannel | { id: Snowflake };
}

export interface GuildAuditLogsEntryTargetField<TActionType extends GuildAuditLogsActionType> {
USER: User | null;
GUILD: Guild;
WEBHOOK: Webhook;
INVITE: Invite | { [x: string]: unknown };
MESSAGE: TActionType extends 'MESSAGE_BULK_DELETE' ? Guild | { id: Snowflake } : User;
INTEGRATION: Integration;
CHANNEL: GuildChannel | ThreadChannel | { id: Snowflake; [x: string]: unknown };
THREAD: GuildChannel | ThreadChannel | { id: Snowflake; [x: string]: unknown };
STAGE_INSTANCE: StageInstance;
STICKER: Sticker;
}

export interface GuildAuditLogsFetchOptions<T extends GuildAuditLogsResolvable> {
before?: Snowflake | GuildAuditLogsEntry;
limit?: number;
user?: UserResolvable;
type?: GuildAuditLogsAction | number;
}

export type GuildAuditLogsTarget = keyof GuildAuditLogsTargets;

export interface GuildAuditLogsTargets {
ALL?: string;
GUILD?: string;
CHANNEL?: string;
USER?: string;
ROLE?: string;
INVITE?: string;
WEBHOOK?: string;
EMOJI?: string;
MESSAGE?: string;
INTEGRATION?: string;
STAGE_INSTANCE?: string;
STICKER?: string;
THREAD?: string;
UNKNOWN?: string;
type?: T;
}

export type GuildAuditLogsResolvable = keyof GuildAuditLogsIds | GuildAuditLogsAction | null;

export type GuildAuditLogsTarget = GuildAuditLogsTypes[keyof GuildAuditLogsTypes][0] | 'ALL' | 'UNKNOWN';

export type GuildAuditLogsTargets = {
[key in GuildAuditLogsTarget]?: string;
};

export type GuildBanResolvable = GuildBan | UserResolvable;

export interface GuildChannelOverwriteOptions {
Expand Down

0 comments on commit b6b4570

Please sign in to comment.