Added dice.

This commit is contained in:
ThePendulum 2022-10-24 00:25:13 +02:00
parent 32034b7b6f
commit ef5b6ad856
3 changed files with 43 additions and 2 deletions

View File

@ -22,7 +22,7 @@ module.exports = {
greeting: 'Hi, I am aisha, your game host!', greeting: 'Hi, I am aisha, your game host!',
usernamePrefix: '@', usernamePrefix: '@',
channels: ['GamesNight'], channels: ['GamesNight'],
games: ['mash', 'trivia', 'letters', 'duck', 'ping', 'say', 'kill', 'uptime', 'help'], games: ['mash', 'trivia', 'letters', 'duck', 'dice', 'ping', 'say', 'kill', 'uptime', 'help'],
schatColors: { schatColors: {
red: 'red', red: 'red',
orange: 'orange', orange: 'orange',
@ -53,4 +53,8 @@ module.exports = {
length: 9, length: 9,
timeout: 60, timeout: 60,
}, },
dice: {
maxRolls: 10,
maxFaces: 1000,
},
}; };

37
src/games/dice.js Normal file
View File

@ -0,0 +1,37 @@
'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 `${dieFaces[result - 1] ? `${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', 'roll'],
};

View File

@ -3,7 +3,7 @@
const config = require('config'); const config = require('config');
const style = require('./style'); const style = require('./style');
function getLeaders(points, user, ping = false) { function getLeaders(points, user, ping = true) {
return Object.entries(points).sort(([, scoreA], [, scoreB]) => scoreB - scoreA).map(([userKey, score], index) => { return Object.entries(points).sort(([, scoreA], [, scoreB]) => scoreB - scoreA).map(([userKey, score], index) => {
const username = userKey.split(':')[1] || userKey; // process the points file const username = userKey.split(':')[1] || userKey; // process the points file