roll: multiple dice

This commit is contained in:
Cynthia Foxwell 2025-09-21 11:47:51 -06:00
parent 0a38640879
commit 7e735b93e5
Signed by: Cynosphere
SSH key fingerprint: SHA256:H3SM8ufP/uxqLwKSH7xY89TDnbR9uOHzjLoBr0tlajk

View file

@ -8,6 +8,20 @@ roll.helpText = "Roll a dice";
roll.usage = "<sides>";
roll.callback = function (msg, line, [sides], {advantage, disadvantage}) {
if (sides == null || sides == "") sides = 6;
let num = 1;
if (sides.indexOf("d") > -1) {
const split = sides.split("d");
if (split[2] != null) {
num = split[1];
sides = split[2];
} else {
sides = split[1];
}
}
num = Number(num);
if (Number.isNaN(num)) num = 1;
if (num < 0) num = Math.abs(num);
if (num == 0) num = 1;
sides = Number(sides);
if (Number.isNaN(sides)) sides = 6;
if (sides < 0) sides = Math.abs(sides);
@ -15,25 +29,41 @@ roll.callback = function (msg, line, [sides], {advantage, disadvantage}) {
if (sides == 0) return ":hole:";
if (sides == 1) return ":one:";
const res = Math.floor(Math.random() * sides);
const rolls = [];
for (let i = 0; i < num; i++) {
const res = Math.floor(Math.random() * sides);
if (sides == 2) {
return `:coin:: ${res == 1 ? "Heads" : "Tails"}`;
rolls.push(res == 1 ? "Heads" : "Tails");
continue;
}
if (advantage) {
const res2 = Math.floor(Math.random() * sides);
const adv = Math.max(res + 1, res2 + 1);
return `:game_die: (d${sides} with advantage): ${adv}`;
rolls.push(adv);
} else if (disadvantage) {
const res2 = Math.floor(Math.random() * sides);
const adv = Math.min(res + 1, res2 + 1);
return `:game_die: (d${sides} with disadvantage): ${adv}`;
rolls.push(adv);
} else {
return `:game_die: (d${sides}): ${1 + res}`;
rolls.push(res + 1);
}
}
let prefix = `:game_die: (${num > 1 ? num : ""}d${sides}):`;
if (sides == 2) {
prefix = ":coin::";
} else if (advantage) {
prefix = prefix.substring(0, prefix.length - 2) + " with advantage):";
} else if (disadvantage) {
prefix = prefix.substring(0, prefix.length - 2) + " with disadvantage):";
}
return `${prefix} ${rolls.join(", ")}`;
};
hf.registerCommand(roll);
@ -42,7 +72,7 @@ rollInteraction.helpText = "Roll a dice";
rollInteraction.options.sides = {
name: "sides",
type: ApplicationCommandOptionTypes.NUMBER,
description: "How many sides to pick from",
description: "How many sides to pick from (use #d# to roll multiple dice)",
required: false,
default: 6,
};