From 05e3ac30f1f9718f1dd2f27a85713e36f5db3497 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Fri, 19 Sep 2025 12:28:31 -0600 Subject: [PATCH] roll: add (dis)advantage --- src/modules/misc/roll.js | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/modules/misc/roll.js b/src/modules/misc/roll.js index 4763efd..f2b3b8c 100644 --- a/src/modules/misc/roll.js +++ b/src/modules/misc/roll.js @@ -6,7 +6,7 @@ const roll = new Command("roll"); roll.category = "misc"; roll.helpText = "Roll a dice"; roll.usage = ""; -roll.callback = function (msg, line) { +roll.callback = function (msg, line, args, {advantage, disadvantage}) { if (line == null || line == "") line = 6; line = Number(line); if (Number.isNaN(line)) line = 6; @@ -21,7 +21,19 @@ roll.callback = function (msg, line) { return `:coin:: ${res == 1 ? "Heads" : "Tails"}`; } - return `:game_die: (d${line}): ${1 + res}`; + 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}`; + } }; hf.registerCommand(roll); @@ -34,9 +46,25 @@ rollInteraction.options.sides = { required: false, 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) { 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);