diff --git a/backend/src/QueuedEventEmitter.ts b/backend/src/QueuedEventEmitter.ts index 3da957d3..9d80e8f8 100644 --- a/backend/src/QueuedEventEmitter.ts +++ b/backend/src/QueuedEventEmitter.ts @@ -42,9 +42,9 @@ export class QueuedEventEmitter { const listeners = [...(this.listeners.get(eventName) || []), ...(this.listeners.get("*") || [])]; let promise: Promise = Promise.resolve(); - listeners.forEach(listener => { - promise = this.queue.add(listener.bind(null, ...args)); - }); + for (let i = 0; i < listeners.length; ++i) { + promise = this.queue.add(listeners[i].bind(null, ...args)); + } return promise; } diff --git a/backend/src/plugins/Cases/functions/getCaseTypeAmountForUserId.ts b/backend/src/plugins/Cases/functions/getCaseTypeAmountForUserId.ts index 60752242..b02a8ca2 100644 --- a/backend/src/plugins/Cases/functions/getCaseTypeAmountForUserId.ts +++ b/backend/src/plugins/Cases/functions/getCaseTypeAmountForUserId.ts @@ -11,11 +11,11 @@ export async function getCaseTypeAmountForUserId( let typeAmount = 0; if (cases.length > 0) { - cases.forEach(singleCase => { - if (singleCase.type === type.valueOf()) { + for (let i = 0; i < cases.length; ++i) { + if (cases[i].type === type.valueOf()) { typeAmount++; } - }); + } } return typeAmount; diff --git a/backend/src/plugins/LocateUser/events/BanRemoveAlertsEvt.ts b/backend/src/plugins/LocateUser/events/BanRemoveAlertsEvt.ts index cc6c155f..ff2ff578 100644 --- a/backend/src/plugins/LocateUser/events/BanRemoveAlertsEvt.ts +++ b/backend/src/plugins/LocateUser/events/BanRemoveAlertsEvt.ts @@ -5,8 +5,8 @@ export const GuildBanRemoveAlertsEvt = locateUserEvt({ async listener(meta) { const alerts = await meta.pluginData.state.alerts.getAlertsByUserId(meta.args.user.id); - alerts.forEach(alert => { - meta.pluginData.state.alerts.delete(alert.id); - }); + for (let i = 0; i < alerts.length; ++i) { + meta.pluginData.state.alerts.delete(alerts[i].id); + } }, }); diff --git a/backend/src/plugins/LocateUser/events/SendAlertsEvts.ts b/backend/src/plugins/LocateUser/events/SendAlertsEvts.ts index e426e704..6c76ef45 100644 --- a/backend/src/plugins/LocateUser/events/SendAlertsEvts.ts +++ b/backend/src/plugins/LocateUser/events/SendAlertsEvts.ts @@ -29,11 +29,12 @@ export const ChannelLeaveAlertsEvt = locateUserEvt({ const triggeredAlerts = await meta.pluginData.state.alerts.getAlertsByUserId(meta.args.member.id); const voiceChannel = meta.args.oldChannel as VoiceChannel; - triggeredAlerts.forEach(alert => { + for (let i = 0; i < triggeredAlerts.length; ++i) { + const alert = triggeredAlerts[i]; const txtChannel = meta.pluginData.client.getChannel(alert.channel_id) as TextableChannel; txtChannel.createMessage( `🔴 <@!${alert.requestor_id}> the user <@!${alert.user_id}> disconnected out of \`${voiceChannel.name}\``, ); - }); + } }, }); diff --git a/backend/src/plugins/LocateUser/utils/fillAlertsList.ts b/backend/src/plugins/LocateUser/utils/fillAlertsList.ts index 3c5c90d1..9a875f7e 100644 --- a/backend/src/plugins/LocateUser/utils/fillAlertsList.ts +++ b/backend/src/plugins/LocateUser/utils/fillAlertsList.ts @@ -4,9 +4,9 @@ import { LocateUserPluginType } from "../types"; export async function fillActiveAlertsList(pluginData: GuildPluginData) { const allAlerts = await pluginData.state.alerts.getAllGuildAlerts(); - allAlerts.forEach(alert => { - if (!pluginData.state.usersWithAlerts.includes(alert.user_id)) { - pluginData.state.usersWithAlerts.push(alert.user_id); + for (let i = 0; i < allAlerts.length; ++i) { + if (!pluginData.state.usersWithAlerts.includes(allAlerts[i].user_id)) { + pluginData.state.usersWithAlerts.push(allAlerts[i].user_id); } - }); + } } diff --git a/backend/src/plugins/LocateUser/utils/sendAlerts.ts b/backend/src/plugins/LocateUser/utils/sendAlerts.ts index df49c3d1..bc50af06 100644 --- a/backend/src/plugins/LocateUser/utils/sendAlerts.ts +++ b/backend/src/plugins/LocateUser/utils/sendAlerts.ts @@ -10,12 +10,13 @@ export async function sendAlerts(pluginData: GuildPluginData { + for (let i = 0; i < triggeredAlerts.length; ++i) { + const alert = triggeredAlerts[i]; const prepend = `<@!${alert.requestor_id}>, an alert requested by you has triggered!\nReminder: \`${alert.body}\`\n`; const txtChannel = pluginData.client.getChannel(alert.channel_id) as TextableChannel; sendWhere(pluginData, member, txtChannel, prepend); if (alert.active) { moveMember(pluginData, alert.requestor_id, member, txtChannel); } - }); + } } diff --git a/backend/src/plugins/ModActions/commands/MassBanCmd.ts b/backend/src/plugins/ModActions/commands/MassBanCmd.ts index bd79f7f3..7bd793eb 100644 --- a/backend/src/plugins/ModActions/commands/MassBanCmd.ts +++ b/backend/src/plugins/ModActions/commands/MassBanCmd.ts @@ -42,7 +42,8 @@ export const MassbanCmd = modActionsCmd({ const banReason = formatReasonWithAttachments(banReasonReply.content, msg.attachments); // Verify we can act on each of the users specified - for (const userId of args.userIds) { + for (let i = 0; i < args.userIds.length; ++i) { + const userId = args.userIds[i]; const member = pluginData.guild.members.get(userId); // TODO: Get members on demand? if (member && !canActOn(pluginData, msg.member, member)) { sendErrorMessage(pluginData, msg.channel, "Cannot massban one or more users: insufficient permissions"); @@ -52,11 +53,11 @@ export const MassbanCmd = modActionsCmd({ // Ignore automatic ban cases and logs for these users // We'll create our own cases below and post a single "mass banned" log instead - args.userIds.forEach(userId => { + for (let i = 0; i < args.userIds.length; ++i) { // Use longer timeouts since this can take a while - ignoreEvent(pluginData, IgnoredEventType.Ban, userId, 120 * 1000); - pluginData.state.serverLogs.ignoreLog(LogType.MEMBER_BAN, userId, 120 * 1000); - }); + ignoreEvent(pluginData, IgnoredEventType.Ban, args.userIds[i], 120 * 1000); + pluginData.state.serverLogs.ignoreLog(LogType.MEMBER_BAN, args.userIds[i], 120 * 1000); + } // Show a loading indicator since this can take a while const loadingMsg = await msg.channel.createMessage("Banning..."); diff --git a/backend/src/plugins/ModActions/commands/MassUnbanCmd.ts b/backend/src/plugins/ModActions/commands/MassUnbanCmd.ts index 897cc25f..173a47f4 100644 --- a/backend/src/plugins/ModActions/commands/MassUnbanCmd.ts +++ b/backend/src/plugins/ModActions/commands/MassUnbanCmd.ts @@ -41,11 +41,11 @@ export const MassunbanCmd = modActionsCmd({ // Ignore automatic unban cases and logs for these users // We'll create our own cases below and post a single "mass unbanned" log instead - args.userIds.forEach(userId => { + for (let i = 0; i < args.userIds.length; ++i) { // Use longer timeouts since this can take a while - ignoreEvent(pluginData, IgnoredEventType.Unban, userId, 120 * 1000); - pluginData.state.serverLogs.ignoreLog(LogType.MEMBER_UNBAN, userId, 120 * 1000); - }); + ignoreEvent(pluginData, IgnoredEventType.Unban, args.userIds[i], 120 * 1000); + pluginData.state.serverLogs.ignoreLog(LogType.MEMBER_UNBAN, args.userIds[i], 120 * 1000); + } // Show a loading indicator since this can take a while const loadingMsg = await msg.channel.createMessage("Unbanning..."); @@ -53,7 +53,8 @@ export const MassunbanCmd = modActionsCmd({ // Unban each user and count failed unbans (if any) const failedUnbans: Array<{ userId: string; reason: UnbanFailReasons }> = []; const casesPlugin = pluginData.getPlugin(CasesPlugin); - for (const userId of args.userIds) { + for (let i = 0; i < args.userIds.length; ++i) { + const userId = args.userIds[i]; if (!(await isBanned(pluginData, userId))) { failedUnbans.push({ userId, reason: UnbanFailReasons.NOT_BANNED }); continue; diff --git a/backend/src/plugins/ModActions/commands/MassmuteCmd.ts b/backend/src/plugins/ModActions/commands/MassmuteCmd.ts index 73e329d0..f90ca210 100644 --- a/backend/src/plugins/ModActions/commands/MassmuteCmd.ts +++ b/backend/src/plugins/ModActions/commands/MassmuteCmd.ts @@ -42,7 +42,8 @@ export const MassmuteCmd = modActionsCmd({ const muteReason = formatReasonWithAttachments(muteReasonReceived.content, msg.attachments); // Verify we can act upon all users - for (const userId of args.userIds) { + for (let i = 0; i < args.userIds.length; ++i) { + const userId = args.userIds[i]; const member = pluginData.guild.members.get(userId); if (member && !canActOn(pluginData, msg.member, member)) { sendErrorMessage(pluginData, msg.channel, "Cannot massmute one or more users: insufficient permissions"); @@ -52,10 +53,10 @@ export const MassmuteCmd = modActionsCmd({ // Ignore automatic mute cases and logs for these users // We'll create our own cases below and post a single "mass muted" log instead - args.userIds.forEach(userId => { + for (let i = 0; i < args.userIds.length; ++i) { // Use longer timeouts since this can take a while - pluginData.state.serverLogs.ignoreLog(LogType.MEMBER_MUTE, userId, 120 * 1000); - }); + pluginData.state.serverLogs.ignoreLog(LogType.MEMBER_MUTE, args.userIds[i], 120 * 1000); + } // Show loading indicator const loadingMsg = await msg.channel.createMessage("Muting..."); @@ -64,7 +65,8 @@ export const MassmuteCmd = modActionsCmd({ const modId = msg.author.id; const failedMutes: string[] = []; const mutesPlugin = pluginData.getPlugin(MutesPlugin); - for (const userId of args.userIds) { + for (let i = 0; i < args.userIds.length; ++i) { + const userId = args.userIds[i]; try { await mutesPlugin.muteUser(userId, 0, `Mass mute: ${muteReason}`, { caseArgs: { diff --git a/backend/src/plugins/Mutes/commands/MutesCmd.ts b/backend/src/plugins/Mutes/commands/MutesCmd.ts index 9636141a..6c190e32 100644 --- a/backend/src/plugins/Mutes/commands/MutesCmd.ts +++ b/backend/src/plugins/Mutes/commands/MutesCmd.ts @@ -52,10 +52,10 @@ export const MutesCmd = mutesCmd({ const muteRole = pluginData.config.get().mute_role; if (muteRole) { - pluginData.guild.members.forEach(member => { + for (const member of pluginData.guild.members.values()) { if (muteUserIds.has(member.id)) return; if (member.roles.includes(muteRole)) manuallyMutedMembers.push(member); - }); + } } totalMutes = manuallyMutedMembers.length; diff --git a/backend/src/plugins/Utility/commands/CleanCmd.ts b/backend/src/plugins/Utility/commands/CleanCmd.ts index 8a1a2328..176114dd 100644 --- a/backend/src/plugins/Utility/commands/CleanCmd.ts +++ b/backend/src/plugins/Utility/commands/CleanCmd.ts @@ -129,7 +129,8 @@ export const CleanCmd = utilityCmd({ if (potentialMessagesToClean.length === 0) break; const filtered: SavedMessage[] = []; - for (const message of potentialMessagesToClean) { + for (let i = 0; i < potentialMessagesToClean.length; ++i) { + const message = potentialMessagesToClean[i]; const contentString = message.data.content || ""; if (args.user && message.user_id !== args.user) continue; if (args.bots && !message.is_bot) continue; diff --git a/backend/src/templateFormatter.ts b/backend/src/templateFormatter.ts index 1963c816..89e5486d 100644 --- a/backend/src/templateFormatter.ts +++ b/backend/src/templateFormatter.ts @@ -35,7 +35,8 @@ function newTemplateVar(): ITemplateVar { type ParsedTemplate = Array; function cleanUpParseResult(arr) { - arr.forEach(item => { + for (let i = 0; i < arr.length; ++i) { + const item = arr[i]; if (typeof item === "object") { delete item._state; delete item._parent; @@ -43,7 +44,7 @@ function cleanUpParseResult(arr) { cleanUpParseResult(item.args); } } - }); + } } export function parseTemplate(str: string): ParsedTemplate {