Improved logging

This commit is contained in:
Ådne E. Moldesæter 2019-12-23 10:09:29 +01:00
parent 5ec0becbb7
commit a67aca7363
3 changed files with 66 additions and 48 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
node_modules/ node_modules/
auth.json auth.json
error.log
verbose.log

45
bot.js
View File

@ -1,14 +1,18 @@
var Discord = require('discord.io'); var Discord = require('discord.io');
var logger = require('winston'); var winston = require('winston');
var fs = require('fs'); var fs = require('fs');
var diceRoller = require('./diceRolling.js'); var diceRoller = require('./diceRolling.js');
const logger = winston.createLogger({
logger.remove(logger.transports.Console); level: 'debug',
logger.add(new logger.transports.Console, { format: winston.format.json(),
colorize: true defaultMeta: { service: 'user-service' },
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'verbose.log', level: 'verbose' }),
]
}); });
logger.level = 'debug';
const get_auth = () => { const get_auth = () => {
if (process.env.DISCORD_TOKEN != undefined) { if (process.env.DISCORD_TOKEN != undefined) {
@ -21,7 +25,6 @@ const get_auth = () => {
}; };
var auth = get_auth(); var auth = get_auth();
var bot = new Discord.Client({ var bot = new Discord.Client({
token: auth.token, token: auth.token,
autorun: true autorun: true
@ -29,8 +32,7 @@ var bot = new Discord.Client({
bot.on('ready', function (evt) { bot.on('ready', function (evt) {
logger.info('Connected'); logger.info('Connected');
logger.info('Logged in as: '); logger.info('Logged in as: ' + bot.username + ' - (' + bot.id + ')');
logger.info(bot.username + ' - (' + bot.id + ')');
}); });
bot.on('message', function (user, userID, channelID, message, evt) { bot.on('message', function (user, userID, channelID, message, evt) {
@ -46,10 +48,18 @@ bot.on('message', function (user, userID, channelID, message, evt) {
sendMessage(channelID, 'Hello, World!'); sendMessage(channelID, 'Hello, World!');
break; break;
case 'roll': case 'roll':
if (/([+\-]?\d{0,}d\d{1,})([+\-*x/]\d{1,}){0,}/gi.test(message.substring(6).replace(/\s/g, ''))) { if (message.length < 7) {
sendMessage( sendMessage(
channelID, channelID,
message.substring(6) + ': ' + diceRoller.roll(message.substring(6)) 'Can\'t roll nothing'
)
break;
}
if (/([+\-]?\d{0,}d\d{1,})([+\-*x/]\d{1,}){0,}/gi.test(message.substring(6).replace(/\s/g, ''))) {
var res = (message.substring(6) + ': ' + diceRoller.roll(message.substring(6))).replace('*', '\\*')
sendMessage(
channelID,
res
); );
} else { } else {
sendMessage(channelID, "I don't recognize this: \"" sendMessage(channelID, "I don't recognize this: \""
@ -61,14 +71,21 @@ bot.on('message', function (user, userID, channelID, message, evt) {
} }
break; break;
} }
} catch (error) { } catch (e) {
console.log(error); error(e, channelID);
} }
} }
}); });
function error(error, channelID){
var res = "Sorry, something went wrong.";
sendMessage(channelID, res);
logger.error(error)
}
function sendMessage(client, message) { function sendMessage(client, message) {
if (message.length > 2500) { if (message.length > 2000) {
message = 'Response was to long. Sorry'; message = 'Response was to long. Sorry';
} }
bot.sendMessage({ bot.sendMessage({

View File

@ -2,80 +2,79 @@
module.exports = { module.exports = {
roll: function (req) { roll: function (req) {
if (typeof req !== "string") { if (typeof req !== "string") {
return "Mollux! You don goofed!" return "<@138725786067664897>! You don goofed!";
} }
// Splits request into segments. Example "3d6+3+5d2" => ["3d6", "+3", "+5d2"] // 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 segments = req.replace(/\s/g, '').match(/([+\-]?\d{0,}d\d{1,})|([+\-*/x]\d{1,})/gi);
var message = ''; var message = '';
var i = -1 var i = -1;
var results = [] var results = [];
var curResult = 0 var curResult = 0;
var curMod = 1 var curMod = 1;
segments.forEach(e => { segments.forEach(e => {
if (e.match(/([+\-]?\d{0,}d\d{1,})/gi)) { // xdy if (e.match(/([+\-]?\d{0,}d\d{1,})/gi)) { // xdy
// if not first add previous result and resetting curResult // if not first add previous result and resetting curResult
if (i >= 0) { if (i >= 0) {
curResult *= curMod curResult *= curMod;
results[i] = curResult results[i] = curResult;
curResult = 0 curResult = 0;
} }
i++; i++;
// Set modifier for dice group // Set modifier for dice group
curMod = (e.substring(0, 1) === '-') ? -1 : 1 curMod = (e.substring(0, 1) === '-') ? -1 : 1;
// dice[0] = number of rolls, dice[1] = sides of dice rolled // dice[0] = number of rolls, dice[1] = sides of dice rolled
var dice = e.replace(/[+\-]?/, '').split(/d/i) var dice = e.replace(/[+\-]?/, '').split(/d/i);
var rolls = [] var rolls = [];
for (var l = 0; l < parseInt(dice[0] === '' ? 1 : dice[0]); l++) { for (var l = 0; l < parseInt(dice[0] === '' ? 1 : dice[0]); l++) {
rolls[l] = rollDice(dice[1]) rolls[l] = rollDice(dice[1]);
curResult += rolls[l] curResult += rolls[l];
} }
// add result to message // add result to message
var sign = e.match(/[+\-]/) var sign = e.match(/[+\-]/);
message += ((sign === null) ? ' ' : ' ' + sign) + '[' + rolls.toString() + ']' message += ((sign === null) ? ' ' : ' ' + sign) + '[' + rolls.toString() + ']';
} else if (e.match(/([+\-*/]\d{1,})/gi)) { // Modifier } else if (e.match(/([+\-*/x]\d{1,})/gi)) { // Modifier
switch (e.substring(0, 1)) { switch (e.substring(0, 1)) {
case '+': case '+':
curResult += parseInt(e.substring(1)) curResult += parseInt(e.substring(1));
break; break;
case '-': case '-':
curResult -= parseInt(e.substring(1)) curResult -= parseInt(e.substring(1));
break; break;
case '*': case '*':
case 'x': case 'x':
curResult *= parseInt(e.substring(1)) curResult *= parseInt(e.substring(1));
break; break;
case '/': case '/':
curResult /= parseInt(e.substring(1)) curResult /= parseInt(e.substring(1));
break; break;
} }
message += e message += e;
} }
}) })
curResult *= curMod curResult *= curMod;
results[i] = curResult results[i] = curResult;
// Adding the sum to the message // Adding the sum to the message
var sum = 0 var sum = 0;
if (results.length > 1){ if (results.length > 1){
sum = results.reduce(getSum) sum = results.reduce(getSum);
} else if (results.length === 1){ } else if (results.length === 1){
sum = results[0] sum = results[0];
} }
message += ' = ' + sum message += ' = ' + sum;
console.log(results.toString()) if (message.length > 2000)
console.log(i) message = "Response was to long. Sum: " + sum;
console.log(sum)
return message return message;
} }
} }