Add a ping reminder and setup command for it
This commit is contained in:
parent
112c671435
commit
9b2ad681b8
@ -81,7 +81,7 @@ module.exports = {
|
|||||||
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 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 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) => {
|
||||||
@ -97,7 +97,8 @@ module.exports = {
|
|||||||
"treeMessageId": "123",
|
"treeMessageId": "123",
|
||||||
"treeChannelId": "123",
|
"treeChannelId": "123",
|
||||||
"leaderboardMessageId": "123",
|
"leaderboardMessageId": "123",
|
||||||
"leaderboardChannelId": "123"
|
"leaderboardChannelId": "123",
|
||||||
|
"pingRoleId": "123"
|
||||||
};*/
|
};*/
|
||||||
if (res.length == 0) {
|
if (res.length == 0) {
|
||||||
reject("There is no database entry for your guild yet. Try running /setup");
|
reject("There is no database entry for your guild yet. Try running /setup");
|
||||||
@ -111,7 +112,8 @@ module.exports = {
|
|||||||
"treeMessageId": row.tree_message_id,
|
"treeMessageId": row.tree_message_id,
|
||||||
"treeChannelId": row.tree_channel_id,
|
"treeChannelId": row.tree_channel_id,
|
||||||
"leaderboardMessageId": row.leaderboard_message_id,
|
"leaderboardMessageId": row.leaderboard_message_id,
|
||||||
"leaderboardChannelId": row.leaderboard_channel_id
|
"leaderboardChannelId": row.leaderboard_channel_id,
|
||||||
|
"pingRoleId": row.ping_role_id
|
||||||
};
|
};
|
||||||
db.end();
|
db.end();
|
||||||
resolve({ "status": "Successfully fetched guild information", "data": guildInfo });
|
resolve({ "status": "Successfully fetched guild information", "data": guildInfo });
|
||||||
@ -333,5 +335,32 @@ module.exports = {
|
|||||||
resolve({ "status": "Successfully fetched historic 24hr tree.", "data": hist24hTree });
|
resolve({ "status": "Successfully fetched historic 24hr tree.", "data": hist24hTree });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
setPingRole(guildId, pingRoleId) {
|
||||||
|
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 insertPingRoleQuery = `UPDATE guild_info SET ping_role_id = ${db.escape(pingRoleId)} 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(insertPingRoleQuery, (err, res) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
db.end();
|
||||||
|
reject("Error updating the ping role ID: " + err.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
db.end();
|
||||||
|
resolve({ "status": `Successfully set the ping role to <@&${pingRoleId}>.`, "data": res });
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -340,6 +340,18 @@ const functions = {
|
|||||||
}
|
}
|
||||||
resolve(time + units);
|
resolve(time + units);
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
setReminder(interaction, time, pingRoleId) {
|
||||||
|
const reminderChannel = interaction.channel;
|
||||||
|
setTimeout(function () {
|
||||||
|
reminderChannel.send(`<@&${pingRoleId}>`).then(m => {
|
||||||
|
if (m.deletable) {
|
||||||
|
setTimeout(function() {
|
||||||
|
m.delete();
|
||||||
|
}, 60000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, time);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
18
slash-commands/setping.js
Normal file
18
slash-commands/setping.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
const { SlashCommandBuilder } = require('discord.js');
|
||||||
|
const dbfn = require('../modules/dbfn.js');
|
||||||
|
const fn = require('../modules/functions.js');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
data: new SlashCommandBuilder()
|
||||||
|
.setName('setping')
|
||||||
|
.setDescription('Run this command when you water your tree to have a reminder sent.'),
|
||||||
|
async execute(interaction) {
|
||||||
|
await interaction.deferReply({ ephemeral: true });
|
||||||
|
const getGuildInfoResponse = await dbfn.getGuildInfo(interaction.guildId);
|
||||||
|
const guildInfo = getGuildInfoResponse.data;
|
||||||
|
const reminderTimeS = fn.getWaterTime(guildInfo.treeHeight);
|
||||||
|
const reminderTimeMs = reminderTimeS * 1000;
|
||||||
|
fn.setReminder(interaction, reminderTimeMs, guildInfo.pingRoleId);
|
||||||
|
interaction.editReply("A reminder has been set.");
|
||||||
|
},
|
||||||
|
};
|
24
slash-commands/setpingrole.js
Normal file
24
slash-commands/setpingrole.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
const { SlashCommandBuilder } = require('discord.js');
|
||||||
|
const dbfn = require('../modules/dbfn.js');
|
||||||
|
const fn = require('../modules/functions.js');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
data: new SlashCommandBuilder()
|
||||||
|
.setName('setpingrole')
|
||||||
|
.setDescription('Set the role to ping when you run /setping')
|
||||||
|
.addRoleOption(o =>
|
||||||
|
o.setName('pingrole')
|
||||||
|
.setDescription('The role to ping')
|
||||||
|
.setRequired(true)),
|
||||||
|
async execute(interaction) {
|
||||||
|
try {
|
||||||
|
await interaction.deferReply({ ephemeral: true });
|
||||||
|
const pingRole = interaction.options.getRole('pingrole');
|
||||||
|
const setPingRoleResponse = await dbfn.setPingRole(interaction.guildId, pingRole.id);
|
||||||
|
interaction.editReply(setPingRoleResponse.status);
|
||||||
|
} catch(err) {
|
||||||
|
console.error(err);
|
||||||
|
await interaction.editReply(fn.builders.errorEmbed(err));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user