// 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;