From 287aafaca24ca6b797461d38793ab9e195784fa2 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Mon, 3 Oct 2022 18:02:40 +0100 Subject: [PATCH] Improve event handler to only run events that have been registered --- src/client/client.ts | 6 +++-- src/client/util.ts | 54 ++++++++++++++++++++++++++++--------- src/constants/EventType.ts | 15 +++++++++++ src/contracts/IEventItem.ts | 5 ++-- src/events/MessageEvents.ts | 2 +- src/registry.ts | 13 +++++++-- 6 files changed, 75 insertions(+), 20 deletions(-) create mode 100644 src/constants/EventType.ts diff --git a/src/client/client.ts b/src/client/client.ts index 4b933f3..b99c3a5 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -1,6 +1,7 @@ import { Client } from "discord.js"; import * as dotenv from "dotenv"; import { createConnection } from "typeorm"; +import { EventType } from "../constants/EventType"; import ICommandItem from "../contracts/ICommandItem"; import IEventItem from "../contracts/IEventItem"; import { Command } from "../type/command"; @@ -65,9 +66,10 @@ export class CoreClient extends Client { CoreClient._commandItems.push(item); } - public static RegisterEvent(event: Event) { + public static RegisterEvent(eventType: EventType, func: Function) { const item: IEventItem = { - Event: event, + EventType: eventType, + ExecutionFunction: func, }; CoreClient._eventItems.push(item); diff --git a/src/client/util.ts b/src/client/util.ts index 7a23542..a9c2bad 100644 --- a/src/client/util.ts +++ b/src/client/util.ts @@ -1,4 +1,5 @@ import { Client, REST, Routes, SlashCommandBuilder } from "discord.js"; +import { EventType } from "../constants/EventType"; import IEventItem from "../contracts/IEventItem"; import { CoreClient } from "./client"; @@ -49,19 +50,46 @@ export class Util { // Load the events loadEvents(client: Client, events: IEventItem[]) { events.forEach((e) => { - client.on('channelCreate', e.Event.channelCreate); - client.on('channelDelete', e.Event.channelDelete); - client.on('channelUpdate', e.Event.channelUpdate); - client.on('guildBanAdd', e.Event.guildBanAdd); - client.on('guildBanRemove', e.Event.guildBanRemove); - client.on('guildCreate', e.Event.guildCreate); - client.on('guildMemberAdd', e.Event.guildMemberAdd); - client.on('guildMemberRemove', e.Event.guildMemberRemove); - client.on('guildMemberUpdate', e.Event.guildMemberUpdate); - client.on('messageCreate', e.Event.messageCreate); - client.on('messageDelete', e.Event.messageDelete); - client.on('messageUpdate', e.Event.messageUpdate); - client.on('ready', e.Event.ready); + switch(e.EventType) { + case EventType.ChannelCreate: + client.on('channelCreate', (channel) => e.ExecutionFunction(channel)); + break; + case EventType.ChannelDelete: + client.on('channelDelete', (channel) => e.ExecutionFunction(channel)); + break; + case EventType.ChannelUpdate: + client.on('channelUpdate', (channel) => e.ExecutionFunction(channel)); + break; + case EventType.GuildBanAdd: + client.on('guildBanAdd', (ban) => e.ExecutionFunction(ban)); + break; + case EventType.GuildBanRemove: + client.on('guildBanRemove', (ban) => e.ExecutionFunction(ban)); + break; + case EventType.GuildCreate: + client.on('guildCreate', (guild) => e.ExecutionFunction(guild)); + break; + case EventType.GuildMemberAdd: + client.on('guildMemberAdd', (member) => e.ExecutionFunction(member)); + break; + case EventType.GuildMemberRemove: + client.on('guildMemberRemove', (member) => e.ExecutionFunction(member)); + break; + case EventType.GuildMemberUpdate: + client.on('guildMemberUpdate', (oldMember, newMember) => e.ExecutionFunction(oldMember, newMember)); + break; + case EventType.MessageCreate: + client.on('messageCreate', (message) => e.ExecutionFunction(message)); + break; + case EventType.MessageDelete: + client.on('messageDelete', (message) => e.ExecutionFunction(message)); + break; + case EventType.MessageUpdate: + client.on('messageUpdate', (oldMessage, newMessage) => e.ExecutionFunction(oldMessage, newMessage)); + break; + default: + console.error('Event not implemented.'); + } }); } } diff --git a/src/constants/EventType.ts b/src/constants/EventType.ts new file mode 100644 index 0000000..c27c6ed --- /dev/null +++ b/src/constants/EventType.ts @@ -0,0 +1,15 @@ +export enum EventType { + ChannelCreate, + ChannelDelete, + ChannelUpdate, + GuildBanAdd, + GuildBanRemove, + GuildCreate, + GuildMemberAdd, + GuildMemberRemove, + GuildMemberUpdate, + MessageCreate, + MessageDelete, + MessageUpdate, + Ready, +} \ No newline at end of file diff --git a/src/contracts/IEventItem.ts b/src/contracts/IEventItem.ts index 51bb881..ea32a3e 100644 --- a/src/contracts/IEventItem.ts +++ b/src/contracts/IEventItem.ts @@ -1,6 +1,7 @@ -import { Event } from "../type/event"; +import { EventType } from "../constants/EventType"; export default interface IEventItem { - Event: Event, + EventType: EventType, + ExecutionFunction: Function, } \ No newline at end of file diff --git a/src/events/MessageEvents.ts b/src/events/MessageEvents.ts index 714f203..b23be55 100644 --- a/src/events/MessageEvents.ts +++ b/src/events/MessageEvents.ts @@ -71,7 +71,7 @@ export default class MessageEvents extends Event { const embed = new EmbedBuilder() .setColor(EmbedColours.Ok) - .setTitle("Message Deleted") + .setTitle("Message Edited") .setDescription(`${newMessage.author} \`${newMessage.author.tag}\``) .addFields([ { diff --git a/src/registry.ts b/src/registry.ts index a83e7fa..55fa90f 100644 --- a/src/registry.ts +++ b/src/registry.ts @@ -28,6 +28,7 @@ import RemoveLobby from "./commands/501231711271780357/Lobby/remove"; import MemberEvents from "./events/MemberEvents"; import MessageEvents from "./events/MessageEvents"; import Bunny from "./commands/bunny"; +import { EventType } from "./constants/EventType"; export default class Registry { public static RegisterCommands() { @@ -64,7 +65,15 @@ export default class Registry { } public static RegisterEvents() { - CoreClient.RegisterEvent(new MemberEvents()); - CoreClient.RegisterEvent(new MessageEvents()); + const memberEvents = new MemberEvents(); + const messageEvents = new MessageEvents(); + + CoreClient.RegisterEvent(EventType.GuildMemberAdd, memberEvents.guildMemberAdd); + CoreClient.RegisterEvent(EventType.GuildMemberRemove, memberEvents.guildMemberRemove); + CoreClient.RegisterEvent(EventType.GuildMemberUpdate, memberEvents.guildMemberUpdate); + + CoreClient.RegisterEvent(EventType.MessageDelete, messageEvents.messageDelete); + CoreClient.RegisterEvent(EventType.MessageUpdate, messageEvents.messageUpdate); + CoreClient.RegisterEvent(EventType.MessageCreate, messageEvents.messageCreate); } } \ No newline at end of file