Major restructuring, set up regex testing

This commit is contained in:
Ådne E. Moldesæter 2019-05-17 23:01:12 +02:00
parent 08a4541b90
commit 2c2de58138
3 changed files with 45 additions and 43 deletions

View File

@ -13,5 +13,5 @@ Rollux is a simple dice rolling bot for discord
"token": "{your token}" "token": "{your token}"
} }
``` ```
3. Install node.js and run the following command: `npm install` 3. Install node.js and npm, then run the following command: `npm install`
4. Run it with node.js 4. Run it with `node bot.js`

61
bot.js
View File

@ -1,6 +1,7 @@
var Discord = require('discord.io'); var Discord = require('discord.io');
var logger = require('winston'); var logger = require('winston');
var auth = require('./auth.json'); var auth = require('./auth.json');
var diceRoller = require('./diceRolling.js')
logger.remove(logger.transports.Console); logger.remove(logger.transports.Console);
logger.add(new logger.transports.Console, { logger.add(new logger.transports.Console, {
@ -29,50 +30,18 @@ bot.on('message', function (user, userID, channelID, message, evt) {
switch (cmd) { switch (cmd) {
case 'hi': case 'hi':
bot.sendMessage({ sendMessage(channelID, 'Hello, World!')
to: channelID,
message: 'Hello, World!'
})
case 'roll': case 'roll':
// dice[0] = amount, dice[1] = what dice if (/([+\-*/]?\d{0,}d\d{1,})([+\-*/]\d{1,}){0,}/gi.test(message.substring(6).replace(/\s/g, ''))) {
var dice = args[1].toLowerCase().split(/[d/x+\-*]/g) sendMessage(channelID, diceRoller.roll(message.substring(6)))
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])
} else { } else {
var results = [] sendMessage(channelID, "I don't recognize this: \""
message = args[1] + ': [' + message
for (i = 0; i < dice[0]; i++) { .substring(6)
results[i] = roll(dice[1]) .replace(/([+\-*/]?\d{0,}d\d{1,})([+\-*/]\d{1,}){0,}/gi, "")
.toString()
+ "\"");
} }
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
}
bot.sendMessage({
to: channelID,
message: message
})
break; break;
} }
} catch (error) { } 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) { function roll(dice) {
return parseInt((Math.random() * dice) + 1) return parseInt((Math.random() * dice) + 1)
} }

23
diceRolling.js Normal file
View File

@ -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
}
})
}