2023-01-21 14:58:32 +00:00
|
|
|
const { SlashCommandBuilder } = require('discord.js');
|
2023-01-30 06:12:26 +00:00
|
|
|
const dbfn = require('../modules/dbfn.js');
|
2023-01-21 14:58:32 +00:00
|
|
|
const fn = require('../modules/functions.js');
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
data: new SlashCommandBuilder()
|
|
|
|
.setName('compare')
|
|
|
|
.setDescription('See how your tree compares to other trees!'),
|
|
|
|
async execute(interaction) {
|
2023-01-30 06:12:26 +00:00
|
|
|
try {
|
|
|
|
await interaction.deferReply();
|
|
|
|
// Get the guildInfo from the database
|
|
|
|
dbfn.getGuildInfo(interaction.guildId).then(async getGuildInfoResponse => {
|
|
|
|
let guildInfo = getGuildInfoResponse.data;
|
|
|
|
// Find the most recent tree and leaderboard messages in their respective channels
|
|
|
|
const findMessagesResponse = await fn.messages.find(interaction, guildInfo);
|
|
|
|
if (findMessagesResponse.code == 1) {
|
|
|
|
guildInfo = findMessagesResponse.data;
|
|
|
|
// Parse the leaderboard message
|
|
|
|
await fn.rankings.parse(interaction, guildInfo);
|
|
|
|
// Build the string that shows the comparison // TODO Move the string building section to fn.builders?
|
|
|
|
const comparedRankings = await fn.rankings.compare(interaction, guildInfo);
|
|
|
|
|
2023-01-31 00:28:12 +00:00
|
|
|
const embed = fn.builders.comparisonEmbed(comparedRankings, guildInfo);
|
2023-02-01 03:30:20 +00:00
|
|
|
await interaction.editReply(embed).then(async message => {
|
|
|
|
await dbfn.setComparisonMessage(message, interaction.guildId);
|
|
|
|
});
|
2023-01-30 06:12:26 +00:00
|
|
|
} else {
|
|
|
|
await interaction.editReply(fn.builders.errorEmbed(findMessagesResponse.status));
|
|
|
|
}
|
|
|
|
|
|
|
|
}).catch(async err => { // If we fail to fetch the guild's info from the database
|
|
|
|
// If the error is because the guild hasn't been setup yet, set it up
|
|
|
|
if (err === "There is no database entry for your guild yet. Try running /setup") {
|
|
|
|
// Create a basic guildInfo with blank data
|
|
|
|
let guildInfo = {
|
|
|
|
guildId: `${interaction.guildId}`,
|
|
|
|
treeName: "",
|
|
|
|
treeHeight: 0,
|
|
|
|
treeMessageId: "",
|
|
|
|
treeChannelId: `${interaction.channelId}`, // Use this interaction channel for the initial channel IDs
|
|
|
|
leaderboardMessageId: "",
|
|
|
|
leaderboardChannelId: `${interaction.channelId}`,
|
|
|
|
reminderMessage: "",
|
|
|
|
reminderChannelId: "",
|
|
|
|
remindedStatus: 0,
|
|
|
|
reminderOptIn: 0,
|
|
|
|
}
|
|
|
|
// Using the above guildInfo, try to find the Grow A Tree messages
|
|
|
|
const findMessagesResponse = await fn.messages.find(interaction, guildInfo);
|
|
|
|
guildInfo = findMessagesResponse.data;
|
|
|
|
if (findMessagesResponse.code == 1) {
|
|
|
|
// Build the string that shows the comparison // TODO Move the string building section to fn.builders?
|
|
|
|
const comparedRankings = await fn.rankings.compare(interaction, guildInfo);
|
2023-01-31 00:28:12 +00:00
|
|
|
const embed = fn.builders.comparisonEmbed(comparedRankings, guildInfo);
|
2023-02-01 03:30:20 +00:00
|
|
|
await interaction.editReply(embed).then(async message => {
|
|
|
|
await dbfn.setComparisonMessage(message.id, interaction.guildId);
|
|
|
|
});
|
2023-01-30 06:12:26 +00:00
|
|
|
} else {
|
|
|
|
await interaction.editReply(fn.builders.errorEmbed(findMessagesResponse.status));
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
await interaction.editReply(fn.builders.errorEmbed("An unknown error occurred while running the compare command."));
|
2023-01-25 08:07:41 +00:00
|
|
|
console.error(err);
|
2023-01-30 06:12:26 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
} catch (err) {
|
|
|
|
interaction.editReply(fn.builders.errorEmbed(err)).catch(err => {
|
2023-01-25 08:07:41 +00:00
|
|
|
console.error(err);
|
|
|
|
});
|
2023-01-30 06:12:26 +00:00
|
|
|
console.error(err);
|
|
|
|
}
|
2023-01-21 14:58:32 +00:00
|
|
|
},
|
|
|
|
};
|