38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
'use strict';
|
|
|
|
const config = require('config');
|
|
const crypto = require('crypto');
|
|
|
|
const style = require('../utils/style');
|
|
|
|
const dieFaces = ['⚀', '⚁', '⚂', '⚃', '⚄', '⚅'];
|
|
|
|
function onCommand(args, context) {
|
|
const rolls = Number(args[0]) || 1;
|
|
const faces = Number(args[1]) || 6;
|
|
|
|
if (rolls > config.dice.maxRolls) {
|
|
context.sendMessage(`You can only roll ${config.dice.maxRolls} dice at one time`, context.room.id);
|
|
return;
|
|
}
|
|
|
|
if (rolls > config.dice.maxFaces) {
|
|
context.sendMessage(`Your dice can have at most ${config.dice.maxFace} faces`, context.room.id);
|
|
return;
|
|
}
|
|
|
|
const results = Array.from({ length: rolls }, () => {
|
|
const result = crypto.randomInt(1, faces);
|
|
|
|
// using U+2003 Em Space after dice to create double space that doesn't get filtered in SChat
|
|
return `${style.grey(dieFaces[result - 1] || '▦')} ${style.bold(result)}`; // eslint-disable-line no-irregular-whitespace
|
|
});
|
|
|
|
context.sendMessage(results.join(' | '), context.room.id);
|
|
}
|
|
|
|
module.exports = {
|
|
onCommand,
|
|
commands: ['dice', 'die', 'roll'],
|
|
};
|