Merge pull request #2 from TobenderZephyr/development
Merge current development branch into master.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,5 +2,4 @@ node_modules
|
||||
.env
|
||||
.eslintrc.js
|
||||
.eslintrc.json
|
||||
dsabot.db
|
||||
|
||||
|
BIN
_public_html/DSA5_Logo_small.png
Normal file
BIN
_public_html/DSA5_Logo_small.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
45
package-lock.json
generated
45
package-lock.json
generated
@ -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",
|
||||
|
@ -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"
|
||||
|
7
src/commands/HeadsOrTails.js
Normal file
7
src/commands/HeadsOrTails.js
Normal file
@ -0,0 +1,7 @@
|
||||
const globals = require('../globals');
|
||||
const Random = require('random')
|
||||
module.exports = async (message, args, db) => {
|
||||
Random.use(message.author.tag)
|
||||
const coin = Random.int(0,1)
|
||||
message.reply('Die Münze bleibt auf **' + globals.Coin[coin] + '** liegen.');
|
||||
};
|
83
src/commands/attribute.js
Normal file
83
src/commands/attribute.js
Normal file
@ -0,0 +1,83 @@
|
||||
const globals = require('../globals');
|
||||
const Random = require('random')
|
||||
module.exports = async (message, args, db) => {
|
||||
try {
|
||||
// user calls without arguments.
|
||||
if (!args[0]) {
|
||||
message.reply('Bitte gib mir ein Attributswert, oder das Attribut auf welches du würfeln möchtest.');
|
||||
return;
|
||||
}
|
||||
let level = 8;
|
||||
let attributename;
|
||||
|
||||
await db.find({
|
||||
user: message.author.tag,
|
||||
}, async function(err, docs) {
|
||||
|
||||
// user calls with text. need to gather info from database
|
||||
if (isNaN(args[0])) {
|
||||
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 {
|
||||
// try to get id of short formatted attributes.
|
||||
if (args[0].length == 2) {
|
||||
for (const i in globals.Werte) {
|
||||
if (globals.Werte[i].kuerzel == args[0].toUpperCase()) {
|
||||
attributename = globals.Werte[i].id;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
attributename = args[0].toLowerCase();
|
||||
}
|
||||
for (const 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];
|
||||
}
|
||||
Random.use(message.author.tag)
|
||||
const countOccurrences = (arr, val) => arr.reduce((a, v) => (v === val ? a + 1 : a), 0);
|
||||
const dice = [];
|
||||
dice.push(Random.int(1,20));
|
||||
if (dice[0] == 1 || dice[0] == 20) {
|
||||
dice.push(Random.int(1,20));
|
||||
}
|
||||
// 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[0] != 20 && 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;
|
||||
}
|
||||
};
|
60
src/commands/help.js
Normal file
60
src/commands/help.js
Normal file
@ -0,0 +1,60 @@
|
||||
const Discord = require('discord.js')
|
||||
const cmdprefix = process.env.CMDPREFIX||'!'
|
||||
module.exports = async (message, args, db) => {
|
||||
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.')
|
||||
|
||||
.addFields({
|
||||
name: cmdprefix + 'kopf',
|
||||
value: 'Wirf eine Münze. Kopf oder Zahl?',
|
||||
inline: false
|
||||
}, {
|
||||
name: cmdprefix + 'roll <Anzahl> W <Augenzahl>',
|
||||
value: 'Lass die Würfel rollen. Benötigt wird die Anzahl sowie die Augenzahl auf den Würfeln.',
|
||||
inline: false
|
||||
}, {
|
||||
name: cmdprefix + 'ep/ap <Eigenschaftswert>',
|
||||
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 <Eigenschaftswert1> <Eigenschaftswert2> <Eigenschaftswert3> (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 <Talentname> (+Erleichtert/-Erschwert)',
|
||||
value: 'siehe tp. Allerdings musst du deine Werte nicht wissen.',
|
||||
inline: false
|
||||
}, {
|
||||
name: cmdprefix + 'skill <Talentname>',
|
||||
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);
|
||||
};
|
@ -9,6 +9,14 @@ const tp = require('./tp');
|
||||
const talent = require('./talent');
|
||||
const skill = require('./skill');
|
||||
const createFromFile = require('./createFromFile');
|
||||
const kopf = require('./HeadsOrTails');
|
||||
const zahl = require('./HeadsOrTails');
|
||||
const heads = require('./HeadsOrTails');
|
||||
const tails = require('./HeadsOrTails');
|
||||
const ep = require('./attribute');
|
||||
const ap = require('./attribute');
|
||||
const help = require('./help')
|
||||
const talents = require('./talents')
|
||||
require('dotenv').config();
|
||||
|
||||
const cmdprefix = process.env.CMDPREFIX || '!';
|
||||
@ -22,7 +30,16 @@ const commands = {
|
||||
skill,
|
||||
tp,
|
||||
talent,
|
||||
talents,
|
||||
kopf,
|
||||
zahl,
|
||||
heads,
|
||||
tails,
|
||||
ep,
|
||||
ap,
|
||||
help
|
||||
};
|
||||
|
||||
const Datastore = require('nedb'),
|
||||
db = new Datastore({
|
||||
filename: 'data/dsabot.db',
|
||||
@ -30,7 +47,7 @@ const Datastore = require('nedb'),
|
||||
});
|
||||
|
||||
module.exports = async (message) => {
|
||||
console.log(`${new Date().toUTCString()} ${message.author.tag} (size: ${message.attachments.size})`)
|
||||
console.log(`${new Date().toUTCString()} ${message.author.tag} (size: ${message.attachments.size})`);
|
||||
if ((message.attachments.size > 0) && message.channel.type == 'dm' && !message.author.bot) {
|
||||
try {
|
||||
const response = await fetch(message.attachments.first().url);
|
||||
|
@ -1,53 +1,6 @@
|
||||
module.exports = async (message, args, db) => {
|
||||
let n;
|
||||
|
||||
if(!isNaN(args[0]) && (args[1] === 'GD' || args[1] === 'ST' || args[1] === 'BH' || args[1] === 'EK')) {
|
||||
// eslint-disable-next-line no-undef
|
||||
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(typeof (row) == 'undefined') { // 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 the user is in the database
|
||||
|
||||
if(args[1] === 'GD') {
|
||||
n = parseInt(row[0].GD, 10) - parseInt(args[0], 10);
|
||||
}
|
||||
else if(args[1] === 'ST') {
|
||||
n = parseInt(row[0].ST, 10) - parseInt(args[0], 10);
|
||||
}
|
||||
else if(args[1] === 'BH') {
|
||||
n = parseInt(row[0].BH, 10) - parseInt(args[0], 10);
|
||||
}
|
||||
else if(args[1] === 'EK') {
|
||||
n = parseInt(row[0].EK, 10) - parseInt(args[0], 10);
|
||||
}
|
||||
else if(args[1] === 'LP') {
|
||||
n = parseInt(row[0].EK, 10) - parseInt(args[0], 10);
|
||||
}
|
||||
|
||||
if(n >= 0) {
|
||||
// eslint-disable-next-line no-undef
|
||||
db.query('UPDATE dsageld SET' + '`' + args[1] + '`' + ' = (' + n + ') WHERE userName = ' + '"' + message.author.tag + '"');
|
||||
// eslint-disable-next-line no-undef
|
||||
db.query('SELECT * FROM dsageld WHERE userName = ' + '"' + message.author.tag + '"', function(err, row) { // the row is the user's data
|
||||
message.reply(args[0] + args[1] + ' abgezogen, du hast: ' + row[0].GD + 'GD, ' + row[0].ST + 'ST, ' + row[0].BH + 'BH, ' + row[0].EK + 'EK,' + row[0].LP + 'LeP.');
|
||||
});
|
||||
}
|
||||
else if(n < 0 && !(args[1] === 'LP')) {
|
||||
message.reply('du hast nicht genügend ' + args[1]);
|
||||
}
|
||||
else if(n < 0 && args[1] === 'LP') {
|
||||
// eslint-disable-next-line no-undef
|
||||
db.query('UPDATE dsageld SET' + '`' + args[1] + '`' + ' = (' + n + ') WHERE userName = ' + '"' + message.author.tag + '"');
|
||||
// eslint-disable-next-line no-undef
|
||||
db.query('SELECT * FROM dsageld WHERE userName = ' + '"' + message.author.tag + '"', function(err, row) { // the row is the user's data
|
||||
message.reply('Deine LeP sind unter Null: ' + n + ' LeP.');
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
db.remove({ user: message.author.tag }, {}, function(err, numRemoved) {
|
||||
message.reply('Ich habe deine Daten gelöscht.\n' +
|
||||
'Wenn dir danach ist, kannst du mir gerne wieder eine neue Datei zusenden.');
|
||||
});
|
||||
};
|
@ -1,18 +1,26 @@
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const globals = require('../globals')
|
||||
const Random = require('random')
|
||||
module.exports = async (message, args, db) => {
|
||||
if (!args.length == 3) {
|
||||
message.reply('Du hast die Würfel nicht korrekt angegeben.');
|
||||
}
|
||||
Random.use(message.author.tag)
|
||||
let msg;
|
||||
let arguments = args.join('');
|
||||
arguments = arguments.split(globals.DiceRegex);
|
||||
|
||||
else if(!isNaN(args[0]) && !isNaN(args[2]) && args[0] > 0 && args[2] > 0) {
|
||||
if (arguments.length == 2) {
|
||||
let numberOfDice = arguments[0];
|
||||
const diceValues = arguments[1];
|
||||
const roll = [];
|
||||
for (let i = 0; i < args[0]; i++) {
|
||||
const a = Math.floor(Math.random() * args[2]) + 1;
|
||||
for (let i = 0; i < numberOfDice; i++) {
|
||||
const a = Random.int(1,diceValues);
|
||||
roll.push(a);
|
||||
}
|
||||
message.reply('Deine Würfe(' + args[0] + 'W' + args[2] + '): ' + roll.join(', ') + '.');
|
||||
if(numberOfDice == 1) { msg = 'n';}
|
||||
else { msg = ' ' + numberOfDice;}
|
||||
message.reply('Das sind deine Ergebnisse für deine' + msg + ' ' + diceValues + '-seitigen 🎲: ' + roll.join(', ') + '.');
|
||||
}
|
||||
else {
|
||||
message.reply('Du hast die Würfel nicht korrekt angegeben.');
|
||||
message.reply('Leider kann ich damit nichts anfangen. Bitte noch einmal so probieren:\n' +
|
||||
'!roll <Anzahl> W <Augenzahl>');
|
||||
}
|
||||
};
|
@ -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.');
|
||||
}
|
||||
}
|
||||
);*/
|
||||
};
|
@ -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]);
|
||||
}
|
||||
@ -15,15 +23,31 @@ module.exports = async (message, args, db) => {
|
||||
}
|
||||
const values = [];
|
||||
const roll = [];
|
||||
let found = false;
|
||||
let talent
|
||||
let bonus = 0;
|
||||
let ok = 0;
|
||||
let patzer = 0;
|
||||
let crit = 0;
|
||||
for (i in docs[0].character.skills) {
|
||||
if (docs[0].character.skills[i].id == args[0]) bonus = docs[0].character.skills[i].level;
|
||||
|
||||
for (i in globals.Talente)
|
||||
{
|
||||
if (globals.Talente[i].id.toLowerCase() == args[0].toLowerCase()||globals.Talente[i].name.toLowerCase()==args[0].toLowerCase()) {
|
||||
found=true
|
||||
talent = globals.Talente[i].id
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
message.reply('Sorry, das Talent ist mir unbekannt.');
|
||||
return;
|
||||
}
|
||||
for (i in docs[0].character.skills) {
|
||||
if (docs[0].character.skills[i].id == talent) {bonus = docs[0].character.skills[i].level; found = true;}
|
||||
}
|
||||
|
||||
const bonus_orig = bonus;
|
||||
const result = globals.Talente.find(talent => talent.id === args[0]);
|
||||
const result = globals.Talente.find(t => t.id === talent);
|
||||
|
||||
for (i in result.values) {
|
||||
const kuerzel = globals.Werte.find(wert => wert.kuerzel === result.values[i]);
|
||||
@ -31,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++) {
|
||||
@ -73,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 + '.',
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
26
src/commands/talents.js
Normal file
26
src/commands/talents.js
Normal file
@ -0,0 +1,26 @@
|
||||
const globals = require('../globals')
|
||||
const Discord = require('discord.js')
|
||||
module.exports = async (message, args, db) => {
|
||||
let fields = []
|
||||
for (let i in globals.TalentKategorien) {
|
||||
let ability = []
|
||||
for (let a in globals.Talente) {
|
||||
if(globals.Talente[a].categoryid == i) {
|
||||
ability.push(globals.Talente[a].id.charAt(0).toUpperCase() + globals.Talente[a].id.slice(1));
|
||||
}
|
||||
}
|
||||
ability.sort()
|
||||
fields.push(ability)
|
||||
}
|
||||
|
||||
const Embed = new Discord.MessageEmbed()
|
||||
.setColor('#0099ff')
|
||||
.setTitle('Talentübersicht')
|
||||
.setDescription('Das sind die Talente, die ich kenne:')
|
||||
for (let i in fields) {
|
||||
Embed.addField(globals.TalentKategorien[i], fields[i].join('\n'), true);
|
||||
}
|
||||
message.author.send(
|
||||
Embed
|
||||
);
|
||||
};
|
@ -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;
|
||||
|
122
src/globals.js
122
src/globals.js
@ -1,10 +1,9 @@
|
||||
const money = [{
|
||||
'GD': 'Golddukaten',
|
||||
'ST': 'Silbertaler',
|
||||
|
||||
|
||||
}];
|
||||
|
||||
const DiceRegex = /\s?[DdWw]\s?/;
|
||||
const Coin = ['Kopf', 'Zahl'];
|
||||
const Werte = [
|
||||
{ id: 'mut', kuerzel: 'MU', name: 'Mut' },
|
||||
{ id: 'klugheit', kuerzel: 'KL', name: 'Klugheit' },
|
||||
@ -15,74 +14,75 @@ const Werte = [
|
||||
{ id: 'konstitution', kuerzel: 'KO', name: 'Konstitution' },
|
||||
{ id: 'koerperkraft', kuerzel: 'KK', name: 'Körperkraft' },
|
||||
];
|
||||
const TalentKategorien = ['Körpertalente','Gesellschaftstalente','Naturtalente','Wissenstalente','Handwerkstalente']
|
||||
|
||||
const Talente = [
|
||||
// Körpertalente
|
||||
{ id: 'fliegen', name: 'Fliegen', values: ['MU', 'IN', 'GE'] },
|
||||
{ id: 'gaukeleien', name: 'Gaugekleien', values: ['MU', 'CH', 'FF'] },
|
||||
{ id: 'klettern', name:'Klettern', values: ['MU', 'GE', 'KK'] },
|
||||
{ id: 'koerperbeherrschung', name: 'Körperbeherrschung', values: ['GE', 'GE', 'KO'] },
|
||||
{ id: 'kraftakt', name: 'Kraftakt', values: ['KO', 'KK', 'KK'] },
|
||||
{ id: 'reiten', name: 'Reiten', values: ['CH', 'GE', 'KK'] },
|
||||
{ id: 'schwimmen', name: 'Schwimmen', values: ['GE', 'KO', 'KK'] },
|
||||
{ id: 'selbstbeherrschung', name: 'Selbstbeherrschung', values: ['MU', 'MU', 'KO'] },
|
||||
{ id: 'singen', name: 'Singen', values: ['KL', 'CH', 'KO'] },
|
||||
{ id: 'sinnesschaerfe', name: 'Sinnesschärfe', values: ['KL', 'IN', 'IN'] },
|
||||
{ id: 'tanzen', name: 'Tanzen', values: ['KL', 'CH', 'GE'] },
|
||||
{ id: 'taschendiebstahl', name: 'Taschendiebstahl', values: ['MU', 'FF', 'GE'] },
|
||||
{ id: 'verbergen', name: 'Verbergen', values: ['MU', 'IN', 'GE'] },
|
||||
{ id: 'zechen', name: 'Zechen', values: ['KL', 'KO', 'KK'] },
|
||||
{ id: 'fliegen', name: 'Fliegen', values: ['MU', 'IN', 'GE'], categoryid: 0 },
|
||||
{ id: 'gaukeleien', name: 'Gaugekleien', values: ['MU', 'CH', 'FF'], categoryid: 0 },
|
||||
{ id: 'klettern', name:'Klettern', values: ['MU', 'GE', 'KK'], categoryid: 0 },
|
||||
{ id: 'koerperbeherrschung', name: 'Körperbeherrschung', values: ['GE', 'GE', 'KO'], categoryid: 0 },
|
||||
{ id: 'kraftakt', name: 'Kraftakt', values: ['KO', 'KK', 'KK'], categoryid: 0 },
|
||||
{ id: 'reiten', name: 'Reiten', values: ['CH', 'GE', 'KK'], categoryid: 0 },
|
||||
{ id: 'schwimmen', name: 'Schwimmen', values: ['GE', 'KO', 'KK'], categoryid: 0 },
|
||||
{ id: 'selbstbeherrschung', name: 'Selbstbeherrschung', values: ['MU', 'MU', 'KO'], categoryid: 0 },
|
||||
{ id: 'singen', name: 'Singen', values: ['KL', 'CH', 'KO'], categoryid: 0 },
|
||||
{ id: 'sinnesschaerfe', name: 'Sinnesschärfe', values: ['KL', 'IN', 'IN'], categoryid: 0 },
|
||||
{ id: 'tanzen', name: 'Tanzen', values: ['KL', 'CH', 'GE'], categoryid: 0 },
|
||||
{ id: 'taschendiebstahl', name: 'Taschendiebstahl', values: ['MU', 'FF', 'GE'], categoryid: 0 },
|
||||
{ id: 'verbergen', name: 'Verbergen', values: ['MU', 'IN', 'GE'], categoryid: 0 },
|
||||
{ id: 'zechen', name: 'Zechen', values: ['KL', 'KO', 'KK'], categoryid: 0 },
|
||||
|
||||
// Gesellschaftstalente
|
||||
{ id: 'bekehrenueberzeugen', name: 'Bekehren & Überzeugen', values: ['MU', 'KL', 'CH'] },
|
||||
{ id: 'betoeren', name: 'Betören', values: ['MU', 'CH', 'CH'] },
|
||||
{ id: 'einschuechtern', name: 'Einschüchtern', values: ['MU', 'IN', 'CH'] },
|
||||
{ id: 'etikette', name: 'Etikette', values: ['KL', 'IN', 'CH'] },
|
||||
{ id: 'gassenwissen', name: 'Gassenwissen', values: ['KL', 'IN', 'CH'] },
|
||||
{ id: 'menschenkenntnis', name: 'Menschenkenntnis', values: ['KL', 'IN', 'CH'] },
|
||||
{ id: 'ueberreden', name: 'Überreden', values: ['MU', 'IN', 'CH'] },
|
||||
{ id: 'willenskraft', name: 'Willenskraft', values: ['MU', 'IN', 'CH'] },
|
||||
{ id: 'bekehrenueberzeugen', name: 'Bekehren & Überzeugen', values: ['MU', 'KL', 'CH'], categoryid: 1 },
|
||||
{ id: 'betoeren', name: 'Betören', values: ['MU', 'CH', 'CH'], categoryid: 1 },
|
||||
{ id: 'einschuechtern', name: 'Einschüchtern', values: ['MU', 'IN', 'CH'], categoryid: 1 },
|
||||
{ id: 'etikette', name: 'Etikette', values: ['KL', 'IN', 'CH'], categoryid: 1 },
|
||||
{ id: 'gassenwissen', name: 'Gassenwissen', values: ['KL', 'IN', 'CH'], categoryid: 1 },
|
||||
{ id: 'menschenkenntnis', name: 'Menschenkenntnis', values: ['KL', 'IN', 'CH'], categoryid: 1 },
|
||||
{ id: 'ueberreden', name: 'Überreden', values: ['MU', 'IN', 'CH'], categoryid: 1 },
|
||||
{ id: 'willenskraft', name: 'Willenskraft', values: ['MU', 'IN', 'CH'], categoryid: 1 },
|
||||
|
||||
// Naturtalente
|
||||
{ id: 'faehrtensuchen', name: 'Fährtensuchen', values: ['MU', 'IN', 'GE'] },
|
||||
{ id: 'fesseln', name: 'Fesseln', values: ['KL', 'FF', 'KK'] },
|
||||
{ id: 'fischenangeln', name: 'Fischen & Angeln', values: ['FF', 'GE', 'KO'] },
|
||||
{ id: 'orientierung', name: 'Orientierung', values: ['KL', 'IN', 'IN'] },
|
||||
{ id: 'pflanzenkunde', name: 'Pflanzenkunde', values: ['KL', 'FF', 'KO'] },
|
||||
{ id: 'tierkunde', name: 'Tierkunde', values: ['MU', 'MU', 'CH'] },
|
||||
{ id: 'wildnisleben', name: 'Wildnisleben', values: ['MU', 'GE', 'KO'] },
|
||||
{ id: 'faehrtensuchen', name: 'Fährtensuchen', values: ['MU', 'IN', 'GE'], categoryid: 2 },
|
||||
{ id: 'fesseln', name: 'Fesseln', values: ['KL', 'FF', 'KK'], categoryid: 2 },
|
||||
{ id: 'fischenangeln', name: 'Fischen & Angeln', values: ['FF', 'GE', 'KO'], categoryid: 2 },
|
||||
{ id: 'orientierung', name: 'Orientierung', values: ['KL', 'IN', 'IN'], categoryid: 2 },
|
||||
{ id: 'pflanzenkunde', name: 'Pflanzenkunde', values: ['KL', 'FF', 'KO'], categoryid: 2 },
|
||||
{ id: 'tierkunde', name: 'Tierkunde', values: ['MU', 'MU', 'CH'], categoryid: 2 },
|
||||
{ id: 'wildnisleben', name: 'Wildnisleben', values: ['MU', 'GE', 'KO'], categoryid: 2 },
|
||||
|
||||
// Wissenstalente
|
||||
{ id: 'brettspiel', name: 'Brett- & Glücksspiel', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'geographie', name: 'Geographie', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'geschichtswissen', name: 'Geschichtswissen', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'goetterkulte', name: 'Götter & Kulte', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'kriegkunst', name: 'Kriegskunst', values: ['MU', 'KL', 'IN'] },
|
||||
{ id: 'magiekunde', name: 'Magiekunde', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'mechanik', name: 'Mechanik', values: ['KL', 'KL', 'FF'] },
|
||||
{ id: 'rechnen', name: 'Rechnen', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'rechtskunde', name: 'Rechtskunde', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'sagenlegenden', name: 'Sagen & Legenden', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'sphaerenkunde', name: 'Sphärenkunde', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'sternkunde', name: 'Sternkunde', values: ['KL', 'KL', 'IN'] },
|
||||
{ id: 'brettspiel', name: 'Brett- & Glücksspiel', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'geographie', name: 'Geographie', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'geschichtswissen', name: 'Geschichtswissen', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'goetterkulte', name: 'Götter & Kulte', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'kriegkunst', name: 'Kriegskunst', values: ['MU', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'magiekunde', name: 'Magiekunde', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'mechanik', name: 'Mechanik', values: ['KL', 'KL', 'FF'], categoryid: 3 },
|
||||
{ id: 'rechnen', name: 'Rechnen', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'rechtskunde', name: 'Rechtskunde', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'sagenlegenden', name: 'Sagen & Legenden', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'sphaerenkunde', name: 'Sphärenkunde', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
{ id: 'sternkunde', name: 'Sternkunde', values: ['KL', 'KL', 'IN'], categoryid: 3 },
|
||||
|
||||
// Handwerkstalente
|
||||
{ id: 'alchimie', name: 'Alchimie', values: ['MU', 'KL', 'FF'] },
|
||||
{ id: 'boote', name: 'Boote & Schiffe', values: ['FF', 'GE', 'KK'] },
|
||||
{ id: 'fahrzeuge', name: 'Fahrzeuge', values: ['CH', 'FF', 'KO'] },
|
||||
{ id: 'handel', name: 'Handel', values: ['KL', 'IN', 'CH'] },
|
||||
{ id: 'heilkundegift', name: 'Heilkunde: Gift', values: ['MU', 'KL', 'IN'] },
|
||||
{ id: 'heilkundekrankheiten', name: 'Heilkunde: Krankheiten', values: ['MU', 'IN', 'KO'] },
|
||||
{ id: 'heilkundeseele', name: 'Heilkunde: Seele', values: ['IN', 'CH', 'KO'] },
|
||||
{ id: 'heilkundewunden', name: 'Heilkunde: Wunden', values: ['KL', 'FF', 'FF'] },
|
||||
{ id: 'holzbearbeitung', name: 'Holzbearbeitung', values: ['FF', 'GE', 'KK'] },
|
||||
{ id: 'lebensmittel', name: 'Lebensmittelbearbeitung', values: ['IN', 'FF', 'FF'] },
|
||||
{ id: 'lederbearbeitung', name: 'Lederbearbeitung', values: ['FF', 'GE', 'KO'] },
|
||||
{ id: 'malenzeichnen', name: 'Malen & Zeichnen', values: ['IN', 'FF', 'FF'] },
|
||||
{ id: 'musizieren', name: 'Musizieren', values: ['CH', 'FF', 'KO'] },
|
||||
{ id: 'schloesserknacken', name: 'Schlösserknacken', values: ['IN', 'FF', 'FF'] },
|
||||
{ id: 'steinbearbeitung', name: 'Steinbearbeitung', values: ['FF', 'FF', 'KK'] },
|
||||
{ id: 'stoffbearbeitung', name: 'Stoffbearbeitung', values: ['KL', 'FF', 'FF'] },
|
||||
{ id: 'alchimie', name: 'Alchimie', values: ['MU', 'KL', 'FF'], categoryid: 4 },
|
||||
{ id: 'boote', name: 'Boote & Schiffe', values: ['FF', 'GE', 'KK'], categoryid: 4 },
|
||||
{ id: 'fahrzeuge', name: 'Fahrzeuge', values: ['CH', 'FF', 'KO'], categoryid: 4 },
|
||||
{ id: 'handel', name: 'Handel', values: ['KL', 'IN', 'CH'], categoryid: 4 },
|
||||
{ id: 'heilkundegift', name: 'Heilkunde: Gift', values: ['MU', 'KL', 'IN'], categoryid: 4 },
|
||||
{ id: 'heilkundekrankheiten', name: 'Heilkunde: Krankheiten', values: ['MU', 'IN', 'KO'], categoryid: 4 },
|
||||
{ id: 'heilkundeseele', name: 'Heilkunde: Seele', values: ['IN', 'CH', 'KO'], categoryid: 4 },
|
||||
{ id: 'heilkundewunden', name: 'Heilkunde: Wunden', values: ['KL', 'FF', 'FF'], categoryid: 4 },
|
||||
{ id: 'holzbearbeitung', name: 'Holzbearbeitung', values: ['FF', 'GE', 'KK'], categoryid: 4 },
|
||||
{ id: 'lebensmittel', name: 'Lebensmittelbearbeitung', values: ['IN', 'FF', 'FF'], categoryid: 4 },
|
||||
{ id: 'lederbearbeitung', name: 'Lederbearbeitung', values: ['FF', 'GE', 'KO'], categoryid: 4 },
|
||||
{ id: 'malenzeichnen', name: 'Malen & Zeichnen', values: ['IN', 'FF', 'FF'], categoryid: 4 },
|
||||
{ id: 'musizieren', name: 'Musizieren', values: ['CH', 'FF', 'KO'], categoryid: 4 },
|
||||
{ id: 'schloesserknacken', name: 'Schlösserknacken', values: ['IN', 'FF', 'FF'], categoryid: 4 },
|
||||
{ id: 'steinbearbeitung', name: 'Steinbearbeitung', values: ['FF', 'FF', 'KK'], categoryid: 4 },
|
||||
{ id: 'stoffbearbeitung', name: 'Stoffbearbeitung', values: ['KL', 'FF', 'FF'], categoryid: 4 },
|
||||
|
||||
];
|
||||
module.exports = { Werte, Talente };
|
||||
module.exports = { Werte, Talente, Coin, TalentKategorien, DiceRegex };
|
@ -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');
|
||||
});
|
||||
});
|
||||
|
Reference in New Issue
Block a user