diff --git a/backend/src/plugins/Censor/CensorPlugin.ts b/backend/src/plugins/Censor/CensorPlugin.ts index 51c4c8c4..4dc103ec 100644 --- a/backend/src/plugins/Censor/CensorPlugin.ts +++ b/backend/src/plugins/Censor/CensorPlugin.ts @@ -58,13 +58,17 @@ export const CensorPlugin = zeppelinGuildPlugin()({ configSchema: ConfigSchema, defaultOptions, - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.serverLogs = new GuildLogs(guild.id); state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.regexRunner = getRegExpRunner(`guild-${pluginData.guild.id}`); + }, + + afterLoad(pluginData) { + const { state, guild } = pluginData; state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg); state.savedMessages.events.on("create", state.onMessageCreateFn); diff --git a/backend/src/plugins/ChannelArchiver/ChannelArchiverPlugin.ts b/backend/src/plugins/ChannelArchiver/ChannelArchiverPlugin.ts index 1da4d7f8..249a5ef0 100644 --- a/backend/src/plugins/ChannelArchiver/ChannelArchiverPlugin.ts +++ b/backend/src/plugins/ChannelArchiver/ChannelArchiverPlugin.ts @@ -14,9 +14,5 @@ export const ChannelArchiverPlugin = zeppelinGuildPlugin()({ ResetAllCounterValuesCmd, ], - async afterLoad(pluginData) { + async beforeLoad(pluginData) { pluginData.state.counters = new GuildCounters(pluginData.guild.id); pluginData.state.events = new EventEmitter(); pluginData.state.counterTriggersByCounterId = new Map(); @@ -190,6 +190,10 @@ export const CountersPlugin = zeppelinGuildPlugin()({ // Mark old/unused triggers to be deleted later await pluginData.state.counters.markUnusedTriggersToBeDeleted(activeTriggerIds); + }, + + async afterLoad(pluginData) { + const config = pluginData.config.get(); // Start decay timers pluginData.state.decayTimers = []; diff --git a/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts b/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts index a37d0dab..62b77c29 100644 --- a/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts +++ b/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts @@ -35,9 +35,11 @@ export const GuildAccessMonitorPlugin = zeppelinGlobalPlugin updateGuildInfo(pluginData), 60 * MINUTES); + pluginData.state.updateInterval = setInterval(() => updateGuildInfo(pluginData), 60 * MINUTES); + }, + + beforeUnload(pluginData) { + clearInterval(pluginData.state.updateInterval); }, }); diff --git a/backend/src/plugins/LocateUser/LocateUserPlugin.ts b/backend/src/plugins/LocateUser/LocateUserPlugin.ts index 7758f4a5..ed5c6567 100644 --- a/backend/src/plugins/LocateUser/LocateUserPlugin.ts +++ b/backend/src/plugins/LocateUser/LocateUserPlugin.ts @@ -59,14 +59,16 @@ export const LocateUserPlugin = zeppelinGuildPlugin()({ GuildBanRemoveAlertsEvt ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.alerts = GuildVCAlerts.getGuildInstance(guild.id); state.outdatedAlertsTimeout = null; state.usersWithAlerts = []; state.unloaded = false; + }, + afterLoad(pluginData) { outdatedAlertsLoop(pluginData); fillActiveAlertsList(pluginData); }, diff --git a/backend/src/plugins/Logs/LogsPlugin.ts b/backend/src/plugins/Logs/LogsPlugin.ts index a04fbffa..216be6d6 100644 --- a/backend/src/plugins/Logs/LogsPlugin.ts +++ b/backend/src/plugins/Logs/LogsPlugin.ts @@ -85,7 +85,7 @@ export const LogsPlugin = zeppelinGuildPlugin()({ }, }, - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.guildLogs = new GuildLogs(guild.id); @@ -93,11 +93,17 @@ export const LogsPlugin = zeppelinGuildPlugin()({ state.archives = GuildArchives.getGuildInstance(guild.id); state.cases = GuildCases.getGuildInstance(guild.id); + state.batches = new Map(); + + state.regexRunner = getRegExpRunner(`guild-${pluginData.guild.id}`); + }, + + afterLoad(pluginData) { + const { state, guild } = pluginData; + state.logListener = ({ type, data }) => log(pluginData, type, data); state.guildLogs.on("log", state.logListener); - state.batches = new Map(); - state.onMessageDeleteFn = msg => onMessageDelete(pluginData, msg); state.savedMessages.events.on("delete", state.onMessageDeleteFn); @@ -107,7 +113,6 @@ export const LogsPlugin = zeppelinGuildPlugin()({ state.onMessageUpdateFn = (newMsg, oldMsg) => onMessageUpdate(pluginData, newMsg, oldMsg); state.savedMessages.events.on("update", state.onMessageUpdateFn); - state.regexRunner = getRegExpRunner(`guild-${pluginData.guild.id}`); state.regexRunnerRepeatedTimeoutListener = (regexSource, timeoutMs, failedTimes) => { logger.warn(`Disabled heavy regex temporarily: ${regexSource}`); log(pluginData, LogType.BOT_ALERT, { diff --git a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts index 848d8618..955663cb 100644 --- a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts +++ b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts @@ -41,7 +41,7 @@ export const MessageSaverPlugin = zeppelinGuildPlugin()( MessageDeleteBulkEvt, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); }, diff --git a/backend/src/plugins/ModActions/ModActionsPlugin.ts b/backend/src/plugins/ModActions/ModActionsPlugin.ts index e6f5138a..f78f7c37 100644 --- a/backend/src/plugins/ModActions/ModActionsPlugin.ts +++ b/backend/src/plugins/ModActions/ModActionsPlugin.ts @@ -188,7 +188,7 @@ export const ModActionsPlugin = zeppelinGuildPlugin()({ }, }, - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.mutes = GuildMutes.getGuildInstance(guild.id); @@ -204,7 +204,9 @@ export const ModActionsPlugin = zeppelinGuildPlugin()({ state.massbanQueue = new Queue(15 * MINUTES); state.events = new EventEmitter(); + }, + afterLoad(pluginData) { outdatedTempbansLoop(pluginData); }, diff --git a/backend/src/plugins/NameHistory/NameHistoryPlugin.ts b/backend/src/plugins/NameHistory/NameHistoryPlugin.ts index bfee0ac9..af95ea7a 100644 --- a/backend/src/plugins/NameHistory/NameHistoryPlugin.ts +++ b/backend/src/plugins/NameHistory/NameHistoryPlugin.ts @@ -39,7 +39,7 @@ export const NameHistoryPlugin = zeppelinGuildPlugin()({ MessageCreateEvt, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.nicknameHistory = GuildNicknameHistory.getGuildInstance(guild.id); diff --git a/backend/src/plugins/Persist/PersistPlugin.ts b/backend/src/plugins/Persist/PersistPlugin.ts index 6f7b7781..25b74d11 100644 --- a/backend/src/plugins/Persist/PersistPlugin.ts +++ b/backend/src/plugins/Persist/PersistPlugin.ts @@ -37,7 +37,7 @@ export const PersistPlugin = zeppelinGuildPlugin()({ LoadDataEvt, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.persistedData = GuildPersistedData.getGuildInstance(guild.id); diff --git a/backend/src/plugins/PingableRoles/PingableRolesPlugin.ts b/backend/src/plugins/PingableRoles/PingableRolesPlugin.ts index ad735408..de1fa15c 100644 --- a/backend/src/plugins/PingableRoles/PingableRolesPlugin.ts +++ b/backend/src/plugins/PingableRoles/PingableRolesPlugin.ts @@ -42,7 +42,7 @@ export const PingableRolesPlugin = zeppelinGuildPlugin( MessageCreateDisablePingableEvt, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.pingableRoles = GuildPingableRoles.getGuildInstance(guild.id); diff --git a/backend/src/plugins/Post/PostPlugin.ts b/backend/src/plugins/Post/PostPlugin.ts index 3cdfb7ca..85ec4e12 100644 --- a/backend/src/plugins/Post/PostPlugin.ts +++ b/backend/src/plugins/Post/PostPlugin.ts @@ -50,13 +50,15 @@ export const PostPlugin = zeppelinGuildPlugin()({ ScheduledPostsDeleteCmd, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.scheduledPosts = GuildScheduledPosts.getGuildInstance(guild.id); state.logs = new GuildLogs(guild.id); + }, + afterLoad(pluginData) { scheduledPostLoop(pluginData); }, diff --git a/backend/src/plugins/ReactionRoles/ReactionRolesPlugin.ts b/backend/src/plugins/ReactionRoles/ReactionRolesPlugin.ts index 1efcc47b..ff8d6330 100644 --- a/backend/src/plugins/ReactionRoles/ReactionRolesPlugin.ts +++ b/backend/src/plugins/ReactionRoles/ReactionRolesPlugin.ts @@ -54,7 +54,7 @@ export const ReactionRolesPlugin = zeppelinGuildPlugin( AddReactionRoleEvt, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.reactionRoles = GuildReactionRoles.getGuildInstance(guild.id); @@ -63,7 +63,9 @@ export const ReactionRolesPlugin = zeppelinGuildPlugin( state.roleChangeQueue = new Queue(); state.pendingRoleChanges = new Map(); state.pendingRefreshes = new Set(); + }, + afterLoad(pluginData) { let autoRefreshInterval = pluginData.config.get().auto_refresh_interval; if (autoRefreshInterval != null) { autoRefreshInterval = Math.max(MIN_AUTO_REFRESH, autoRefreshInterval); diff --git a/backend/src/plugins/Reminders/RemindersPlugin.ts b/backend/src/plugins/Reminders/RemindersPlugin.ts index b7e7cae8..928a013f 100644 --- a/backend/src/plugins/Reminders/RemindersPlugin.ts +++ b/backend/src/plugins/Reminders/RemindersPlugin.ts @@ -40,7 +40,7 @@ export const RemindersPlugin = zeppelinGuildPlugin()({ RemindersDeleteCmd, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.reminders = GuildReminders.getGuildInstance(guild.id); @@ -48,6 +48,9 @@ export const RemindersPlugin = zeppelinGuildPlugin()({ state.unloaded = false; state.postRemindersTimeout = null; + }, + + afterLoad(pluginData) { postDueRemindersLoop(pluginData); }, diff --git a/backend/src/plugins/Roles/RolesPlugin.ts b/backend/src/plugins/Roles/RolesPlugin.ts index 00c9f916..bcb8fb60 100644 --- a/backend/src/plugins/Roles/RolesPlugin.ts +++ b/backend/src/plugins/Roles/RolesPlugin.ts @@ -51,7 +51,7 @@ export const RolesPlugin = zeppelinGuildPlugin()({ MassRemoveRoleCmd, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.logs = new GuildLogs(guild.id); diff --git a/backend/src/plugins/SelfGrantableRoles/SelfGrantableRolesPlugin.ts b/backend/src/plugins/SelfGrantableRoles/SelfGrantableRolesPlugin.ts index 60085f86..b73488fd 100644 --- a/backend/src/plugins/SelfGrantableRoles/SelfGrantableRolesPlugin.ts +++ b/backend/src/plugins/SelfGrantableRoles/SelfGrantableRolesPlugin.ts @@ -94,7 +94,7 @@ export const SelfGrantableRolesPlugin = zeppelinGuildPlugin()({ SlowmodeSetCmd, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.slowmodes = GuildSlowmodes.getGuildInstance(guild.id); state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.logs = new GuildLogs(guild.id); + }, + + afterLoad(pluginData) { + const { state } = pluginData; + state.clearInterval = setInterval(() => clearExpiredSlowmodes(pluginData), BOT_SLOWMODE_CLEAR_INTERVAL); state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg); @@ -69,5 +74,6 @@ export const SlowmodePlugin = zeppelinGuildPlugin()({ beforeUnload(pluginData) { pluginData.state.savedMessages.events.off("create", pluginData.state.onMessageCreateFn); + clearInterval(pluginData.state.clearInterval); }, }); diff --git a/backend/src/plugins/Spam/SpamPlugin.ts b/backend/src/plugins/Spam/SpamPlugin.ts index 65447e64..0f426f76 100644 --- a/backend/src/plugins/Spam/SpamPlugin.ts +++ b/backend/src/plugins/Spam/SpamPlugin.ts @@ -64,7 +64,7 @@ export const SpamPlugin = zeppelinGuildPlugin()({ SpamVoiceSwitchEvt, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.logs = new GuildLogs(guild.id); @@ -73,16 +73,21 @@ export const SpamPlugin = zeppelinGuildPlugin()({ state.mutes = GuildMutes.getGuildInstance(guild.id); state.recentActions = []; - state.expiryInterval = setInterval(() => clearOldRecentActions(pluginData), 1000 * 60); state.lastHandledMsgIds = new Map(); state.spamDetectionQueue = Promise.resolve(); + }, + afterLoad(pluginData) { + const { state } = pluginData; + + state.expiryInterval = setInterval(() => clearOldRecentActions(pluginData), 1000 * 60); state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg); state.savedMessages.events.on("create", state.onMessageCreateFn); }, beforeUnload(pluginData) { pluginData.state.savedMessages.events.off("create", pluginData.state.onMessageCreateFn); + clearInterval(pluginData.state.expiryInterval); }, }); diff --git a/backend/src/plugins/Starboard/StarboardPlugin.ts b/backend/src/plugins/Starboard/StarboardPlugin.ts index 50dd0571..817828a1 100644 --- a/backend/src/plugins/Starboard/StarboardPlugin.ts +++ b/backend/src/plugins/Starboard/StarboardPlugin.ts @@ -146,12 +146,16 @@ export const StarboardPlugin = zeppelinGuildPlugin()({ StarboardReactionRemoveAllEvt, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.starboardMessages = GuildStarboardMessages.getGuildInstance(guild.id); state.starboardReactions = GuildStarboardReactions.getGuildInstance(guild.id); + }, + + afterLoad(pluginData) { + const { state } = pluginData; state.onMessageDeleteFn = msg => onMessageDelete(pluginData, msg); state.savedMessages.events.on("delete", state.onMessageDeleteFn); diff --git a/backend/src/plugins/Tags/TagsPlugin.ts b/backend/src/plugins/Tags/TagsPlugin.ts index 341836bc..5a26af84 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -97,7 +97,7 @@ export const TagsPlugin = zeppelinGuildPlugin()({ return options; }, - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.archives = GuildArchives.getGuildInstance(guild.id); @@ -105,6 +105,12 @@ export const TagsPlugin = zeppelinGuildPlugin()({ state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.logs = new GuildLogs(guild.id); + state.tagFunctions = {}; + }, + + afterLoad(pluginData) { + const { state, guild } = pluginData; + state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg); state.savedMessages.events.on("create", state.onMessageCreateFn); diff --git a/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts b/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts index 4baa54d4..7d079265 100644 --- a/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts +++ b/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts @@ -60,7 +60,7 @@ export const TimeAndDatePlugin = zeppelinGuildPlugin()({ getDateFormat: mapToPublicFn(getDateFormat), }, - afterLoad(pluginData) { + beforeLoad(pluginData) { pluginData.state.memberTimezones = GuildMemberTimezones.getGuildInstance(pluginData.guild.id); }, }); diff --git a/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts b/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts index 02473af9..fbbe1e81 100644 --- a/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts +++ b/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts @@ -17,7 +17,7 @@ export const UsernameSaverPlugin = zeppelinGuildPlugin( VoiceChannelJoinUpdateUsernameEvt, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.usernameHistory = new UsernameHistory(); diff --git a/backend/src/plugins/Utility/UtilityPlugin.ts b/backend/src/plugins/Utility/UtilityPlugin.ts index 303f5852..2a22bc38 100644 --- a/backend/src/plugins/Utility/UtilityPlugin.ts +++ b/backend/src/plugins/Utility/UtilityPlugin.ts @@ -148,7 +148,7 @@ export const UtilityPlugin = zeppelinGuildPlugin()({ EmojiInfoCmd, ], - afterLoad(pluginData) { + beforeLoad(pluginData) { const { state, guild } = pluginData; state.logs = new GuildLogs(guild.id); @@ -161,11 +161,6 @@ export const UtilityPlugin = zeppelinGuildPlugin()({ state.lastReload = Date.now(); - if (activeReloads.has(guild.id)) { - sendSuccessMessage(pluginData, activeReloads.get(guild.id)!, "Reloaded!"); - activeReloads.delete(guild.id); - } - // FIXME: Temp fix for role change detection for specific servers, load all guild members in the background on bot start const roleChangeDetectionFixServers = [ "786212572285763605", @@ -182,6 +177,15 @@ export const UtilityPlugin = zeppelinGuildPlugin()({ } }, + afterLoad(pluginData) { + const { guild } = pluginData; + + if (activeReloads.has(guild.id)) { + sendSuccessMessage(pluginData, activeReloads.get(guild.id)!, "Reloaded!"); + activeReloads.delete(guild.id); + } + }, + beforeUnload(pluginData) { discardRegExpRunner(`guild-${pluginData.guild.id}`); }, diff --git a/backend/src/plugins/WelcomeMessage/WelcomeMessagePlugin.ts b/backend/src/plugins/WelcomeMessage/WelcomeMessagePlugin.ts index 79b5b4a8..a5899a03 100644 --- a/backend/src/plugins/WelcomeMessage/WelcomeMessagePlugin.ts +++ b/backend/src/plugins/WelcomeMessage/WelcomeMessagePlugin.ts @@ -27,7 +27,7 @@ export const WelcomeMessagePlugin = zeppelinGuildPlugin