diff --git a/package-lock.json b/package-lock.json index 3875db5..d2acf48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,6 +37,15 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, "binary-search-tree": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz", @@ -53,6 +62,11 @@ "delayed-stream": "~1.0.0" } }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -154,11 +168,42 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, + "ow": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.4.0.tgz", + "integrity": "sha512-kJNzxUgVd6EF5LoGs+s2/etJPwjfRDLXPTCfEgV8At77sRrV+PSFA8lcoW2HF15Qd455mIR2Stee/2MzDiFBDA==" + }, + "ow-lite": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ow-lite/-/ow-lite-0.0.2.tgz", + "integrity": "sha1-359QDmdAtlkKHpqWVzDUmo61l9E=" + }, "prism-media": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz", "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw==" }, + "random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/random/-/random-2.2.0.tgz", + "integrity": "sha512-4HBR4Xye4jJ41QBi6RfIaO1yKQpxVUZafQtdE6NvvjzirNlwWgsk3tkGLTbQtWUarF4ofZsUVEmWqB1TDQlkwA==", + "requires": { + "babel-runtime": "^6.26.0", + "ow": "^0.4.0", + "ow-lite": "^0.0.2", + "seedrandom": "^3.0.5" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", diff --git a/package.json b/package.json index 96b40aa..722916a 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "discord.js": "^12.5.0", "dotenv": "^8.2.0", "nedb": "^1.8.0", - "node-fetch": "^2.6.1" + "node-fetch": "^2.6.1", + "random": "^2.2.0" }, "devDependencies": { "jest": "^26.6.3" diff --git a/src/commands/HeadsOrTails.js b/src/commands/HeadsOrTails.js index 560241f..ef4c6f1 100644 --- a/src/commands/HeadsOrTails.js +++ b/src/commands/HeadsOrTails.js @@ -1,5 +1,7 @@ const globals = require('../globals'); +const Random = require('random') module.exports = async (message, args, db) => { - const coin = Math.floor(Math.random() * 2); + Random.use(message.author.tag) + const coin = Random.int(0,1) message.reply('Die Münze bleibt auf **' + globals.Coin[coin] + '** liegen.'); }; \ No newline at end of file diff --git a/src/commands/attribute.js b/src/commands/attribute.js index f9cd634..a89f345 100644 --- a/src/commands/attribute.js +++ b/src/commands/attribute.js @@ -1,4 +1,5 @@ const globals = require('../globals'); +const Random = require('random') module.exports = async (message, args, db) => { try { // user calls without arguments. @@ -40,11 +41,12 @@ module.exports = async (message, args, db) => { else { level = args[0]; } + Random.use(message.author.tag) const countOccurrences = (arr, val) => arr.reduce((a, v) => (v === val ? a + 1 : a), 0); const dice = []; - dice.push(Math.floor(Math.random() * 20) + 1); + dice.push(Random.int(1,20)); if (dice[0] == 1 || dice[0] == 20) { - dice.push(Math.floor(Math.random() * 20) + 1); + dice.push(Random.int(1,20)); } // handle crits if (countOccurrences(dice, 1) == 2) { diff --git a/src/commands/help.js b/src/commands/help.js index 9221436..2cbed93 100644 --- a/src/commands/help.js +++ b/src/commands/help.js @@ -1,38 +1,60 @@ -const cmdprefix = process.env.CMDPREFIX || '!'; +const Discord = require('discord.js') +const cmdprefix = process.env.CMDPREFIX||'!' module.exports = async (message, args, db) => { - message.author.send( - 'Hinweis: Werte in Klammern müssen nicht angegeben werden.\n\n' + - cmdprefix + '**kopf**\n' + - ' Wirf eine Münze. Kopf oder Zahl?\n\n' + + const Help = new Discord.MessageEmbed() + .setColor('#0099ff') + .setTitle('Hilfe') + .setDescription('Das sind die Befehle, die du verwenden kannst.\n' + + 'Werte in Klammern müssen nicht mit angegeben werden.') - cmdprefix + '**roll __Anzahl__ W __Augenzahl__**\n' + - ' Lass die Würfel rollen. Benötigt wird die Anzahl sowie die Augenzahl auf den Würfeln.\n\n' + - - cmdprefix + '**ep/ap __Eigenschaftswert__** \n' + - ' Du machst eine Eigenschaftsprobe / Attributprobe.\n' + - ' Du würfelst mit einem W20 auf deinen Eigenschaftswert.\n' + - ' Bei einer 1 oder 20 wird der Bestätigungswurf ausgeführt.\n\n' + - - cmdprefix + '**tp/fp __Eigenschaftswert1__ __Eigenschaftswert2__ __Eigenschaftswert3__ (Fertigkeitswert) (+Eleichtert/-Erschwert)**\n' + - ' Du machst eine Fertigkeitsprobe.\n' + - ' Es werden drei Würfel auf deine Eigenschaftswerte geworfen. Hast du Boni auf dein Talent und/oder ' + - 'ist der Wurf erleichtert oder erschwert, wird dies in die Berechnung einbezogen.\n\n' + - - cmdprefix + '**talents**\\n' + - ' Du erhälst eine Liste mit den Talentnamen, die du für ' + cmdprefix + 'talent/skill nutzen kannst.\n\n' + - - 'Folgendes funktioniert, wenn du mir deine `tda`-Datei zuschickst:\n\n' + - - cmdprefix + '**ep/ap Klugheit** oder ' + cmdprefix + '**ep/ap FF**\n\n' + - - cmdprefix + '**talent __Talentname__ (+Erleichtert/-Erschwert)**\n' + - ' siehe ' + cmdprefix + 'tp.\n' + - ' Hier musst du allerdings deine Eigenschaftswerte und Fertigkeitswerte nicht raussuchen.\n\n' + - - cmdprefix + '**skill __Talentname__**\n' + - ' Ich sage dir deinen Fertigkeitswert im Talent.\n\n' + - - cmdprefix + '**remove**\n' + - ' Ich lösche deinen Charakter aus meiner Datenbank. Schicke mir gerne erneut eine `tda`-Datei zu.' - ); + .addFields({ + name: cmdprefix + 'kopf', + value: 'Wirf eine Münze. Kopf oder Zahl?', + inline: false + }, { + name: cmdprefix + 'roll W ', + value: 'Lass die Würfel rollen. Benötigt wird die Anzahl sowie die Augenzahl auf den Würfeln.', + inline: false + }, { + name: cmdprefix + 'ep/ap ', + value: ' Du machst eine Eigenschaftsprobe / Attributprobe.\n' + + ' Du würfelst mit einem W20 auf deinen Eigenschaftswert.\n' + + ' Bei einer 1 oder 20 wird der Bestätigungswurf ausgeführt.', + inline: false + }, { + name: cmdprefix + 'tp/fp (Fertigkeitswert) (+Erleichtert/-Erschwert)', + value: ' Du machst eine Fertigkeitsprobe.\n' + + ' Es werden drei Würfel auf deine Eigenschaftswerte geworfen. Hast du Boni auf dein Talent und/oder' + + ' ist der Wurf erleichtert oder erschwert, wird dies in die Berechnung einbezogen.', + inline: false + }, { + name: cmdprefix + 'talents', + value: ' Du erhälst eine Liste mit den Talentnamen, die du für ' + + cmdprefix + 'talent/' + cmdprefix + 'skill nutzen kannst.', + inline: false + }, { + name: '\u200B', + value: '\u200B' + }, { + name: '\u200B', + value: 'Wenn du mir deine .tdc Datei zusendest, kannst du folgendes nutzen:' + }, { + name: cmdprefix + 'ep/ap [Klugheit] oder ' + cmdprefix + 'ep/ap [FF]', + value: 'siehe oben. Du brauchst deinen Wert nicht wissen.', + inline: false + }, { + name: cmdprefix + 'talent (+Erleichtert/-Erschwert)', + value: 'siehe tp. Allerdings musst du deine Werte nicht wissen.', + inline: false + }, { + name: cmdprefix + 'skill ', + value: 'Zeigt dir deinen Fertigkeitswert im jeweiligen Talent.', + inline: false + }, { + name: cmdprefix + 'remove', + value: 'Löscht deinen Charakter aus der Datenbank. Sinnvoll, wenn du mir eine neue zusenden möchtest.', + inline: false + } + ) + message.author.send(Help); }; \ No newline at end of file diff --git a/src/commands/roll.js b/src/commands/roll.js index 116b0a4..84846f7 100644 --- a/src/commands/roll.js +++ b/src/commands/roll.js @@ -1,19 +1,21 @@ // eslint-disable-next-line no-unused-vars +const globals = require('../globals') +const Random = require('random') module.exports = async (message, args, db) => { + Random.use(message.author.tag) let msg; let arguments = args.join(''); - const regex = /\s?[DdWw]\s?/; - arguments = arguments.split(regex); + arguments = arguments.split(globals.DiceRegex); if (arguments.length == 2) { let numberOfDice = arguments[0]; const diceValues = arguments[1]; const roll = []; for (let i = 0; i < numberOfDice; i++) { - const a = Math.floor(Math.random() * diceValues) + 1; + const a = Random.int(1,diceValues); roll.push(a); } - if(numberOfDice == 1) { let = 'n';} + if(numberOfDice == 1) { msg = 'n';} else { msg = ' ' + numberOfDice;} message.reply('Das sind deine Ergebnisse für deine' + msg + ' ' + diceValues + '-seitigen 🎲: ' + roll.join(', ') + '.'); } diff --git a/src/commands/show.js b/src/commands/show.js index 0c13169..3e3f61a 100644 --- a/src/commands/show.js +++ b/src/commands/show.js @@ -20,17 +20,4 @@ module.exports = async (message, args, db) => { catch (e) { throw e; } - - - /* db.query('SELECT * FROM dsageld WHERE userName = ' + '"' + message.author.tag + '"', function(err, row) { //the row is the user's data - if(row && err) { - message.reply('Es gab einen Fehler.'); - } - if(row.length < 1) { //if the user is not in the database - message.reply('Es existiert kein Eintrag für dich füge ihn mit !create hinzu.'); - } else if(row.length >= 1){ - message.reply('du hast: ' + row[0].GD + ' GD, ' + row[0].ST + ' ST, ' + row[0].BH + ' BH, ' + row[0].EK + ' EK.' + row[0].LP + ' LeP.'); - } - } - );*/ }; \ No newline at end of file diff --git a/src/commands/talent.js b/src/commands/talent.js index 2787d8d..f7d23fb 100644 --- a/src/commands/talent.js +++ b/src/commands/talent.js @@ -1,4 +1,5 @@ const globals = require('../globals'); +const Random = require('random') module.exports = async (message, args, db) => { try { db.find({ @@ -6,7 +7,14 @@ module.exports = async (message, args, db) => { }, function(err, docs) { if (!docs.length > 0) {message.reply('Sorry, Für dich habe ich keinen Eintrag 😥');} else { - if (!args) message.reply('Sorry, du musst mir schon etwas zum prüfen geben.'); + + if (!args){ + message.reply('Sorry, du musst mir schon etwas zum prüfen geben.'); + return + } + + Random.use(message.author.tag) + if (args[1]) { var erschwernis = parseInt(args[1]); } @@ -47,13 +55,9 @@ module.exports = async (message, args, db) => { if (docs[0].character.attributes[val].id == kuerzel.id) values.push(docs[0].character.attributes[val].level); } } - // message.reply(`Du musst mit ${result.values.join(", ")} würfeln. Die werte sind: ${values.join(", ")}. Dein Bonus auf ${result.name}: ${bonus}`) - - // roll dice. for (i = 1; i <= 3; i++) { - const a = Math.floor(Math.random() * 20 + 1); - roll.push(a); + roll.push(Random.int(1,20)); } // compare results for (i = 0; i < 3; i++) { @@ -89,8 +93,6 @@ module.exports = async (message, args, db) => { 'Das waren deine 🎲: ' + roll.join(', ') + '. Damit hast du ' + ok + '/3 Proben bestanden. Dein Bonus: ' + bonus + '/' + bonus_orig + '.', ); } - - } }); } diff --git a/src/commands/tp.js b/src/commands/tp.js index 8ca182f..b350ee3 100644 --- a/src/commands/tp.js +++ b/src/commands/tp.js @@ -1,10 +1,12 @@ // eslint-disable-next-line no-unused-vars +const Random = require('random') module.exports = async (message, args, db) => { if (args.length < 3) { message.reply('Der Talentwurf funktioniert so:\n' + '!tp Eigenschaftswert1 Eigenschaftswert2 Eigenschaftswert3 [Bonus] [Erschwernis]'); } else { + Random.use(message.author.tag) const roll = []; if (args[3]) { var bonus = parseInt(args[3]); @@ -19,8 +21,7 @@ module.exports = async (message, args, db) => { erschwernis = 0; } for (i = 1; i <= 3; i++) { - const a = Math.floor(Math.random() * 20 + 1); - roll.push(a); + roll.push(Random.int(1,20)); } let ok = 0; let patzer = 0; diff --git a/src/globals.js b/src/globals.js index b37872d..a110030 100644 --- a/src/globals.js +++ b/src/globals.js @@ -1,9 +1,8 @@ const money = [{ 'GD': 'Golddukaten', 'ST': 'Silbertaler', - - }]; +const DiceRegex = /\s?[DdWw]\s?/; const Coin = ['Kopf', 'Zahl']; const Werte = [ { id: 'mut', kuerzel: 'MU', name: 'Mut' }, @@ -86,4 +85,4 @@ const Talente = [ { id: 'stoffbearbeitung', name: 'Stoffbearbeitung', values: ['KL', 'FF', 'FF'], categoryid: 4 }, ]; -module.exports = { Werte, Talente, Coin, TalentKategorien }; \ No newline at end of file +module.exports = { Werte, Talente, Coin, TalentKategorien, DiceRegex }; \ No newline at end of file diff --git a/src/index.js b/src/index.js index b637961..450ab9f 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,6 @@ require('dotenv').config(); const Discord = require('discord.js'); const client = new Discord.Client(); -const SERVERID = process.env.SERVERID; const commandHandler = require('./commands'); client.on('message', commandHandler); @@ -23,4 +22,4 @@ client.on('disconnect', message => { client.on('reconnecting', message => { console.log('User Reconnecting'); -}); \ No newline at end of file +});