roll: add (dis)advantage

This commit is contained in:
Cynthia Foxwell 2025-09-19 12:28:31 -06:00
parent 3694e84e21
commit 05e3ac30f1
Signed by: Cynosphere
SSH key fingerprint: SHA256:H3SM8ufP/uxqLwKSH7xY89TDnbR9uOHzjLoBr0tlajk

View file

@ -6,7 +6,7 @@ const roll = new Command("roll");
roll.category = "misc"; roll.category = "misc";
roll.helpText = "Roll a dice"; roll.helpText = "Roll a dice";
roll.usage = "<sides>"; roll.usage = "<sides>";
roll.callback = function (msg, line) { roll.callback = function (msg, line, args, {advantage, disadvantage}) {
if (line == null || line == "") line = 6; if (line == null || line == "") line = 6;
line = Number(line); line = Number(line);
if (Number.isNaN(line)) line = 6; if (Number.isNaN(line)) line = 6;
@ -21,7 +21,19 @@ roll.callback = function (msg, line) {
return `:coin:: ${res == 1 ? "Heads" : "Tails"}`; return `:coin:: ${res == 1 ? "Heads" : "Tails"}`;
} }
if (advantage) {
const res2 = Math.floor(Math.random() * line);
const adv = Math.max(res + 1, res2 + 1);
return `:game_die: (d${line} with advantage): ${adv}`;
} else if (disadvantage) {
const res2 = Math.floor(Math.random() * line);
const adv = Math.min(res + 1, res2 + 1);
return `:game_die: (d${line} with disadvantage): ${adv}`;
} else {
return `:game_die: (d${line}): ${1 + res}`; return `:game_die: (d${line}): ${1 + res}`;
}
}; };
hf.registerCommand(roll); hf.registerCommand(roll);
@ -34,9 +46,25 @@ rollInteraction.options.sides = {
required: false, required: false,
default: 6, default: 6,
}; };
rollInteraction.options.advantage = {
name: "advantage",
type: ApplicationCommandOptionTypes.BOOLEAN,
description: "Roll with advantage",
required: false,
default: false,
};
rollInteraction.options.disadvantage = {
name: "disadvantage",
type: ApplicationCommandOptionTypes.BOOLEAN,
description: "Roll with disadvantage",
required: false,
default: false,
};
rollInteraction.callback = async function (interaction) { rollInteraction.callback = async function (interaction) {
const sides = this.getOption(interaction, "sides"); const sides = this.getOption(interaction, "sides");
const advantage = this.getOption(interaction, "advantage");
const disadvantage = this.getOption(interaction, "disadvantage");
return roll.callback(interaction, sides); return roll.callback(interaction, sides, [sides], {advantage, disadvantage});
}; };
hf.registerCommand(rollInteraction); hf.registerCommand(rollInteraction);