import { Sticker, ThreadChannel, Message, User, Invite, GuildMember, GuildScheduledEvent, GuildEmoji, Channel } from 'discord.js'; export enum EventType { ChannelCreate, ChannelRename, ChannelDelete, EmojiCreate, EmojiRename, EmojiDelete, EventCreate, EventEdit, EventDelete, InviteCreate, InviteUpdate, InviteDelete, MemberBan, MemberUnban, MemberKick, MemberDisconnect, MemberNickname, MemberChangeRoles, MessageDelete, MessageEdit, StickerCreate, StickerRename, StickerDelete, ThreadCreate, ThreadEdit, ThreadDelete, } export type Event = { type: EventType.ChannelCreate, causer: User, channel: Channel, } | { type: EventType.ChannelRename, causer: User, channel: Channel, oldName: string, newName: string, } | { type: EventType.ChannelDelete, causer: User, channel: Channel, } | { type: EventType.EmojiCreate, causer: User, emoji: GuildEmoji, } | { type: EventType.EmojiRename, causer: User, emoji: GuildEmoji, oldName: string, newName: string, } | { type: EventType.EmojiDelete, causer: User, emoji: GuildEmoji, } | { type: EventType.EventCreate, causer: User, event: GuildScheduledEvent, } | { type: EventType.EventEdit, causer: User, oldEvent: GuildScheduledEvent, event: GuildScheduledEvent, } | { type: EventType.EventDelete, causer: User, event: GuildScheduledEvent, } | { type: EventType.InviteCreate, causer: User, invite: Invite, } | { type: EventType.InviteUpdate, causer: User, oldInvite: Invite, invite: Invite, } | { type: EventType.InviteDelete, causer: User, invite: Invite, } | { type: EventType.MemberBan, causer: User, member: GuildMember, reason: string, } | { type: EventType.MemberUnban, causer: User, member: GuildMember, reason: string, } | { type: EventType.MemberKick, causer: User, member: GuildMember, reason: string, } | { type: EventType.MemberDisconnect, causer: User, member: GuildMember, } | { type: EventType.MemberNickname, causer: User, member: GuildMember, oldNickname: string, newNickname: string, } | { type: EventType.MemberChangeRoles, causer: User, member: GuildMember, // TODO: huh } | { type: EventType.MessageDelete, causer: User, message: Message, } | { type: EventType.MessageEdit, causer: User, oldMessage: Message, message: Message, } | { type: EventType.StickerCreate, causer: User, sticker: Sticker, } | { type: EventType.StickerRename, causer: User, oldName: string, newName: string, } | { type: EventType.StickerDelete, causer: User, sticker: Sticker, } | { type: EventType.ThreadCreate, causer: User, thread: ThreadChannel, } | { type: EventType.ThreadEdit, causer: User, oldThread: ThreadChannel, thread: ThreadChannel, } | { type: EventType.ThreadDelete, causer: User, thread: ThreadChannel, }; export async function triggerEvent(event: Event) { }