@getsolara/solara.js
Version:
A lightweight and modular Discord bot framework built on discord.js v14, with truly optional feature packages.
41 lines (35 loc) • 1.77 kB
JavaScript
const StopExecutionError = require('../errors/StopExecutionError');
module.exports = {
name: "$forEach",
description: "Executes code for each item in a list. Sets $forEachItem, $forEachIndex. Args: code;item1;item2;...",
takesBrackets: true,
execute: async (context, args) => {
if (args.length < 2) return "[Error: $forEach requires code and at least one item]";
const codeToRun = args[0];
const items = args.slice(1);
if (!context.localVariables) context.localVariables = new Map();
let finalOutput = [];
for (let i = 0; i < items.length; i++) {
const item = items[i];
const index = i + 1;
context.localVariables.set('forEachItem', item);
context.localVariables.set('forEachIndex', index.toString());
try {
const iterationResult = await context.client.functionParser.parse(codeToRun, context);
if (iterationResult) finalOutput.push(iterationResult);
} catch (error) {
console.error(`$forEach: Error during iteration ${index}:`, error);
finalOutput.push(`[Error on index ${index}: ${error.message}]`);
if (error instanceof StopExecutionError) {
console.warn("$forEach: StopExecutionError caught during iteration, stopping forEach.");
context.localVariables.delete('forEachItem');
context.localVariables.delete('forEachIndex');
throw error;
}
}
}
context.localVariables.delete('forEachItem');
context.localVariables.delete('forEachIndex');
return "";
}
};