Merge pull request #2 from TobenderZephyr/development

Merge current development branch into master.
This commit is contained in:
2020-11-26 21:43:14 +01:00
committed by GitHub
17 changed files with 356 additions and 151 deletions

1
.gitignore vendored
View File

@ -2,5 +2,4 @@ node_modules
.env
.eslintrc.js
.eslintrc.json
dsabot.db

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

1
dsabot.db Normal file

File diff suppressed because one or more lines are too long

45
package-lock.json generated
View File

@ -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",

View File

@ -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"

View 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
View 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
View 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);
};

View File

@ -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);

View File

@ -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.');
});
};

View File

@ -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>');
}
};

View File

@ -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.');
}
}
);*/
};

View File

@ -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
View 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
);
};

View File

@ -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;

View File

@ -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 };

View File

@ -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');
});
});