3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-20 16:25:03 +00:00

perf(arrays): Improved array looping

This commit is contained in:
unknown 2021-05-02 02:53:18 -04:00
parent edd78fc9c6
commit f9520ab434
No known key found for this signature in database
GPG key ID: 5D70E03C78E749BA
12 changed files with 45 additions and 37 deletions

View file

@ -42,9 +42,9 @@ export class QueuedEventEmitter {
const listeners = [...(this.listeners.get(eventName) || []), ...(this.listeners.get("*") || [])];
let promise: Promise<any> = 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;
}

View file

@ -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;

View file

@ -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);
}
},
});

View file

@ -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}\``,
);
});
}
},
});

View file

@ -4,9 +4,9 @@ import { LocateUserPluginType } from "../types";
export async function fillActiveAlertsList(pluginData: GuildPluginData<LocateUserPluginType>) {
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);
}
});
}
}

View file

@ -10,12 +10,13 @@ export async function sendAlerts(pluginData: GuildPluginData<LocateUserPluginTyp
const member = await resolveMember(pluginData.client, pluginData.guild, userId);
if (!member) return;
triggeredAlerts.forEach(alert => {
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);
}
});
}
}

View file

@ -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...");

View file

@ -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;

View file

@ -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: {

View file

@ -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;

View file

@ -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;

View file

@ -35,7 +35,8 @@ function newTemplateVar(): ITemplateVar {
type ParsedTemplate = Array<string | ITemplateVar>;
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 {