Changing the way reminders are deleted

This commit is contained in:
Skylar Grant 2023-01-30 19:28:12 -05:00
parent db7af90cae
commit 73541fbec6
4 changed files with 178 additions and 116 deletions

14
main.js
View File

@ -55,12 +55,20 @@ client.on('interactionCreate', async interaction => {
} }
if (interaction.isButton() && interaction.component.customId == 'refresh') { if (interaction.isButton() && interaction.component.customId == 'refresh') {
fn.refresh(interaction).catch(err => { await fn.refresh(interaction).catch(err => {
interaction.update(fn.builders.errorEmbed(err)); interaction.update(fn.builders.errorEmbed(err));
}); });
} else if (interaction.isButton() && interaction.component.customId == 'resetping') { } else if (interaction.isButton() && interaction.component.customId == 'resetping') {
fn.resetPing(interaction); await fn.resetPing(interaction);
interaction.reply({ content: "Water Readiness Detection System: [ARMED]", ephemeral: true }); await fn.refresh(interaction).catch(err => {
interaction.update(fn.builders.errorEmbed(err));
});
} else if (interaction.isButton() && interaction.component.customId == 'deleteping') {
if (interaction.message.deletable) {
await interaction.message.delete().catch(err => {
console.error(err);
});
}
} }
}); });

View File

@ -35,16 +35,16 @@ leaderboard
module.exports = { module.exports = {
createGuildTables(guildId) { createGuildTables(guildId) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
}); });
// Create the guild-information and rank-information tables to be used. // Create the guild-information and rank-information tables to be used.
const createGuildInfoTableQuery = "CREATE TABLE IF NOT EXISTS guild_info(guild_id VARCHAR(50) NOT NULL, tree_name VARCHAR(100) NOT NULL DEFAULT 'Run /setup where your tree is.', tree_height INT(10) NOT NULL DEFAULT 0, tree_message_id VARCHAR(50) NOT NULL DEFAULT 'Run /setup where your tree is.', tree_channel_id VARCHAR(50) NOT NULL DEFAULT 'Run /setup where your tree is.', leaderboard_message_id VARCHAR(50) NOT NULL DEFAULT 'Run /setup where your leaderboard is.', leaderboard_channel_id VARCHAR(50) NOT NULL DEFAULT 'Run /setup where your leaderboard is.', CONSTRAINT guild_pk PRIMARY KEY (guild_id))"; const createGuildInfoTableQuery = "CREATE TABLE IF NOT EXISTS guild_info(guild_id VARCHAR(50) NOT NULL, tree_name VARCHAR(100) NOT NULL DEFAULT 'Run /setup where your tree is.', tree_height INT(10) NOT NULL DEFAULT 0, tree_message_id VARCHAR(50) NOT NULL DEFAULT 'Run /setup where your tree is.', tree_channel_id VARCHAR(50) NOT NULL DEFAULT 'Run /setup where your tree is.', leaderboard_message_id VARCHAR(50) NOT NULL DEFAULT 'Run /setup where your leaderboard is.', leaderboard_channel_id VARCHAR(50) NOT NULL DEFAULT 'Run /setup where your leaderboard is.', CONSTRAINT guild_pk PRIMARY KEY (guild_id))";
const createLeaderboardTableQuery = "CREATE TABLE IF NOT EXISTS leaderboard(id INT(10) NOT NULL AUTO_INCREMENT,guild_id VARCHAR(50) NOT NULL,tree_name VARCHAR(100) NOT NULL,tree_rank INT(10) NOT NULL,tree_height INT(10) NOT NULL DEFAULT 1,has_pin TINYINT(1) NOT NULL DEFAULT 0,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, CONSTRAINT id_pk PRIMARY KEY(id))"; const createLeaderboardTableQuery = "CREATE TABLE IF NOT EXISTS leaderboard(id INT(10) NOT NULL AUTO_INCREMENT,guild_id VARCHAR(50) NOT NULL,tree_name VARCHAR(100) NOT NULL,tree_rank INT(10) NOT NULL,tree_height INT(10) NOT NULL DEFAULT 1,has_pin TINYINT(1) NOT NULL DEFAULT 0,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, CONSTRAINT id_pk PRIMARY KEY(id))";
// TODO run the queries, then add a call to this function at the beginning of main.js or functions.js // TODO run the queries, then add a call to this function at the beginning of main.js or functions.js
@ -68,20 +68,20 @@ module.exports = {
}); });
}); });
}); });
}, },
getGuildInfo(guildId) { getGuildInfo(guildId) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
}); });
// Get a server's tree information from the database // Get a server's tree information from the database
const selectGuildInfoQuery = `SELECT tree_name, tree_height, tree_message_id, tree_channel_id, leaderboard_message_id, leaderboard_channel_id, ping_role_id, ping_channel_id, reminded_status FROM guild_info WHERE guild_id = ${db.escape(guildId)}`; const selectGuildInfoQuery = `SELECT tree_name, tree_height, tree_message_id, tree_channel_id, leaderboard_message_id, leaderboard_channel_id, ping_role_id, ping_channel_id, reminded_status, reminder_optin FROM guild_info WHERE guild_id = ${db.escape(guildId)}`;
// TODO run this query and return a promise then structure the output into a GuildInfo object. resolve with { "status": , "data": guildInfo } // TODO run this query and return a promise then structure the output into a GuildInfo object. resolve with { "status": , "data": guildInfo }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
db.query(selectGuildInfoQuery, (err, res) => { db.query(selectGuildInfoQuery, (err, res) => {
@ -108,7 +108,8 @@ module.exports = {
return; return;
} }
row = res[0]; row = res[0];
const guildInfo = { "guildId": guildId, const guildInfo = {
"guildId": guildId,
"treeName": row.tree_name, "treeName": row.tree_name,
"treeHeight": row.tree_height, "treeHeight": row.tree_height,
"treeMessageId": row.tree_message_id, "treeMessageId": row.tree_message_id,
@ -117,27 +118,28 @@ module.exports = {
"leaderboardChannelId": row.leaderboard_channel_id, "leaderboardChannelId": row.leaderboard_channel_id,
"reminderMessage": row.ping_role_id, "reminderMessage": row.ping_role_id,
"reminderChannelId": row.ping_channel_id, "reminderChannelId": row.ping_channel_id,
"remindedStatus": row.reminded_status "remindedStatus": row.reminded_status,
"reminderOptIn": row.reminder_optin
}; };
db.end(); db.end();
resolve({ "status": "Successfully fetched guild information", "data": guildInfo }); resolve({ "status": "Successfully fetched guild information", "data": guildInfo });
}); });
}); });
}, },
setGuildInfo(guildInfo) { setGuildInfo(guildInfo) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
}); });
// Returns a Promise, resolve({ "status": "", "data": null }) // Returns a Promise, resolve({ "status": "", "data": null })
// guildInfo = { "guildId": "123", "treeName": "name", "treeHeight": 123, "treeMessageId": "123", "treeChannelId": "123", "leaderboardMessageId": "123", "leaderboardChannelId": "123"} // guildInfo = { "guildId": "123", "treeName": "name", "treeHeight": 123, "treeMessageId": "123", "treeChannelId": "123", "leaderboardMessageId": "123", "leaderboardChannelId": "123"}
// Set a server's tree information in the database // Set a server's tree information in the database
const insertGuildInfoQuery = `INSERT INTO guild_info (guild_id, tree_name, tree_height, tree_message_id, tree_channel_id, leaderboard_message_id, leaderboard_channel_id) VALUES (${db.escape(guildInfo.guildId)}, ${db.escape(guildInfo.treeName)}, ${db.escape(guildInfo.treeHeight)},${db.escape(guildInfo.treeMessageId)}, ${db.escape(guildInfo.treeChannelId)}, ${db.escape(guildInfo.leaderboardMessageId)}, ${db.escape(guildInfo.leaderboardChannelId)}) ON DUPLICATE KEY UPDATE tree_name = ${db.escape(guildInfo.treeName)},tree_height = ${db.escape(guildInfo.treeHeight)},tree_message_id = ${db.escape(guildInfo.treeMessageId)},tree_channel_id = ${db.escape(guildInfo.treeChannelId)},leaderboard_message_id = ${db.escape(guildInfo.leaderboardMessageId)},leaderboard_channel_id = ${db.escape(guildInfo.leaderboardChannelId)}`; const insertGuildInfoQuery = `INSERT INTO guild_info (guild_id, tree_name, tree_height, tree_message_id, tree_channel_id, leaderboard_message_id, leaderboard_channel_id) VALUES (${db.escape(guildInfo.guildId)}, ${db.escape(guildInfo.treeName)}, ${db.escape(guildInfo.treeHeight)},${db.escape(guildInfo.treeMessageId)}, ${db.escape(guildInfo.treeChannelId)}, ${db.escape(guildInfo.leaderboardMessageId)}, ${db.escape(guildInfo.leaderboardChannelId)}) ON DUPLICATE KEY UPDATE tree_name = ${db.escape(guildInfo.treeName)},tree_height = ${db.escape(guildInfo.treeHeight)},tree_message_id = ${db.escape(guildInfo.treeMessageId)},tree_channel_id = ${db.escape(guildInfo.treeChannelId)},leaderboard_message_id = ${db.escape(guildInfo.leaderboardMessageId)},leaderboard_channel_id = ${db.escape(guildInfo.leaderboardChannelId)}`;
// TODO run this query and return a promise, then resolve with { "status": , "data": null } // TODO run this query and return a promise, then resolve with { "status": , "data": null }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -152,21 +154,21 @@ module.exports = {
resolve({ "status": "Successfully set the guild information", "data": null }); resolve({ "status": "Successfully set the guild information", "data": null });
}); });
}); });
}, },
setTreeInfo(guildInfo) { setTreeInfo(guildInfo) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
}); });
// Returns a Promise, resolve({ "status": "", "data": null }) // Returns a Promise, resolve({ "status": "", "data": null })
// guildInfo = { "guildId": "123", "treeName": "name", "treeHeight": 123, "treeMessageId": "123", "treeChannelId": "123", "leaderboardMessageId": "123", "leaderboardChannelId": "123"} // guildInfo = { "guildId": "123", "treeName": "name", "treeHeight": 123, "treeMessageId": "123", "treeChannelId": "123", "leaderboardMessageId": "123", "leaderboardChannelId": "123"}
// Set a server's tree information in the database) // Set a server's tree information in the database)
const insertGuildInfoQuery = `INSERT INTO guild_info (guild_id, tree_name, tree_height, tree_message_id, tree_channel_id) VALUES (${db.escape(guildInfo.guildId)}, ${db.escape(guildInfo.treeName)}, ${db.escape(guildInfo.treeHeight)},${db.escape(guildInfo.treeMessageId)}, ${db.escape(guildInfo.treeChannelId)}) ON DUPLICATE KEY UPDATE tree_name = ${db.escape(guildInfo.treeName)},tree_height = ${db.escape(guildInfo.treeHeight)},tree_message_id = ${db.escape(guildInfo.treeMessageId)},tree_channel_id = ${db.escape(guildInfo.treeChannelId)}`; const insertGuildInfoQuery = `INSERT INTO guild_info (guild_id, tree_name, tree_height, tree_message_id, tree_channel_id) VALUES (${db.escape(guildInfo.guildId)}, ${db.escape(guildInfo.treeName)}, ${db.escape(guildInfo.treeHeight)},${db.escape(guildInfo.treeMessageId)}, ${db.escape(guildInfo.treeChannelId)}) ON DUPLICATE KEY UPDATE tree_name = ${db.escape(guildInfo.treeName)},tree_height = ${db.escape(guildInfo.treeHeight)},tree_message_id = ${db.escape(guildInfo.treeMessageId)},tree_channel_id = ${db.escape(guildInfo.treeChannelId)}`;
// TODO run this query and return a promise, then resolve with { "status": , "data": null } // TODO run this query and return a promise, then resolve with { "status": , "data": null }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -181,21 +183,21 @@ module.exports = {
resolve({ "status": "Successfully set the guild information", "data": null }); resolve({ "status": "Successfully set the guild information", "data": null });
}); });
}); });
}, },
setLeaderboardInfo(guildInfo) { setLeaderboardInfo(guildInfo) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
}); });
// Returns a Promise, resolve({ "status": "", "data": null }) // Returns a Promise, resolve({ "status": "", "data": null })
// guildInfo = { "guildId": "123", "treeName": "name", "treeHeight": 123, "treeMessageId": "123", "treeChannelId": "123", "leaderboardMessageId": "123", "leaderboardChannelId": "123"} // guildInfo = { "guildId": "123", "treeName": "name", "treeHeight": 123, "treeMessageId": "123", "treeChannelId": "123", "leaderboardMessageId": "123", "leaderboardChannelId": "123"}
// Set a server's tree information in the database // Set a server's tree information in the database
const insertGuildInfoQuery = `INSERT INTO guild_info (guild_id, leaderboard_message_id, leaderboard_channel_id) VALUES (${db.escape(guildInfo.guildId)}, ${db.escape(guildInfo.leaderboardMessageId)}, ${db.escape(guildInfo.leaderboardChannelId)}) ON DUPLICATE KEY UPDATE leaderboard_message_id = ${db.escape(guildInfo.leaderboardMessageId)},leaderboard_channel_id = ${db.escape(guildInfo.leaderboardChannelId)}`; const insertGuildInfoQuery = `INSERT INTO guild_info (guild_id, leaderboard_message_id, leaderboard_channel_id) VALUES (${db.escape(guildInfo.guildId)}, ${db.escape(guildInfo.leaderboardMessageId)}, ${db.escape(guildInfo.leaderboardChannelId)}) ON DUPLICATE KEY UPDATE leaderboard_message_id = ${db.escape(guildInfo.leaderboardMessageId)},leaderboard_channel_id = ${db.escape(guildInfo.leaderboardChannelId)}`;
// TODO run this query and return a promise, then resolve with { "status": , "data": null } // TODO run this query and return a promise, then resolve with { "status": , "data": null }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -210,21 +212,21 @@ module.exports = {
resolve({ "status": "Successfully set the guild information", "data": null }); resolve({ "status": "Successfully set the guild information", "data": null });
}); });
}); });
}, },
deleteGuildInfo(guildId) { deleteGuildInfo(guildId) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
}); });
// Returns a Promise, resolve({ "status": "", "data": null }) // Returns a Promise, resolve({ "status": "", "data": null })
// guildInfo = { "guildId": "123", "treeName": "name", "treeHeight": 123, "treeMessageId": "123", "treeChannelId": "123", "leaderboardMessageId": "123", "leaderboardChannelId": "123"} // guildInfo = { "guildId": "123", "treeName": "name", "treeHeight": 123, "treeMessageId": "123", "treeChannelId": "123", "leaderboardMessageId": "123", "leaderboardChannelId": "123"}
// Set a server's tree information in the database // Set a server's tree information in the database
const deleteGuildInfoQuery = `DELETE FROM guild_info WHERE guild_id = ${db.escape(guildId)}`; const deleteGuildInfoQuery = `DELETE FROM guild_info WHERE guild_id = ${db.escape(guildId)}`;
// TODO run this query and return a promise, then resolve with { "status": , "data": null } // TODO run this query and return a promise, then resolve with { "status": , "data": null }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -240,13 +242,13 @@ module.exports = {
}); });
}); });
}, },
getLeaderboard(guildId) { getLeaderboard(guildId) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
@ -275,14 +277,14 @@ module.exports = {
resolve({ "status": "Successfully fetched leaderboard.", "data": leaderboard }); resolve({ "status": "Successfully fetched leaderboard.", "data": leaderboard });
}); });
}); });
}, },
uploadLeaderboard(leaderboard) { uploadLeaderboard(leaderboard) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
@ -307,13 +309,13 @@ module.exports = {
}); });
}); });
}, },
get24hTree(guildId, treeName) { get24hTree(guildId, treeName) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
@ -347,14 +349,14 @@ module.exports = {
resolve({ "status": "Successfully fetched historic 24hr tree.", "data": hist24hTree }); resolve({ "status": "Successfully fetched historic 24hr tree.", "data": hist24hTree });
}); });
}); });
}, },
setReminderInfo(guildId, reminderMessage, reminderChannelId) { setReminderInfo(guildId, reminderMessage, reminderChannelId) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
@ -377,11 +379,11 @@ module.exports = {
}, },
setRemindedStatus(guildId, remindedStatus) { setRemindedStatus(guildId, remindedStatus) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
@ -404,11 +406,11 @@ module.exports = {
}, },
setReminderOptIn(guildId, optIn) { setReminderOptIn(guildId, optIn) {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
@ -431,16 +433,16 @@ module.exports = {
}, },
getOptedInGuilds() { getOptedInGuilds() {
const db = mysql.createConnection({ const db = mysql.createConnection({
host : process.env.DBHOST, host: process.env.DBHOST,
user : process.env.DBUSER, user: process.env.DBUSER,
password : process.env.DBPASS, password: process.env.DBPASS,
database : process.env.DBNAME, database: process.env.DBNAME,
port : process.env.DBPORT port: process.env.DBPORT
}); });
db.connect((err) => { db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`; if (err) throw `Error connecting to the database: ${err.message}`;
}); });
// Get a server's tree information from the database // Get a server's tree information from the database
const getOptedInGuildsQuery = `SELECT guild_id, tree_name, tree_height, tree_message_id, tree_channel_id, leaderboard_message_id, leaderboard_channel_id, ping_role_id, ping_channel_id, reminded_status FROM guild_info WHERE reminder_optin = 1 AND reminded_status = 0`; const getOptedInGuildsQuery = `SELECT guild_id, tree_name, tree_height, tree_message_id, tree_channel_id, leaderboard_message_id, leaderboard_channel_id, ping_role_id, ping_channel_id, reminded_status FROM guild_info WHERE reminder_optin = 1 AND reminded_status = 0`;
// TODO run this query and return a promise then structure the output into a GuildInfo object. resolve with { "status": , "data": guildInfo } // TODO run this query and return a promise then structure the output into a GuildInfo object. resolve with { "status": , "data": guildInfo }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -463,7 +465,7 @@ module.exports = {
"remindedStatus": 0 "remindedStatus": 0
};*/ };*/
if (res.length == 0) { if (res.length == 0) {
resolve({"status": "No servers have opted in yet"}); resolve({ "status": "No servers have opted in yet" });
db.end(); db.end();
return; return;
} }
@ -487,5 +489,32 @@ module.exports = {
resolve({ "status": "Successfully fetched guild information", "data": guilds }); resolve({ "status": "Successfully fetched guild information", "data": guilds });
}); });
}); });
},
setComparisonMessage(comparisonMessageId, guildId) {
const db = mysql.createConnection({
host: process.env.DBHOST,
user: process.env.DBUSER,
password: process.env.DBPASS,
database: process.env.DBNAME,
port: process.env.DBPORT
});
db.connect((err) => {
if (err) throw `Error connecting to the database: ${err.message}`;
});
// Returns a Promise, resolve({ "status": "", "data": leaderboard })
const setRemindedStatusQuery = `UPDATE guild_info SET comparison_message_id = ${db.escape(comparisonMessageId)} WHERE guild_id = ${db.escape(guildId)}`;
// TODO run the query and return a promise then process the results. resolve with { "status": , "data": leaderboard }
return new Promise((resolve, reject) => {
db.query(setRemindedStatusQuery, (err, res) => {
if (err) {
console.error(err);
db.end();
reject("Error updating the comparison message ID: " + err.message);
return;
}
db.end();
resolve({ "status": `Successfully set the comparison message ID: ${comparisonMessageId}`, "data": res });
});
});
} }
}; };

View File

@ -42,6 +42,43 @@ const functions = {
} }
}, },
builders: { builders: {
actionRows: {
reminderActionRow() {
const deleteButton = new ButtonBuilder()
.setCustomId('deleteping')
.setEmoji('♻️')
.setStyle(ButtonStyle.Danger);
const actionRow = new ActionRowBuilder()
.addComponents(deleteButton);
return actionRow;
},
comparisonActionRow(guildInfo) {
// Create the button to go in the Action Row
const refreshButton = new ButtonBuilder()
.setCustomId('refresh')
.setEmoji('🔄')
.setStyle(ButtonStyle.Primary);
// Create the Action Row with the Button in it, to be sent with the Embed
let refreshActionRow = new ActionRowBuilder()
.addComponents(
refreshButton
);
if (guildInfo.reminderOptIn == 1 && guildInfo.remindedStatus == 1) {
const resetPingButton = new ButtonBuilder()
.setCustomId('resetping')
.setLabel('Reset Ping')
.setStyle(ButtonStyle.Secondary);
refreshActionRow.addComponents(resetPingButton);
} else if (guildInfo.reminderOptIn == 1 && guildInfo.remindedStatus == 0) {
const resetPingButton = new ButtonBuilder()
.setCustomId('resetping')
.setLabel('[Armed]')
.setStyle(ButtonStyle.Secondary);
refreshActionRow.addComponents(resetPingButton);
}
return refreshActionRow;
}
},
async refreshAction(guildId) { async refreshAction(guildId) {
// Create the button to go in the Action Row // Create the button to go in the Action Row
const refreshButton = new ButtonBuilder() const refreshButton = new ButtonBuilder()
@ -64,14 +101,14 @@ const functions = {
} }
return refreshActionRow; return refreshActionRow;
}, },
comparisonEmbed(content, refreshActionRow) { comparisonEmbed(content, guildInfo) {
// Create the embed using the content passed to this function // Create the embed using the content passed to this function
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setColor(strings.embeds.color) .setColor(strings.embeds.color)
.setTitle('Tree Growth Comparison') .setTitle('Tallest Trees Comparison')
.setDescription(content) .setDescription(content)
.setFooter({ text: `v${package.version} - ${strings.embeds.footer}` }); .setFooter({ text: `v${package.version} - ${strings.embeds.footer}` });
const messageContents = { embeds: [embed], components: [refreshActionRow] }; const messageContents = { embeds: [embed], components: [this.actionRows.comparisonActionRow(guildInfo)] };
return messageContents; return messageContents;
}, },
reminderEmbed(content, guildInfo) { reminderEmbed(content, guildInfo) {
@ -80,8 +117,8 @@ const functions = {
.setColor(strings.embeds.color) .setColor(strings.embeds.color)
.setTitle('Water Reminder') .setTitle('Water Reminder')
.setDescription(`[Click here to go to your Tree](https://discord.com/channels/${guildInfo.guildId}/${guildInfo.treeChannelId}/${guildInfo.treeMessageId})`) .setDescription(`[Click here to go to your Tree](https://discord.com/channels/${guildInfo.guildId}/${guildInfo.treeChannelId}/${guildInfo.treeMessageId})`)
.setFooter({ text: `This message will self-destruct in 60 seconds.` }); .setFooter({ text: `Click ♻️ to delete this message` });
const messageContents = { content: content, embeds: [embed] }; const messageContents = { content: content, embeds: [embed], components: [this.actionRows.reminderActionRow()] };
return messageContents; return messageContents;
}, },
helpEmbed(content, private) { helpEmbed(content, private) {
@ -432,10 +469,8 @@ const functions = {
await this.rankings.parse(interaction, guildInfo); await this.rankings.parse(interaction, guildInfo);
// Build the string that shows the comparison // TODO Move the string building section to fn.builders? // Build the string that shows the comparison // TODO Move the string building section to fn.builders?
const comparedRankings = await this.rankings.compare(interaction, guildInfo); const comparedRankings = await this.rankings.compare(interaction, guildInfo);
// Build the Action Row that will contain the Refresh and Reset Ping buttons
const compareActionRow = await this.builders.refreshAction(interaction.guildId);
const embed = this.builders.comparisonEmbed(comparedRankings, compareActionRow); const embed = this.builders.comparisonEmbed(comparedRankings, guildInfo);
await interaction.update(embed); await interaction.update(embed);
} else { } else {
await interaction.update(this.builders.errorEmbed(findMessagesResponse.status)); await interaction.update(this.builders.errorEmbed(findMessagesResponse.status));
@ -506,11 +541,7 @@ const functions = {
const reminderEmbed = functions.builders.reminderEmbed(reminderMessage, guildInfo); const reminderEmbed = functions.builders.reminderEmbed(reminderMessage, guildInfo);
reminderChannel.send(reminderEmbed).then(async m => { reminderChannel.send(reminderEmbed).then(async m => {
await dbfn.setRemindedStatus(guildId, 1); await dbfn.setRemindedStatus(guildId, 1);
if (m.deletable) { return 1;
setTimeout(function () {
m.delete();
}, 60000);
}
}).catch(err => { }).catch(err => {
console.error(err); console.error(err);
}); });
@ -560,8 +591,8 @@ const functions = {
}); });
} }
}, },
resetPing(interaction) { async resetPing(interaction) {
dbfn.setRemindedStatus(interaction.guildId, 0); await dbfn.setRemindedStatus(interaction.guildId, 0);
} }
}; };

View File

@ -20,10 +20,8 @@ module.exports = {
await fn.rankings.parse(interaction, guildInfo); await fn.rankings.parse(interaction, guildInfo);
// Build the string that shows the comparison // TODO Move the string building section to fn.builders? // Build the string that shows the comparison // TODO Move the string building section to fn.builders?
const comparedRankings = await fn.rankings.compare(interaction, guildInfo); const comparedRankings = await fn.rankings.compare(interaction, guildInfo);
// Build the Action Row that will contain the Refresh and Reset Ping buttons
const compareActionRow = await fn.builders.refreshAction(interaction.guildId);
const embed = fn.builders.comparisonEmbed(comparedRankings, compareActionRow); const embed = fn.builders.comparisonEmbed(comparedRankings, guildInfo);
await interaction.editReply(embed); await interaction.editReply(embed);
} else { } else {
await interaction.editReply(fn.builders.errorEmbed(findMessagesResponse.status)); await interaction.editReply(fn.builders.errorEmbed(findMessagesResponse.status));
@ -52,11 +50,7 @@ module.exports = {
if (findMessagesResponse.code == 1) { if (findMessagesResponse.code == 1) {
// Build the string that shows the comparison // TODO Move the string building section to fn.builders? // Build the string that shows the comparison // TODO Move the string building section to fn.builders?
const comparedRankings = await fn.rankings.compare(interaction, guildInfo); const comparedRankings = await fn.rankings.compare(interaction, guildInfo);
// Build the Action Row that will contain the Refresh and Reset Ping buttons const embed = fn.builders.comparisonEmbed(comparedRankings, guildInfo);
const compareActionRow = await fn.builders.refreshAction(interaction.guildId);
const embed = fn.builders.comparisonEmbed(comparedRankings, compareActionRow);
await interaction.editReply(embed); await interaction.editReply(embed);
} else { } else {
await interaction.editReply(fn.builders.errorEmbed(findMessagesResponse.status)); await interaction.editReply(fn.builders.errorEmbed(findMessagesResponse.status));