Added Buttons to WelcomeMessage Added Components v2 Support for Welcome Message Added improved logging system
128 lines
6.5 KiB
JavaScript
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);
|
|
}); |