diff --git a/src/commands/attribute.js b/src/commands/attribute.js new file mode 100644 index 0000000..027900e --- /dev/null +++ b/src/commands/attribute.js @@ -0,0 +1,77 @@ +const globals = require('../globals') +module.exports = async (message, args, db) => { + try { + // user calls without arguments. + if (!args) { + message.reply('Bitte gib mir ein Attributswert, oder das Attribut auf welches du würfeln möchtest.') + return + } + + let level = 8 + // user calls with text. + if (isNaN(args[0])) { + db.find({ + user: message.author.tag, + }, function (err, docs) { + if (!docs.length > 0) { + message.reply('Sorry, Für dich habe ich keinen Eintrag 😥\n' + + 'Bitte gib mir den Attributswert, auf welchen du würfeln möchtest.'); + return + } else { + let attributename + // try to get id of short formatted attributes. + if (args[0].length == 2) { + for (let i in globals.Werte) { + if (globals.Werte[i].kuerzel == args[0].toUpperCase()) attributename = globals.Werte[i].id; + } + } else { + attributename = args[0].toLowerCase(); + } + + for (let i in docs[0].character.attributes) { + if (docs[0].character.attributes[i].id == attributename) level = docs[0].character.attributes[i].level; + } + } + }); + } else { + level = args[0]; + } + + const countOccurrences = (arr, val) => arr.reduce((a, v) => (v === val ? a + 1 : a), 0); + let dice = [] + dice.push(Math.floor(Math.random() * 20) + 1); + if (dice[0] == 1 || dice[0] == 20) { + dice.push(Math.floor(Math.random() * 20) + 1); + } + + // handle crits + if (countOccurrences(dice, 1) == 2) { + message.reply('Du hast einen kritischen Erfolg erzielt (' + dice.join(', ') + ')! 🎉🥳🎆'); + return + } else if (countOccurrences(dice, 20) == 2) { + message.reply('Du hast einen Patzer (' + dice.join(', ') + ')! 😭 Viel Erfolg beim nächsten mal!') + return + } + + if ((dice.length == 2 && dice[1] <= level) || (dice.length == 1 && dice[0] <= level)) { + if (attributename) { + message.reply('Du hast die Probe auf ' + attributename + ' (Stufe ' + level + ') bestanden.\n' + + 'Deine 🎲: ' + dice.join(', ')) + } else { + message.reply('Du hast die Probe (Stufe ' + level + ') bestanden.\n' + + 'Deine 🎲: ' + dice.join(', ')) + } + } else { + if (attributename) { + message.reply('Du hast die Probe auf ' + attributename + ' (Stufe ' + level + ') leider nicht bestanden 😢.\n' + + 'Deine 🎲: ' + dice.join(', ')) + } else { + message.reply('Du hast die Probe (Stufe ' + level + ') leider nicht bestanden 😢.\n' + + 'Deine 🎲: ' + dice.join(', ')) + } + } + +} catch (e) { + throw e; +} +}; \ No newline at end of file diff --git a/src/commands/index.js b/src/commands/index.js index 12a8b5f..a8392b8 100644 --- a/src/commands/index.js +++ b/src/commands/index.js @@ -9,7 +9,8 @@ const tp = require('./tp'); const talent = require('./talent'); const skill = require('./skill'); const createFromFile = require('./createFromFile'); -const {münze, kopf, zahl, heads, tails} = require('./HeadsOrTails') +const {münze, kopf, zahl, heads, tails} = require('./HeadsOrTails'); +const {attribute, eigenschaft, e, a} = require('./attribute') require('dotenv').config(); const cmdprefix = process.env.CMDPREFIX || '!'; @@ -27,7 +28,11 @@ const commands = { kopf, zahl, heads, - tails + tails, + e, + a, + attribute, + eigenschaft }; const Datastore = require('nedb'), db = new Datastore({