2025-04-29 12:31:17 +02:00

66 lines
2.6 KiB
JavaScript

const { SlashCommandBuilder, SlashCommandNumberOption } = require("discord.js");
function calculate(desiredPercent, probability, itemsPerRun, minutesPerRun) {
let result = [];
//const numberOfRuns = Math.round(
// Math.log(1 - desiredPercent) / Math.log(1 - probability)
//);
const numberOfItems = Math.log(1 - desiredPercent) / Math.log(1 - probability);
const numberOfRuns = numberOfItems / itemsPerRun;
const hoursToGetPercent = (numberOfRuns * minutesPerRun) / 60;
result.push(`${Math.round(desiredPercent * 100)}%`.padEnd(7, " ")); // prob
result.push(`${Math.ceil(numberOfItems)}`.padEnd(7, " ")); // items
result.push(`${Math.ceil(numberOfRuns)}`.padEnd(7, " ")); // runs
result.push(`${Math.round(hoursToGetPercent)}`.padEnd(7, " ")); // hours
return result.join("\t") + "\n";
}
let tries = (module.exports = {
data: new SlashCommandBuilder()
.setName("howmanyruns")
.setDescription("How lucky are you?")
.addStringOption((option) =>
option
.setName("probability")
.setDescription("you can guess")
.setRequired(true)
)
.addNumberOption(
new SlashCommandNumberOption()
.setName("items-per-run")
.setDescription("how many items every run")
.setRequired(true)
.setMinValue(1)
)
.addNumberOption((option) =>
option
.setName("minutes-per-run")
.setDescription("how long each run takes")
.setRequired(true)
.setMinValue(1)
),
async execute(interaction) {
let strprobability;
if (interaction.options.getString("probability").split("/")[1] == null) {
strprobability = parseInt(interaction.options.getString("probability"));
} else {
strprobability = parseInt(
interaction.options.getString("probability").split("/")[1]
);
}
const items = interaction.options.getNumber("items-per-run");
const probability = 1 / strprobability;
const minutes = interaction.options.getNumber("minutes-per-run");
let result = "";
result += calculate(0.1, probability, items, minutes);
result += calculate(0.25, probability, items, minutes);
result += calculate(0.5, probability, items, minutes);
result += calculate(0.75, probability, items, minutes);
result += calculate(0.9, probability, items, minutes);
result += calculate(0.95, probability, items, minutes);
await interaction.reply(
`Assuming you get ${items} item(s) per run.\nYou spend ${minutes} minute(s) per run and probability is 1/${strprobability}.\n\`\`\`${"Prob".padEnd(7, " ")}\t${"Items".padEnd(7, " ")}\t${"Runs".padEnd(7, " ")}\tHours\n${result}\`\`\``
);
},
});