From 581bedf162cb17caef100b7c3e29fa51a4197e2b Mon Sep 17 00:00:00 2001 From: Litruv Date: Wed, 1 May 2019 21:41:06 +1000 Subject: [PATCH] Remade database connections, based on promises now --- database.js | 211 +++++++++++++++++++++++----------------------------- index.js | 12 ++- 2 files changed, 100 insertions(+), 123 deletions(-) diff --git a/database.js b/database.js index 42e4bbe..5095054 100644 --- a/database.js +++ b/database.js @@ -1,8 +1,11 @@ -var mysql = require('mysql'); -var config = require('./dbconfig.json'); +const mysql = require('mysql') +const fs = require('fs') + + +var connection module.exports = { - checkguilds: function (discordclient) { + checkguilds: (discordclient) => { discordclient.guilds.forEach(guild => { check_guild_exists(discordclient, guild.id).then((r) => { console.log(r); @@ -13,141 +16,111 @@ module.exports = { }); }, - checkusers: async function (client, guild) { - await guild.members.forEach(member => { - check_user_exists(client, member.id, guild.id); - }); + get_setting: (settingname, guildID = 0) => { + return new Promise((resolve, reject) => { + readSetting(settingname, guildID).then((settingreturn) => { + resolve(settingreturn.value); + }).catch(err => { + reject(console.error(`Error: with settingname '${settingname}' on Guild ${guildID} ` + err)) + }) + }) + }, - get_setting: async function (settingname, guildID = 0) { - try { - var settingreturn = await sql_q(settingname, guildID); - return settingreturn[0].value; - } - catch (err) { - console.error(`Error: with settingname '${settingname}' on Guild ${guildID} ` + err) - } + set_setting: (guildID, settingname, value) => { + writeSetting(settingname, value, guildID); }, - set_setting: async function (guildID, settingname, value) { - sql_qs(guildID, settingname, value); - }, - - connect: async function () { - this.con = await connecttodb(); - }, - - user_add_command(userid, guildID) { - increment_user_commands(userid, guildID); + connect: () => { + return new Promise((resolve, reject) => { + readConfig('dbconfig.json') + .then(config => { + resolve(dbConnect(config)) + }) + }) } -}; - -function connecttodb() { - new Promise(resolve => { - this.con = mysql.createConnection({ - host: config.mysql_host, - user: config.mysql_user, - password: config.mysql_password, - database: config.mysql_db, - charset: "utf8mb4_unicode_ci" - }); - - resolve(this.con); - }); -} -async function check_user_exists(client, userid, guildid) { - var exists = await sql_user(client, userid, guildid); - return exists[0]; } -function sql_user(client, userid, guildid) { - return new Promise(resolve => { - con.query("SELECT AI_ID FROM users WHERE ID = '" + userid + "'", function (err, result, fields) { - if (err) throw err; - - var user = client.guilds.get(guildid).members.get(userid); - var username = user.displayName; - var usericon = user.user.avatarURL; - var bot = user.user.bot; - var discriminator = user.user.discriminator; - var actualusername = user.user.username; - - if (result.length == 0) - var sql = `INSERT INTO users (ID, name, username, avatarURL, bot, discriminator, serverID, joined) VALUES (${con.escape(userid)}, ${con.escape(username)}, ${con.escape(actualusername)}, ${con.escape(usericon)}, ${con.escape(bot)}, ${con.escape(discriminator)}, ${con.escape(guildid)}, ${con.escape(user.joinedTimestamp)});`; - - else - var sql = `UPDATE users SET name=${con.escape(username)}, avatarURL=${con.escape(usericon)}, discriminator=${con.escape(discriminator)} WHERE (ID=${con.escape(userid)} AND serverID=${con.escape(guildid)});`; - - con.query(sql, function (err, result) { - if (err) throw err; - }); - }); - }); -} - -function sql_guild(client, guildid) { - return new Promise(resolve => { - con.query("SELECT AI_ID FROM servers WHERE ServerID = '" + guildid + "'", function (err, result, fields) { - if (err) throw err; - if (result.length == 0) { - var guild = client.guilds.get(guildid); - var guildname = guild.name; - var guildicon = guild.iconURL; - - if (guildname != null) { - var sql = "INSERT INTO `servers` (`ServerID`, `ServerName`, `ServerIcon`) VALUES (" + con.escape(guildid) + ", " + con.escape(guildname) + ", " + con.escape(guildicon) + ");"; - - con.query(sql, function (err, result) { - if (err) throw err; - console.log(`${guildname} inserted into DB`); - }); +function readConfig(configFile, formatting = 'utf8') { + return new Promise((resolve, reject) => { + fs.readFile(configFile, formatting, function (err, data) { + if (err) { + if (err.code == "ENOENT") { + console.error("Copy dbconfig.template.json to dbconfig.json and edit first") + reject(`Error reading config file ${configFile} (${formatting})`) + // process.exit() } + reject(`Other Error reading config file ${configFile} (${formatting} - ${err})`) + } + else { + if (!JSON.parse(data)) + reject('Error parsing config file, invalid JSON') + let dbsettings = JSON.parse(data) + + dbsettings.user = dbsettings.mysql_user + dbsettings.host = dbsettings.mysql_host + dbsettings.password = dbsettings.mysql_password + dbsettings.database = dbsettings.mysql_db + + resolve(dbsettings) } }); - }); + }) } -async function check_guild_exists(client, guildid) { - var exists = await sql_guild(client, guildid); - return exists[0]; +function writeSetting(settingName, settingValue, guildId = 0) { + return new Promise((resolve, reject) => { + setTimeout(reject, 1000, new Error("Didn't write something within a second")) + + connection.query(`INSERT INTO settings (setting, value, serverID) VALUES ('${settingName}', '${settingValue}', '${guildId}')`, + function (error, results, fields) { + if (error) + reject(error) + resolve(results) + }) + }) } -function sql_q(settingname, serverID = 0) { - return new Promise(resolve => { - this.con.query(`SELECT value FROM settings WHERE setting = ${con.escape(settingname)} AND serverID = ${con.escape(serverID)}`, function (err, result, fields) { - if (err) throw err; - resolve(result); - }); - }); +function readSetting(settingName, guildId = 0) { + return new Promise((resolve, reject) => { + setTimeout(reject, 1000, new Error("Didn't read something within a second")) + + connection.query(`SELECT * FROM settings WHERE setting='${settingName}' AND serverID='${guildId}'`, + function (error, results, fields) { + if (error) + reject(error) + //console.log(results) + resolve(results[0]) + }) + }) } -function sql_qs(guildid, settingname, value) { - return new Promise(resolve => { - this.con.query(`SELECT value FROM settings WHERE setting = ${con.escape(settingname)} AND serverID = ${con.escape(guildid)}`, function (err, result, fields) { - if (err) throw err; +function deleteSetting(settingName, guildId = 0) { + return new Promise((resolve, reject) => { + setTimeout(reject, 1000, new Error("Didn't delete something within a second")) - if (result.length == 0) - var sql = `INSERT INTO settings (setting, value, serverID) VALUES (${con.escape(settingname)}, ${con.escape(value)}, ${con.escape(guildid)});`; - - else - var sql = `UPDATE settings SET value=${con.escape(value)} WHERE (setting=${con.escape(settingname)} AND serverID=${con.escape(guildid)});`; - - con.query(sql, function (err, result) { - if (err) throw err; - }); - }); - - - }); + connection.query(`DELETE FROM settings WHERE setting='${settingName}' AND serverID='${guildId}'`, + function (error, results, fields) { + if (error) + reject(error) + resolve(results) + }) + }) } -function increment_user_commands(userid, guildid) { - this.con.query(`UPDATE users SET usedCommands=usedCommands+1 WHERE (ID=${con.escape(userid)} AND serverID=${con.escape(guildid)})`, function (err, result, fields) { +function dbConnect(config) { + return new Promise((resolve, reject) => { + let conn = mysql.createConnection(config) - //UPDATE images SET counter=counter+1 WHERE image_id=15 - if (err) throw err; - }); + conn.connect(error => { + if (error) + reject("Couldn't connect to db" + error) + connection = conn; + resolve(conn) + }) + }) } -console.log("=MySQL===================="); -console.log("Logged in as " + config.mysql_user + " to " + config.mysql_host); \ No newline at end of file +function closeConnection() { + connection.end() +} \ No newline at end of file diff --git a/index.js b/index.js index a30c9e9..9607dac 100644 --- a/index.js +++ b/index.js @@ -14,10 +14,14 @@ const colors = require('colors'); //Database Connection client.database.connect().then(con => { try { - client.database.get_setting('token').then(token => { - console.log("=Discord==================") - client.login(token) - }) + console.log("=Discord==================") + client.database.get_setting('token') + .then(token => { + client.login(token) + }) + .catch(e => { + console.log("Error getting token") + }) } catch (e) { console.log(e) }