Files
SupportBot/Events/ready.js
T
1tzEmerald 7383bd2c48 8.4-DEV-2
Added Buttons to WelcomeMessage
Added Components v2 Support for Welcome Message
Added improved logging system
2025-09-22 18:36:04 +01:00

128 lines
6.5 KiB
JavaScript

const fs = require("fs");
const Discord = require("discord.js");
const yaml = require("js-yaml");
const Event = require("../Structures/Event.js");
const gradient = require("gradient-string");
const figlet = require("figlet");
// Load configs
const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8"));
const panel = yaml.load(fs.readFileSync("./Configs/ticket-panel.yml", "utf8"));
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8"));
const ACTIVITY_TYPES = {
PLAYING: Discord.ActivityType.Playing,
WATCHING: Discord.ActivityType.Watching,
LISTENING: Discord.ActivityType.Listening,
COMPETING: Discord.ActivityType.Competing
};
const setActivity = (client, type, status) => {
const activityType = ACTIVITY_TYPES[type?.toUpperCase()];
if (activityType) {
client.user.setPresence({
activities: [{ name: status || "Online", type: activityType }],
status: type?.toLowerCase() || "online"
});
}
};
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const logStartup = async (client) => {
console.clear();
// Animated loading
const frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
for (let i = 0; i < frames.length * 2; i++) {
process.stdout.write(`\r${frames[i % frames.length]} Initializing SupportBot...`);
await sleep(100);
}
console.clear();
// Main title
console.log("\n" + gradient.pastel.multiline(figlet.textSync("SupportBot", { font: "ANSI Shadow", horizontalLayout: "fitted" })));
// Extract bot details safely
const botName = supportbot?.General?.Name || "SupportBot";
const botVersion = supportbot.SupportBot_Version;
console.log("\n╔═══════════════════════════════════════════════════════════════╗");
console.log("║ System Information ║");
console.log("╠═══════════════════════════════════════════════════════════════╣");
console.log(`║ Bot Name : ${botName.padEnd(45)} ║`);
console.log(`║ Version : ${botVersion.padEnd(45)} ║`);
console.log(`║ Node.js : ${process.version.padEnd(45)} ║`);
console.log(`║ Discord.js : v${Discord.version.padEnd(44)} ║`);
console.log("╚═══════════════════════════════════════════════════════════════╝\n");
// Links section
console.log(gradient.summer("┏━━━━━━━━━━━━━━━━━━━ Important Links ━━━━━━━━━━━━━━━━━━━┓"));
console.log(gradient.summer("┃ ┃"));
console.log(gradient.summer("┃ ") + "📚 Docs : " + gradient.cristal("https://emerald-services.gitbook.io/ ┃"));
console.log(gradient.summer("┃ ") + "🤝 Discord : " + gradient.cristal("https://dsc.gg/emerald-dev ┃"));
console.log(gradient.summer("┃ ┃"));
console.log(gradient.summer("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"));
// Bot Invite
const inviteUrl = `https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot%20applications.commands`;
console.log(gradient.teen("╔════════════════════════ Bot Invite ════════════════════════╗"));
console.log(gradient.teen("║ ║"));
console.log(gradient.teen("║ ") + gradient.pastel(inviteUrl.padEnd(56)) + gradient.teen("║"));
console.log(gradient.teen("║ ║"));
console.log(gradient.teen("╚════════════════════════════════════════════════════════════╝\n"));
};
const checkConfigs = async (client) => {
const guild = client.guilds.cache.first();
if (!guild) return;
console.log(gradient.morning("┏━━━━━━━━━━━━━━━━━━━━ Config Check ━━━━━━━━━━━━━━━━━━━━━┓"));
const roles = [
supportbot?.Roles?.StaffMember?.Admin,
supportbot?.Roles?.StaffMember?.Staff,
supportbot?.Roles?.AutoRole?.Role
].filter(Boolean);
const channels = [
supportbot?.Suggestions?.Channel,
supportbot?.Ticket?.Log?.TicketLog,
supportbot?.Ticket?.Log?.TranscriptLog,
supportbot?.Ticket?.TicketHome,
supportbot?.Welcome?.Channel,
supportbot?.Leave?.Channel,
supportbot?.Translate?.Log
].filter(Boolean);
const [missingRoles, missingChannels] = await Promise.all([
Promise.all(roles.map((role) => client.getRole(role, guild))),
Promise.all(channels.map((channel) => client.getChannel(channel, guild)))
]);
const missing = {
roles: roles.filter((_, i) => !missingRoles[i]),
channels: channels.filter((_, i) => !missingChannels[i])
};
if (missing.roles.length || missing.channels.length) {
console.log(gradient.morning("┃ ⚠️ - Configuration Issues Found: ┃"));
if (missing.roles.length) {
console.log(gradient.morning("┃ • Missing Roles: ") + gradient.fruit(missing.roles.join(", ")));
}
if (missing.channels.length) {
console.log(gradient.morning("┃ • Missing Channels: ") + gradient.fruit(missing.channels.join(", ")));
}
} else {
console.log(gradient.morning("┃ ✅ - All configurations validated successfully ┃"));
}
console.log(gradient.morning("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"));
};
module.exports = new Event("clientReady", async (client) => {
setActivity(client, supportbot?.Activity?.Type, supportbot?.Activity?.Status);
await logStartup(client);
await checkConfigs(client);
});