Major restructuring, set up regex testing
This commit is contained in:
parent
08a4541b90
commit
2c2de58138
@ -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
61
bot.js
@ -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
23
diceRolling.js
Normal 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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user