const { Client, GatewayIntentBits, Partials, Collection, Colors, } = require("discord.js"); require("advanced-logs"); const { Manager } = require("real-giveaways"); const { DisTube } = require("distube"); const { SpotifyPlugin } = require("@distube/spotify"); const { SoundCloudPlugin } = require("@distube/soundcloud"); const { YtDlpPlugin } = require("@distube/yt-dlp"); const fs = require("fs"); const dotenv = require("dotenv"); const Topgg = require("@top-gg/sdk"); const logs = require("discord-logs"); // Custom Modules const server = require("./server.js"); const config = require("./config.json"); const exec = require(`${process.cwd()}/Utils/exec.js`); dotenv.config(); const { TOKEN, TOPGG_API_TOKEN, SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET } = process.env; // Discord Client setup const client = new Client({ intents: Object.values(GatewayIntentBits), partials: Object.values(Partials), }); // Advanced-Logs Setup console.setConfig({ background: true, timestamp: true, }); // Discord-Logs Setup /*logs(client, { debug: false });*/ // Distube Setup client.distube = new DisTube(client, { emitNewSongOnly: true, leaveOnFinish: true, emitAddSongWhenCreatingQueue: true, plugins: [new SpotifyPlugin(), new SoundCloudPlugin(), new YtDlpPlugin()], }); // Giveaway Manager Setup client.giveaway = new Manager(client, { embedColor: Colors.White, pingEveryone: false, emoji: "<:gift:1176598916049944626>", }); // Client properties client.commands = new Collection(); client.aliases = new Collection(); client.slashCommands = new Collection(); client.config = config; client.exec = async (command) => { return await exec(command); }; client.topgg = new Topgg.Api(TOPGG_API_TOKEN); client.prefix = config.PREFIX; module.exports = client; // Error Handling process.on("unhandledRejection", async (reason, promise) => { console.error(`${reason} ${promise}`); }); process.on("uncaughtException", async (err) => { console.error(err); }); process.on("uncaughtExceptionMonitor", async (err, origin) => { console.error(`${err} ${origin}`); }); // Dynamic Command Handlers fs.readdirSync("./Handlers").forEach((handler) => { require(`./Handlers/${handler}`)(client); }); // Login client.login(TOKEN);