More initialization order fixes (vol 2)

This commit is contained in:
Dragory 2021-05-23 17:13:11 +03:00
parent 22316eb714
commit 72637fe1b3
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
27 changed files with 97 additions and 44 deletions

View file

@ -58,13 +58,17 @@ export const CensorPlugin = zeppelinGuildPlugin<CensorPluginType>()({
configSchema: ConfigSchema, configSchema: ConfigSchema,
defaultOptions, defaultOptions,
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.serverLogs = new GuildLogs(guild.id); state.serverLogs = new GuildLogs(guild.id);
state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id);
state.regexRunner = getRegExpRunner(`guild-${pluginData.guild.id}`); state.regexRunner = getRegExpRunner(`guild-${pluginData.guild.id}`);
},
afterLoad(pluginData) {
const { state, guild } = pluginData;
state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg); state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg);
state.savedMessages.events.on("create", state.onMessageCreateFn); state.savedMessages.events.on("create", state.onMessageCreateFn);

View file

@ -14,9 +14,5 @@ export const ChannelArchiverPlugin = zeppelinGuildPlugin<ChannelArchiverPluginTy
// prettier-ignore // prettier-ignore
commands: [ commands: [
ArchiveChannelCmd, ArchiveChannelCmd,
], ]
afterLoad(pluginData) {
const { state, guild } = pluginData;
},
}); });

View file

@ -31,7 +31,7 @@ export const CompanionChannelsPlugin = zeppelinGuildPlugin<CompanionChannelsPlug
events: [VoiceChannelJoinEvt, VoiceChannelSwitchEvt, VoiceChannelLeaveEvt], events: [VoiceChannelJoinEvt, VoiceChannelSwitchEvt, VoiceChannelLeaveEvt],
afterLoad(pluginData) { beforeLoad(pluginData) {
pluginData.state.errorCooldownManager = new CooldownManager(); pluginData.state.errorCooldownManager = new CooldownManager();
}, },
}); });

View file

@ -146,7 +146,7 @@ export const CountersPlugin = zeppelinGuildPlugin<CountersPluginType>()({
ResetAllCounterValuesCmd, ResetAllCounterValuesCmd,
], ],
async afterLoad(pluginData) { async beforeLoad(pluginData) {
pluginData.state.counters = new GuildCounters(pluginData.guild.id); pluginData.state.counters = new GuildCounters(pluginData.guild.id);
pluginData.state.events = new EventEmitter(); pluginData.state.events = new EventEmitter();
pluginData.state.counterTriggersByCounterId = new Map(); pluginData.state.counterTriggersByCounterId = new Map();
@ -190,6 +190,10 @@ export const CountersPlugin = zeppelinGuildPlugin<CountersPluginType>()({
// Mark old/unused triggers to be deleted later // Mark old/unused triggers to be deleted later
await pluginData.state.counters.markUnusedTriggersToBeDeleted(activeTriggerIds); await pluginData.state.counters.markUnusedTriggersToBeDeleted(activeTriggerIds);
},
async afterLoad(pluginData) {
const config = pluginData.config.get();
// Start decay timers // Start decay timers
pluginData.state.decayTimers = []; pluginData.state.decayTimers = [];

View file

@ -35,9 +35,11 @@ export const GuildAccessMonitorPlugin = zeppelinGlobalPlugin<GuildAccessMonitorP
}), }),
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
pluginData.state.allowedGuilds = new AllowedGuilds(); pluginData.state.allowedGuilds = new AllowedGuilds();
},
afterLoad(pluginData) {
for (const guild of pluginData.client.guilds.values()) { for (const guild of pluginData.client.guilds.values()) {
checkGuild(pluginData, guild); checkGuild(pluginData, guild);
} }

View file

@ -10,10 +10,12 @@ export const GuildConfigReloaderPlugin = zeppelinGlobalPlugin<GuildConfigReloade
configSchema: t.type({}), configSchema: t.type({}),
async afterLoad(pluginData) { async beforeLoad(pluginData) {
pluginData.state.guildConfigs = new Configs(); pluginData.state.guildConfigs = new Configs();
pluginData.state.highestConfigId = await pluginData.state.guildConfigs.getHighestId(); pluginData.state.highestConfigId = await pluginData.state.guildConfigs.getHighestId();
},
afterLoad(pluginData) {
reloadChangedGuilds(pluginData); reloadChangedGuilds(pluginData);
}, },

View file

@ -11,13 +11,17 @@ export const GuildInfoSaverPlugin = zeppelinGuildPlugin<GuildInfoSaverPluginType
configSchema: t.type({}), configSchema: t.type({}),
beforeLoad(pluginData) {
pluginData.state.allowedGuilds = new AllowedGuilds();
},
afterLoad(pluginData) { afterLoad(pluginData) {
const { state, guild } = pluginData;
state.allowedGuilds = new AllowedGuilds();
updateGuildInfo(pluginData); updateGuildInfo(pluginData);
state.updateInterval = setInterval(() => updateGuildInfo(pluginData), 60 * MINUTES); pluginData.state.updateInterval = setInterval(() => updateGuildInfo(pluginData), 60 * MINUTES);
},
beforeUnload(pluginData) {
clearInterval(pluginData.state.updateInterval);
}, },
}); });

View file

@ -59,14 +59,16 @@ export const LocateUserPlugin = zeppelinGuildPlugin<LocateUserPluginType>()({
GuildBanRemoveAlertsEvt GuildBanRemoveAlertsEvt
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.alerts = GuildVCAlerts.getGuildInstance(guild.id); state.alerts = GuildVCAlerts.getGuildInstance(guild.id);
state.outdatedAlertsTimeout = null; state.outdatedAlertsTimeout = null;
state.usersWithAlerts = []; state.usersWithAlerts = [];
state.unloaded = false; state.unloaded = false;
},
afterLoad(pluginData) {
outdatedAlertsLoop(pluginData); outdatedAlertsLoop(pluginData);
fillActiveAlertsList(pluginData); fillActiveAlertsList(pluginData);
}, },

View file

@ -85,7 +85,7 @@ export const LogsPlugin = zeppelinGuildPlugin<LogsPluginType>()({
}, },
}, },
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.guildLogs = new GuildLogs(guild.id); state.guildLogs = new GuildLogs(guild.id);
@ -93,11 +93,17 @@ export const LogsPlugin = zeppelinGuildPlugin<LogsPluginType>()({
state.archives = GuildArchives.getGuildInstance(guild.id); state.archives = GuildArchives.getGuildInstance(guild.id);
state.cases = GuildCases.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.logListener = ({ type, data }) => log(pluginData, type, data);
state.guildLogs.on("log", state.logListener); state.guildLogs.on("log", state.logListener);
state.batches = new Map();
state.onMessageDeleteFn = msg => onMessageDelete(pluginData, msg); state.onMessageDeleteFn = msg => onMessageDelete(pluginData, msg);
state.savedMessages.events.on("delete", state.onMessageDeleteFn); state.savedMessages.events.on("delete", state.onMessageDeleteFn);
@ -107,7 +113,6 @@ export const LogsPlugin = zeppelinGuildPlugin<LogsPluginType>()({
state.onMessageUpdateFn = (newMsg, oldMsg) => onMessageUpdate(pluginData, newMsg, oldMsg); state.onMessageUpdateFn = (newMsg, oldMsg) => onMessageUpdate(pluginData, newMsg, oldMsg);
state.savedMessages.events.on("update", state.onMessageUpdateFn); state.savedMessages.events.on("update", state.onMessageUpdateFn);
state.regexRunner = getRegExpRunner(`guild-${pluginData.guild.id}`);
state.regexRunnerRepeatedTimeoutListener = (regexSource, timeoutMs, failedTimes) => { state.regexRunnerRepeatedTimeoutListener = (regexSource, timeoutMs, failedTimes) => {
logger.warn(`Disabled heavy regex temporarily: ${regexSource}`); logger.warn(`Disabled heavy regex temporarily: ${regexSource}`);
log(pluginData, LogType.BOT_ALERT, { log(pluginData, LogType.BOT_ALERT, {

View file

@ -41,7 +41,7 @@ export const MessageSaverPlugin = zeppelinGuildPlugin<MessageSaverPluginType>()(
MessageDeleteBulkEvt, MessageDeleteBulkEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id);
}, },

View file

@ -188,7 +188,7 @@ export const ModActionsPlugin = zeppelinGuildPlugin<ModActionsPluginType>()({
}, },
}, },
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.mutes = GuildMutes.getGuildInstance(guild.id); state.mutes = GuildMutes.getGuildInstance(guild.id);
@ -204,7 +204,9 @@ export const ModActionsPlugin = zeppelinGuildPlugin<ModActionsPluginType>()({
state.massbanQueue = new Queue(15 * MINUTES); state.massbanQueue = new Queue(15 * MINUTES);
state.events = new EventEmitter(); state.events = new EventEmitter();
},
afterLoad(pluginData) {
outdatedTempbansLoop(pluginData); outdatedTempbansLoop(pluginData);
}, },

View file

@ -39,7 +39,7 @@ export const NameHistoryPlugin = zeppelinGuildPlugin<NameHistoryPluginType>()({
MessageCreateEvt, MessageCreateEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.nicknameHistory = GuildNicknameHistory.getGuildInstance(guild.id); state.nicknameHistory = GuildNicknameHistory.getGuildInstance(guild.id);

View file

@ -37,7 +37,7 @@ export const PersistPlugin = zeppelinGuildPlugin<PersistPluginType>()({
LoadDataEvt, LoadDataEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.persistedData = GuildPersistedData.getGuildInstance(guild.id); state.persistedData = GuildPersistedData.getGuildInstance(guild.id);

View file

@ -42,7 +42,7 @@ export const PingableRolesPlugin = zeppelinGuildPlugin<PingableRolesPluginType>(
MessageCreateDisablePingableEvt, MessageCreateDisablePingableEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.pingableRoles = GuildPingableRoles.getGuildInstance(guild.id); state.pingableRoles = GuildPingableRoles.getGuildInstance(guild.id);

View file

@ -50,13 +50,15 @@ export const PostPlugin = zeppelinGuildPlugin<PostPluginType>()({
ScheduledPostsDeleteCmd, ScheduledPostsDeleteCmd,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id);
state.scheduledPosts = GuildScheduledPosts.getGuildInstance(guild.id); state.scheduledPosts = GuildScheduledPosts.getGuildInstance(guild.id);
state.logs = new GuildLogs(guild.id); state.logs = new GuildLogs(guild.id);
},
afterLoad(pluginData) {
scheduledPostLoop(pluginData); scheduledPostLoop(pluginData);
}, },

View file

@ -54,7 +54,7 @@ export const ReactionRolesPlugin = zeppelinGuildPlugin<ReactionRolesPluginType>(
AddReactionRoleEvt, AddReactionRoleEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.reactionRoles = GuildReactionRoles.getGuildInstance(guild.id); state.reactionRoles = GuildReactionRoles.getGuildInstance(guild.id);
@ -63,7 +63,9 @@ export const ReactionRolesPlugin = zeppelinGuildPlugin<ReactionRolesPluginType>(
state.roleChangeQueue = new Queue(); state.roleChangeQueue = new Queue();
state.pendingRoleChanges = new Map(); state.pendingRoleChanges = new Map();
state.pendingRefreshes = new Set(); state.pendingRefreshes = new Set();
},
afterLoad(pluginData) {
let autoRefreshInterval = pluginData.config.get().auto_refresh_interval; let autoRefreshInterval = pluginData.config.get().auto_refresh_interval;
if (autoRefreshInterval != null) { if (autoRefreshInterval != null) {
autoRefreshInterval = Math.max(MIN_AUTO_REFRESH, autoRefreshInterval); autoRefreshInterval = Math.max(MIN_AUTO_REFRESH, autoRefreshInterval);

View file

@ -40,7 +40,7 @@ export const RemindersPlugin = zeppelinGuildPlugin<RemindersPluginType>()({
RemindersDeleteCmd, RemindersDeleteCmd,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.reminders = GuildReminders.getGuildInstance(guild.id); state.reminders = GuildReminders.getGuildInstance(guild.id);
@ -48,6 +48,9 @@ export const RemindersPlugin = zeppelinGuildPlugin<RemindersPluginType>()({
state.unloaded = false; state.unloaded = false;
state.postRemindersTimeout = null; state.postRemindersTimeout = null;
},
afterLoad(pluginData) {
postDueRemindersLoop(pluginData); postDueRemindersLoop(pluginData);
}, },

View file

@ -51,7 +51,7 @@ export const RolesPlugin = zeppelinGuildPlugin<RolesPluginType>()({
MassRemoveRoleCmd, MassRemoveRoleCmd,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.logs = new GuildLogs(guild.id); state.logs = new GuildLogs(guild.id);

View file

@ -94,7 +94,7 @@ export const SelfGrantableRolesPlugin = zeppelinGuildPlugin<SelfGrantableRolesPl
RoleAddCmd, RoleAddCmd,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
pluginData.state.cooldowns = new CooldownManager(); pluginData.state.cooldowns = new CooldownManager();
}, },
}); });

View file

@ -55,12 +55,17 @@ export const SlowmodePlugin = zeppelinGuildPlugin<SlowmodePluginType>()({
SlowmodeSetCmd, SlowmodeSetCmd,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.slowmodes = GuildSlowmodes.getGuildInstance(guild.id); state.slowmodes = GuildSlowmodes.getGuildInstance(guild.id);
state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id);
state.logs = new GuildLogs(guild.id); state.logs = new GuildLogs(guild.id);
},
afterLoad(pluginData) {
const { state } = pluginData;
state.clearInterval = setInterval(() => clearExpiredSlowmodes(pluginData), BOT_SLOWMODE_CLEAR_INTERVAL); state.clearInterval = setInterval(() => clearExpiredSlowmodes(pluginData), BOT_SLOWMODE_CLEAR_INTERVAL);
state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg); state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg);
@ -69,5 +74,6 @@ export const SlowmodePlugin = zeppelinGuildPlugin<SlowmodePluginType>()({
beforeUnload(pluginData) { beforeUnload(pluginData) {
pluginData.state.savedMessages.events.off("create", pluginData.state.onMessageCreateFn); pluginData.state.savedMessages.events.off("create", pluginData.state.onMessageCreateFn);
clearInterval(pluginData.state.clearInterval);
}, },
}); });

View file

@ -64,7 +64,7 @@ export const SpamPlugin = zeppelinGuildPlugin<SpamPluginType>()({
SpamVoiceSwitchEvt, SpamVoiceSwitchEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.logs = new GuildLogs(guild.id); state.logs = new GuildLogs(guild.id);
@ -73,16 +73,21 @@ export const SpamPlugin = zeppelinGuildPlugin<SpamPluginType>()({
state.mutes = GuildMutes.getGuildInstance(guild.id); state.mutes = GuildMutes.getGuildInstance(guild.id);
state.recentActions = []; state.recentActions = [];
state.expiryInterval = setInterval(() => clearOldRecentActions(pluginData), 1000 * 60);
state.lastHandledMsgIds = new Map(); state.lastHandledMsgIds = new Map();
state.spamDetectionQueue = Promise.resolve(); state.spamDetectionQueue = Promise.resolve();
},
afterLoad(pluginData) {
const { state } = pluginData;
state.expiryInterval = setInterval(() => clearOldRecentActions(pluginData), 1000 * 60);
state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg); state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg);
state.savedMessages.events.on("create", state.onMessageCreateFn); state.savedMessages.events.on("create", state.onMessageCreateFn);
}, },
beforeUnload(pluginData) { beforeUnload(pluginData) {
pluginData.state.savedMessages.events.off("create", pluginData.state.onMessageCreateFn); pluginData.state.savedMessages.events.off("create", pluginData.state.onMessageCreateFn);
clearInterval(pluginData.state.expiryInterval);
}, },
}); });

View file

@ -146,12 +146,16 @@ export const StarboardPlugin = zeppelinGuildPlugin<StarboardPluginType>()({
StarboardReactionRemoveAllEvt, StarboardReactionRemoveAllEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id);
state.starboardMessages = GuildStarboardMessages.getGuildInstance(guild.id); state.starboardMessages = GuildStarboardMessages.getGuildInstance(guild.id);
state.starboardReactions = GuildStarboardReactions.getGuildInstance(guild.id); state.starboardReactions = GuildStarboardReactions.getGuildInstance(guild.id);
},
afterLoad(pluginData) {
const { state } = pluginData;
state.onMessageDeleteFn = msg => onMessageDelete(pluginData, msg); state.onMessageDeleteFn = msg => onMessageDelete(pluginData, msg);
state.savedMessages.events.on("delete", state.onMessageDeleteFn); state.savedMessages.events.on("delete", state.onMessageDeleteFn);

View file

@ -97,7 +97,7 @@ export const TagsPlugin = zeppelinGuildPlugin<TagsPluginType>()({
return options; return options;
}, },
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.archives = GuildArchives.getGuildInstance(guild.id); state.archives = GuildArchives.getGuildInstance(guild.id);
@ -105,6 +105,12 @@ export const TagsPlugin = zeppelinGuildPlugin<TagsPluginType>()({
state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id); state.savedMessages = GuildSavedMessages.getGuildInstance(guild.id);
state.logs = new GuildLogs(guild.id); state.logs = new GuildLogs(guild.id);
state.tagFunctions = {};
},
afterLoad(pluginData) {
const { state, guild } = pluginData;
state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg); state.onMessageCreateFn = msg => onMessageCreate(pluginData, msg);
state.savedMessages.events.on("create", state.onMessageCreateFn); state.savedMessages.events.on("create", state.onMessageCreateFn);

View file

@ -60,7 +60,7 @@ export const TimeAndDatePlugin = zeppelinGuildPlugin<TimeAndDatePluginType>()({
getDateFormat: mapToPublicFn(getDateFormat), getDateFormat: mapToPublicFn(getDateFormat),
}, },
afterLoad(pluginData) { beforeLoad(pluginData) {
pluginData.state.memberTimezones = GuildMemberTimezones.getGuildInstance(pluginData.guild.id); pluginData.state.memberTimezones = GuildMemberTimezones.getGuildInstance(pluginData.guild.id);
}, },
}); });

View file

@ -17,7 +17,7 @@ export const UsernameSaverPlugin = zeppelinGuildPlugin<UsernameSaverPluginType>(
VoiceChannelJoinUpdateUsernameEvt, VoiceChannelJoinUpdateUsernameEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.usernameHistory = new UsernameHistory(); state.usernameHistory = new UsernameHistory();

View file

@ -148,7 +148,7 @@ export const UtilityPlugin = zeppelinGuildPlugin<UtilityPluginType>()({
EmojiInfoCmd, EmojiInfoCmd,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.logs = new GuildLogs(guild.id); state.logs = new GuildLogs(guild.id);
@ -161,11 +161,6 @@ export const UtilityPlugin = zeppelinGuildPlugin<UtilityPluginType>()({
state.lastReload = Date.now(); 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 // FIXME: Temp fix for role change detection for specific servers, load all guild members in the background on bot start
const roleChangeDetectionFixServers = [ const roleChangeDetectionFixServers = [
"786212572285763605", "786212572285763605",
@ -182,6 +177,15 @@ export const UtilityPlugin = zeppelinGuildPlugin<UtilityPluginType>()({
} }
}, },
afterLoad(pluginData) {
const { guild } = pluginData;
if (activeReloads.has(guild.id)) {
sendSuccessMessage(pluginData, activeReloads.get(guild.id)!, "Reloaded!");
activeReloads.delete(guild.id);
}
},
beforeUnload(pluginData) { beforeUnload(pluginData) {
discardRegExpRunner(`guild-${pluginData.guild.id}`); discardRegExpRunner(`guild-${pluginData.guild.id}`);
}, },

View file

@ -27,7 +27,7 @@ export const WelcomeMessagePlugin = zeppelinGuildPlugin<WelcomeMessagePluginType
SendWelcomeMessageEvt, SendWelcomeMessageEvt,
], ],
afterLoad(pluginData) { beforeLoad(pluginData) {
const { state, guild } = pluginData; const { state, guild } = pluginData;
state.logs = new GuildLogs(guild.id); state.logs = new GuildLogs(guild.id);