From 69c3896c5756cd28c86e73ae397231befdab4227 Mon Sep 17 00:00:00 2001 From: Dark <7890309+DarkView@users.noreply.github.com> Date: Thu, 16 Jul 2020 21:41:50 +0200 Subject: [PATCH] Migrate UsernameSaver to new Plugin structure --- .../UsernameSaver/UsernameSaverPlugin.ts | 21 +++++++++++++++++++ .../UsernameSaver/events/MessageCreateEvt.ts | 11 ++++++++++ .../events/VoiceChannelJoinEvt.ts | 11 ++++++++++ backend/src/plugins/UsernameSaver/types.ts | 12 +++++++++++ .../plugins/UsernameSaver/updateUsername.ts | 12 +++++++++++ backend/src/plugins/availablePlugins.ts | 2 ++ 6 files changed, 69 insertions(+) create mode 100644 backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts create mode 100644 backend/src/plugins/UsernameSaver/events/MessageCreateEvt.ts create mode 100644 backend/src/plugins/UsernameSaver/events/VoiceChannelJoinEvt.ts create mode 100644 backend/src/plugins/UsernameSaver/types.ts create mode 100644 backend/src/plugins/UsernameSaver/updateUsername.ts diff --git a/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts b/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts new file mode 100644 index 00000000..592258ea --- /dev/null +++ b/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts @@ -0,0 +1,21 @@ +import { zeppelinPlugin } from "../ZeppelinPluginBlueprint"; +import { UsernameHistory } from "src/data/UsernameHistory"; +import { Queue } from "src/Queue"; +import { UsernameSaverPluginType } from "./types"; +import { MessageCreateEvt } from "./events/MessageCreateEvt"; +import { VoiceChannelJoinEvt } from "./events/VoiceChannelJoinEvt"; + +export const UsernameSaverPlugin = zeppelinPlugin()("username_saver", { + // prettier-ignore + events: [ + MessageCreateEvt, + VoiceChannelJoinEvt, + ], + + onLoad(pluginData) { + const { state, guild } = pluginData; + + state.usernameHistory = new UsernameHistory(); + state.updateQueue = new Queue(); + }, +}); diff --git a/backend/src/plugins/UsernameSaver/events/MessageCreateEvt.ts b/backend/src/plugins/UsernameSaver/events/MessageCreateEvt.ts new file mode 100644 index 00000000..14c6aded --- /dev/null +++ b/backend/src/plugins/UsernameSaver/events/MessageCreateEvt.ts @@ -0,0 +1,11 @@ +import { usernameEvent } from "../types"; +import { updateUsername } from "../updateUsername"; + +export const MessageCreateEvt = usernameEvent({ + event: "messageCreate", + + async listener(meta) { + if (meta.args.message.author.bot) return; + meta.pluginData.state.updateQueue.add(() => updateUsername(meta.pluginData, meta.args.message.author)); + }, +}); diff --git a/backend/src/plugins/UsernameSaver/events/VoiceChannelJoinEvt.ts b/backend/src/plugins/UsernameSaver/events/VoiceChannelJoinEvt.ts new file mode 100644 index 00000000..e26ea435 --- /dev/null +++ b/backend/src/plugins/UsernameSaver/events/VoiceChannelJoinEvt.ts @@ -0,0 +1,11 @@ +import { usernameEvent } from "../types"; +import { updateUsername } from "../updateUsername"; + +export const VoiceChannelJoinEvt = usernameEvent({ + event: "voiceChannelJoin", + + async listener(meta) { + if (meta.args.member.bot) return; + meta.pluginData.state.updateQueue.add(() => updateUsername(meta.pluginData, meta.args.member.user)); + }, +}); diff --git a/backend/src/plugins/UsernameSaver/types.ts b/backend/src/plugins/UsernameSaver/types.ts new file mode 100644 index 00000000..eeb078e7 --- /dev/null +++ b/backend/src/plugins/UsernameSaver/types.ts @@ -0,0 +1,12 @@ +import { BasePluginType, eventListener } from "knub"; +import { UsernameHistory } from "src/data/UsernameHistory"; +import { Queue } from "src/Queue"; + +export interface UsernameSaverPluginType extends BasePluginType { + state: { + usernameHistory: UsernameHistory; + updateQueue: Queue; + }; +} + +export const usernameEvent = eventListener(); diff --git a/backend/src/plugins/UsernameSaver/updateUsername.ts b/backend/src/plugins/UsernameSaver/updateUsername.ts new file mode 100644 index 00000000..6b5129a9 --- /dev/null +++ b/backend/src/plugins/UsernameSaver/updateUsername.ts @@ -0,0 +1,12 @@ +import { User } from "eris"; +import { PluginData } from "knub"; +import { UsernameSaverPluginType } from "./types"; + +export async function updateUsername(pluginData: PluginData, user: User) { + if (!user) return; + const newUsername = `${user.username}#${user.discriminator}`; + const latestEntry = await pluginData.state.usernameHistory.getLastEntry(user.id); + if (!latestEntry || newUsername !== latestEntry.username) { + await pluginData.state.usernameHistory.addEntry(user.id, newUsername); + } +} diff --git a/backend/src/plugins/availablePlugins.ts b/backend/src/plugins/availablePlugins.ts index 0dce5a2c..3e33f936 100644 --- a/backend/src/plugins/availablePlugins.ts +++ b/backend/src/plugins/availablePlugins.ts @@ -1,10 +1,12 @@ import { UtilityPlugin } from "./Utility/UtilityPlugin"; import { LocateUserPlugin } from "./LocateUser/LocateUserPlugin"; import { ZeppelinPluginBlueprint } from "./ZeppelinPluginBlueprint"; +import { UsernameSaverPlugin } from "./UsernameSaver/UsernameSaverPlugin"; // prettier-ignore export const guildPlugins: Array> = [ LocateUserPlugin, + UsernameSaverPlugin, UtilityPlugin, ];