Remade database connections, based on promises now

This commit is contained in:
2019-05-01 21:41:06 +10:00
parent f9b5512073
commit 581bedf162
2 changed files with 100 additions and 123 deletions

View File

@@ -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);
}
};
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`);
});
connect: () => {
return new Promise((resolve, reject) => {
readConfig('dbconfig.json')
.then(config => {
resolve(dbConnect(config))
})
})
}
}
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);
function closeConnection() {
connection.end()
}

View File

@@ -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.database.get_setting('token')
.then(token => {
client.login(token)
})
.catch(e => {
console.log("Error getting token")
})
} catch (e) {
console.log(e)
}