91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
|
// dotenv for handling environment variables
|
||
|
const dotenv = require('dotenv');
|
||
|
dotenv.config();
|
||
|
const isDev = process.env.isDev;
|
||
|
|
||
|
// filesystem
|
||
|
const fs = require('fs');
|
||
|
const https = require('https');
|
||
|
|
||
|
// Discord.js
|
||
|
const Discord = require('discord.js');
|
||
|
const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = Discord;
|
||
|
|
||
|
// Various imports from other files
|
||
|
const config = require('../data/config.json');
|
||
|
const strings = require('../data/strings.json');
|
||
|
const slashCommandFiles = fs.readdirSync('./slash-commands/').filter(file => file.endsWith('.js'));
|
||
|
|
||
|
const functions = {
|
||
|
// Functions for managing and creating Collections
|
||
|
collectionBuilders: {
|
||
|
// Create the collection of slash commands
|
||
|
slashCommands(client) {
|
||
|
if (!client.slashCommands) client.slashCommands = new Discord.Collection();
|
||
|
client.slashCommands.clear();
|
||
|
for (const file of slashCommandFiles) {
|
||
|
const slashCommand = require(`../slash-commands/${file}`);
|
||
|
if (slashCommand.data != undefined) {
|
||
|
client.slashCommands.set(slashCommand.data.name, slashCommand);
|
||
|
}
|
||
|
}
|
||
|
if (isDev) console.log('Slash Commands Collection Built');
|
||
|
}
|
||
|
},
|
||
|
builders: {
|
||
|
embeds: {
|
||
|
helpEmbed(content, private) {
|
||
|
const embed = new EmbedBuilder()
|
||
|
.setColor(strings.embeds.color)
|
||
|
.setTitle('Grow A Tree Analyzer Help')
|
||
|
.setDescription(content)
|
||
|
.setFooter({ text: strings.embeds.footer });
|
||
|
const privateBool = private == 'true';
|
||
|
const messageContents = { embeds: [embed], ephemeral: privateBool };
|
||
|
return messageContents;
|
||
|
},
|
||
|
errorEmbed(content) {
|
||
|
const embed = new EmbedBuilder()
|
||
|
.setColor(0xFF0000)
|
||
|
.setTitle('Error!')
|
||
|
.setDescription(content)
|
||
|
.setFooter({ text: strings.embeds.footer });
|
||
|
const messageContents = { embeds: [embed], ephemeral: true };
|
||
|
return messageContents;
|
||
|
},
|
||
|
info(content) {
|
||
|
const embed = new EmbedBuilder()
|
||
|
.setColor(0x8888FF)
|
||
|
.setTitle('Information')
|
||
|
.setDescription(content)
|
||
|
.setFooter({ text: strings.embeds.footer });
|
||
|
const messageContents = { embeds: [embed], ephemeral: true };
|
||
|
return messageContents;
|
||
|
},
|
||
|
rules() {
|
||
|
const actionRow = functions.builders.actionRows.acceptRules();
|
||
|
const embed = new EmbedBuilder()
|
||
|
.setColor(strings.embeds.color)
|
||
|
.setTitle(strings.embeds.rulesTitle)
|
||
|
.setDescription(strings.embeds.rules)
|
||
|
.setFooter({ text: strings.embeds.rulesFooter });
|
||
|
return { embeds: [embed], components: [actionRow] };
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
async sendHeartbeat(url) {
|
||
|
if (isDev) console.log("Heartbeat Sent: " + url);
|
||
|
https.get(url, async (response) => {
|
||
|
let data = '';
|
||
|
|
||
|
response.on('data', (chunk) => data += chunk);
|
||
|
|
||
|
response.on('end', () => {
|
||
|
parsedData = JSON.parse(data);
|
||
|
if ( !(parsedData.ok) ) console.error("Heartbeat failed");
|
||
|
});
|
||
|
}).on("error", (error) => console.error(error));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = functions;
|