const { Client, Collection, Events, EmbedBuilder, GatewayIntentBits, Partials, ActivityType } = require('discord.js'); const { token } = require('./config.json'); const fs = require('node:fs'); const path = require('node:path'); const { Player } = require('discord-player'); const informationStatus = "[INFO]: "; const warningStatus = "[WARNING]: "; const errorStatus = "[ERROR]: "; const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMessageReactions, 'GuildVoiceStates'], partials: [Partials.Message, Partials.Channel, Partials.Reaction], presence: { activities: [{ name: 'Use /help - MBot', type: ActivityType.Playing }], status: 'idle' } }); const player = new Player(client); player.extractors.loadDefault(); client.commands = new Collection(); const foldersPath = path.join(__dirname, 'commands'); const commandFolders = fs.readdirSync(foldersPath); for (const folder of commandFolders) { const commandsPath = path.join(foldersPath, folder); const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js')); console.log(informationStatus + `'${folder}' folder has been added! All js files will be called.`); for (const file of commandFiles) { const filePath = path.join(commandsPath, file); const command = require(filePath); if('data' in command && 'execute' in command) { client.commands.set(command.data.name, command) } else { console.log(warningStatus + `This file at ${filePath} does not contain data or execute properties, will be ignored.`); } console.log(informationStatus + `'${file}' has been added into command pool.`); } } client.once(Events.ClientReady, readyClient => { try { console.log(informationStatus + `Activity has been set to '${client.user.presence.activities}'`); console.log(informationStatus + `Status has been set to ${client.user.presence.status}`); } catch (error) { console.log(errorStatus + "Something went wrong with setting the status! Debug information below."); console.error(error); } console.log(informationStatus + "Client is online!"); }); client.on(Events.InteractionCreate, async interaction => { if(!interaction.isChatInputCommand()) return; const command = interaction.client.commands.get(interaction.commandName); if(!command) { console.log(errorStatus + "No commands matching ${interaction.commandName} was not found! (Repair!)") console.error(error); } try { await command.execute(interaction); } catch (error) { console.log(errorStatus + "Something went wrong while executing this command! Please use the information below and sudmit to the author of the issue!"); console.error(error); if(interaction.replied || interaction.deferred) { await interaction.followUp({ content: 'Error executing this command! Something went wrong, try again later.', ephemeral: true }); } else { await interaction.reply({ content: 'Error executing this command! Something went wrong, try again later.', ephemeral: true }); } } }); player.events.on('playerStart', (queue, track) => { queue.metadata.channel.send(`Now playing: **${track.title}** from **${track.author}**`); console.log(`${informationStatus}${track.title} from ${track.author} in ${queue.metadata.channel.guildId} is playing!`); }); client.login(token);