From 2c2de58138ae7801c9be58e43c64259cc7534248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85dne=20E=2E=20Moldes=C3=A6ter?= Date: Fri, 17 May 2019 23:01:12 +0200 Subject: [PATCH] Major restructuring, set up regex testing --- README.md | 4 ++-- bot.js | 61 +++++++++++++++++--------------------------------- diceRolling.js | 23 +++++++++++++++++++ 3 files changed, 45 insertions(+), 43 deletions(-) create mode 100644 diceRolling.js diff --git a/README.md b/README.md index 47062d9..9901834 100644 --- a/README.md +++ b/README.md @@ -13,5 +13,5 @@ Rollux is a simple dice rolling bot for discord "token": "{your token}" } ``` -3. Install node.js and run the following command: `npm install` -4. Run it with node.js \ No newline at end of file +3. Install node.js and npm, then run the following command: `npm install` +4. Run it with `node bot.js` \ No newline at end of file diff --git a/bot.js b/bot.js index 671ad82..8891a0d 100644 --- a/bot.js +++ b/bot.js @@ -1,6 +1,7 @@ var Discord = require('discord.io'); var logger = require('winston'); var auth = require('./auth.json'); +var diceRoller = require('./diceRolling.js') logger.remove(logger.transports.Console); logger.add(new logger.transports.Console, { @@ -29,50 +30,18 @@ bot.on('message', function (user, userID, channelID, message, evt) { switch (cmd) { case 'hi': - bot.sendMessage({ - to: channelID, - message: 'Hello, World!' - }) + sendMessage(channelID, 'Hello, World!') case 'roll': - // dice[0] = amount, dice[1] = what dice - var dice = args[1].toLowerCase().split(/[d/x+\-*]/g) - var message = '' - - console.log(dice.toString()) - - if (dice.some(e => parseInt(e) === 0)) { - message = "No! bad " + user - } - else if (dice[0] == 1 && dice.length <= 2) { - message = args[1] + ': ' + roll(dice[1]) + if (/([+\-*/]?\d{0,}d\d{1,})([+\-*/]\d{1,}){0,}/gi.test(message.substring(6).replace(/\s/g, ''))) { + sendMessage(channelID, diceRoller.roll(message.substring(6))) } else { - var results = [] - message = args[1] + ': [' - for (i = 0; i < dice[0]; i++) { - results[i] = roll(dice[1]) - } - var multiplier = '' - var sum = results.reduce(getSum) - if (args[1].substring().includes('+')) { - multiplier = ' + ' + dice[2] - sum += parseInt(dice[2]) - } else if (args[1].substring().includes('-')) { - multiplier = ' - ' + dice[2] - sum -= parseInt(dice[2]) - } else if (args[1].substring().includes('/')) { - multiplier = ' / ' + dice[2] - sum /= parseInt(dice[2]) - } else if (args[1].substring().includes('x') || args[1].substring().includes('*')) { - multiplier = ' x ' + dice[2] - sum *= parseInt(dice[2]) - } - message += results.toString().replace(/,/g, ', ') + ']' + multiplier + ' = ' + sum + sendMessage(channelID, "I don't recognize this: \"" + + message + .substring(6) + .replace(/([+\-*/]?\d{0,}d\d{1,})([+\-*/]\d{1,}){0,}/gi, "") + .toString() + + "\""); } - - bot.sendMessage({ - to: channelID, - message: message - }) break; } } catch (error) { @@ -81,6 +50,16 @@ bot.on('message', function (user, userID, channelID, message, evt) { } }); +function sendMessage(client, message) { + if (message.length > 2500) { + message = 'Response was to long. Sorry' + } + bot.sendMessage({ + to: client, + message: message + }) +} + function roll(dice) { return parseInt((Math.random() * dice) + 1) } diff --git a/diceRolling.js b/diceRolling.js new file mode 100644 index 0000000..c8bebe4 --- /dev/null +++ b/diceRolling.js @@ -0,0 +1,23 @@ + + +function roll(req){ + if(typeof req !== "string"){ + return "Mollux! You don goofed!" + } + + // Splits request into segments. Example "3d6+3+5d2" => ["3d6", "+3", "+5d2"] + var segments = req.replace(/\s/g, '').match(/([+\-*/]?\d{0,}d\d{1,})|([+\-*/]\d{1,})/gi) + + var i = -1 + var results = [] + var curResult = 0 + var curMod = 1 + segments.forEach(e => { + if (e.match(/([+\-*/]?\d{0,}d\d{1,})/gi)){ // xdy + if (e.substring(0, 1)) curMod = -1 + // TODO: Do stuff + } else if (e.match(/([+\-*/]\d{1,})/gi)){ // Modifier + // TODO: Do stuff + } + }) +} \ No newline at end of file