Files
xiao/commands/games-sp/roulette.js
T
2024-05-21 21:02:12 -04:00

64 lines
2.3 KiB
JavaScript

const Command = require('../../framework/Command');
const { oneLine } = require('common-tags');
const red = [1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36];
const black = [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35];
const numbers = [0].concat(red, black);
const dozens = ['1-12', '13-24', '25-36'];
const halves = ['1-18', '19-36'];
const columns = ['1st', '2nd', '3rd'];
const parity = ['even', 'odd'];
const colors = ['red', 'black'];
module.exports = class RouletteCommand extends Command {
constructor(client) {
super(client, {
name: 'roulette',
group: 'games-sp',
description: 'Play a game of roulette.',
args: [
{
key: 'space',
type: 'string',
validate: space => {
if (numbers.includes(Number.parseInt(space, 10))) return true;
if (dozens.includes(space)) return true;
if (halves.includes(space)) return true;
if (columns.includes(space.toLowerCase())) return true;
if (parity.includes(space.toLowerCase())) return true;
if (colors.includes(space.toLowerCase())) return true;
return oneLine`
Invalid space, please enter either a specific number from 0-36, a range of dozens (e.g. 1-12), a range of
halves (e.g. 1-18), a column (e.g. 1st), a color (e.g. black), or a parity (e.g. even).
`;
},
parse: space => space.toLowerCase()
}
]
});
}
run(msg, { space }) {
const number = Math.floor(Math.random() * 37);
const color = number ? red.includes(number) ? 'RED' : 'BLACK' : null;
const win = this.verifyWin(space, number);
return msg.reply(`The result is **${number}${color ? ` ${color}` : ''}**. ${win ? 'You win!' : 'You lose...'}`);
}
verifyWin(choice, result) {
if (dozens.includes(choice) || halves.includes(choice)) {
const range = choice.split('-');
return result >= range[0] && range[1] >= result;
}
if (colors.includes(choice)) {
if (choice === 'black') return black.includes(result);
if (choice === 'red') return red.includes(result);
}
if (parity.includes(choice)) return parity[result % 2] === choice;
if (columns.includes(choice)) return columns[(result - 1) % 3] === choice;
const number = Number.parseInt(choice, 10);
if (numbers.includes(number)) return result === number;
if (!result) return false;
return false;
}
};