specify the initial value of all reducers to avoid weird bugs/edge cases

This commit is contained in:
Ean Milligan 2025-07-08 01:25:30 -04:00
parent 4e12e11fe2
commit 02e2faf58f
4 changed files with 50 additions and 25 deletions

View File

@ -107,7 +107,7 @@ export const tokenizeCmd = (
if (modifiers.simulatedNominal) { if (modifiers.simulatedNominal) {
loggingEnabled && log(LT.LOG, `SN on, condensing array into single item ${JSON.stringify(simulatedData)}`); loggingEnabled && log(LT.LOG, `SN on, condensing array into single item ${JSON.stringify(simulatedData)}`);
returnData.push({ returnData.push({
rollTotal: simulatedData.map((data) => data.rollTotal).reduce(basicReducer) / simulatedData.length, rollTotal: simulatedData.map((data) => data.rollTotal).reduce(basicReducer, 0) / simulatedData.length,
rollPreFormat: simulatedData[0].rollPreFormat, rollPreFormat: simulatedData[0].rollPreFormat,
rollPostFormat: simulatedData[0].rollPostFormat, rollPostFormat: simulatedData[0].rollPostFormat,
rollDetails: simulatedData[0].rollDetails, rollDetails: simulatedData[0].rollDetails,

View File

@ -163,17 +163,30 @@ export const handleGroup = (
}); });
} }
loggingEnabled && log(LT.LOG, `Current Group Results: ${JSON.stringify(groupResults)}`);
loggingEnabled && log(LT.LOG, `Applying group flags: ${JSON.stringify(resultFlags)}`); loggingEnabled && log(LT.LOG, `Applying group flags: ${JSON.stringify(resultFlags)}`);
const data = groupResults.reduce((prev, cur, idx) => ({ const data = groupResults.reduce(
rollTotal: resultFlags[idx].dropped ? prev.rollTotal : prev.rollTotal + cur.rollTotal, (prev, cur, idx) => ({
rollPreFormat: '', rollTotal: resultFlags[idx].dropped ? prev.rollTotal : prev.rollTotal + cur.rollTotal,
rollPostFormat: '', rollPreFormat: '',
rollDetails: `${prev.rollDetails}, ${applyFlags(cur.rollDetails, resultFlags[idx])}`, rollPostFormat: '',
containsCrit: resultFlags[idx].dropped ? prev.containsCrit : prev.containsCrit || cur.containsCrit, rollDetails: `${prev.rollDetails}, ${applyFlags(cur.rollDetails, resultFlags[idx])}`,
containsFail: resultFlags[idx].dropped ? prev.containsFail : prev.containsFail || cur.containsFail, containsCrit: resultFlags[idx].dropped ? prev.containsCrit : prev.containsCrit || cur.containsCrit,
initConfig: `${prev.initConfig}, ${cur.initConfig}`, containsFail: resultFlags[idx].dropped ? prev.containsFail : prev.containsFail || cur.containsFail,
isComplex: prev.isComplex || cur.isComplex, initConfig: `${prev.initConfig}, ${cur.initConfig}`,
})); isComplex: prev.isComplex || cur.isComplex,
}),
{
rollTotal: 0,
rollPreFormat: '',
rollPostFormat: '',
rollDetails: '',
containsCrit: false,
containsFail: false,
initConfig: '',
isComplex: false,
},
);
data.initConfig = `{${data.initConfig}}${groupModifiers.replaceAll(' ', '')}`; data.initConfig = `{${data.initConfig}}${groupModifiers.replaceAll(' ', '')}`;
if (groupConf.success.on || groupConf.fail.on) { if (groupConf.success.on || groupConf.fail.on) {
@ -192,16 +205,28 @@ export const handleGroup = (
retData = data; retData = data;
} else { } else {
// Sum mode // Sum mode
const data = groupResults.reduce((prev, cur) => ({ const data = groupResults.reduce(
rollTotal: prev.rollTotal + cur.rollTotal, (prev, cur) => ({
rollPreFormat: '', rollTotal: prev.rollTotal + cur.rollTotal,
rollPostFormat: '', rollPreFormat: '',
rollDetails: `${prev.rollDetails} + ${cur.rollDetails}`, rollPostFormat: '',
containsCrit: prev.containsCrit || cur.containsCrit, rollDetails: `${prev.rollDetails} + ${cur.rollDetails}`,
containsFail: prev.containsFail || cur.containsFail, containsCrit: prev.containsCrit || cur.containsCrit,
initConfig: `${prev.initConfig}, ${cur.initConfig}`, containsFail: prev.containsFail || cur.containsFail,
isComplex: prev.isComplex || cur.isComplex, initConfig: `${prev.initConfig}, ${cur.initConfig}`,
})); isComplex: prev.isComplex || cur.isComplex,
}),
{
rollTotal: 0,
rollPreFormat: '',
rollPostFormat: '',
rollDetails: '',
containsCrit: false,
containsFail: false,
initConfig: '',
isComplex: false,
},
);
data.initConfig = `{${data.initConfig}}`; data.initConfig = `{${data.initConfig}}`;
data.rollDetails = `{${data.rollDetails}}`; data.rollDetails = `{${data.rollDetails}}`;
retData = data; retData = data;

View File

@ -173,7 +173,7 @@ export const onWorkerComplete = async (workerMessage: MessageEvent<SolvedRoll>,
}, },
]; ];
if (pubAttachments.map((file) => file.blob.size).reduce(basicReducer) < config.maxFileSize) { if (pubAttachments.map((file) => file.blob.size).reduce(basicReducer, 0) < config.maxFileSize) {
// All attachments will fit in one message // All attachments will fit in one message
newMsg.reply({ newMsg.reply({
embeds: respMessage, embeds: respMessage,

View File

@ -84,7 +84,7 @@ export const generateCountDetailsEmbed = (counts: CountDetails): ArtigenEmbedNoA
]; ];
return { return {
charCount: title.length + fields.map((field) => field.name.length + field.value.length).reduce(basicReducer), charCount: title.length + fields.map((field) => field.name.length + field.value.length).reduce(basicReducer, 0),
embed: { embed: {
color: infoColor1, color: infoColor1,
title, title,
@ -115,7 +115,7 @@ export const generateRollDistsEmbed = (rollDists: RollDistributionMap): ArtigenE
.toArray() .toArray()
.slice(0, 25) .slice(0, 25)
.map(([key, distArr]) => { .map(([key, distArr]) => {
const total = distArr.reduce(basicReducer); const total = distArr.reduce(basicReducer, 0);
return { return {
name: `${getDistName(key)} (Total rolls: ${total}):`, name: `${getDistName(key)} (Total rolls: ${total}):`,
value: distArr.map((cnt, dieIdx) => `${key.startsWith('fate') ? dieIdx - 1 : dieIdx + 1}: ${cnt} (${((cnt / total) * 100).toFixed(1)}%)`).join('\n'), value: distArr.map((cnt, dieIdx) => `${key.startsWith('fate') ? dieIdx - 1 : dieIdx + 1}: ${cnt} (${((cnt / total) * 100).toFixed(1)}%)`).join('\n'),
@ -124,7 +124,7 @@ export const generateRollDistsEmbed = (rollDists: RollDistributionMap): ArtigenE
}); });
const rollDistTitle = 'Roll Distributions:'; const rollDistTitle = 'Roll Distributions:';
const totalSize = fields.map((field) => field.name.length + field.value.length).reduce(basicReducer); const totalSize = fields.map((field) => field.name.length + field.value.length).reduce(basicReducer, 0);
if (totalSize > 4000 || fields.some((field) => field.name.length > 256 || field.value.length > 1024)) { if (totalSize > 4000 || fields.some((field) => field.name.length > 256 || field.value.length > 1024)) {
const rollDistBlob = new Blob([fields.map((field) => `# ${field.name}\n${field.value}`).join('\n\n') as BlobPart], { type: 'text' }); const rollDistBlob = new Blob([fields.map((field) => `# ${field.name}\n${field.value}`).join('\n\n') as BlobPart], { type: 'text' });
if (rollDistBlob.size > config.maxFileSize) { if (rollDistBlob.size > config.maxFileSize) {