Spaces:
Runtime error
Runtime error
require('dotenv').config(); | |
const { Client, Collection, GatewayIntentBits, Partials } = require('discord.js'); | |
const axios = require('axios'); | |
const fs = require('node:fs'); | |
const path = require('node:path'); | |
const { TOKEN, CLIENT_ID, GUILD_ID, APP_URL } = process.env; | |
class Bot { | |
constructor(token) { | |
this.client = new Client({ | |
intents: [ | |
GatewayIntentBits.Guilds, | |
GatewayIntentBits.GuildMessages, | |
GatewayIntentBits.GuildMessageTyping, | |
GatewayIntentBits.GuildMembers, | |
GatewayIntentBits.GuildPresences, | |
GatewayIntentBits.GuildVoiceStates, | |
GatewayIntentBits.GuildMessageReactions, | |
GatewayIntentBits.DirectMessages, | |
GatewayIntentBits.DirectMessageReactions, | |
GatewayIntentBits.DirectMessageTyping, | |
GatewayIntentBits.MessageContent, | |
GatewayIntentBits.GuildWebhooks, | |
], | |
partials: [ | |
Partials.Channel, | |
Partials.Message, | |
Partials.Reaction, | |
Partials.User, | |
Partials.ThreadMember | |
], | |
}); | |
this.client.cooldowns = new Collection(); | |
this.client.commands = new Collection(); | |
this.token = token ?? TOKEN; | |
// Load commands | |
const commandsPath = path.join(__dirname, 'commands'); | |
const commandFolders = fs.readdirSync(commandsPath); | |
for (const folder of commandFolders) { | |
const folderPath = path.join(commandsPath, folder); | |
const commandFiles = fs.readdirSync(folderPath).filter(file => file.endsWith('.js')); | |
for (const file of commandFiles) { | |
const commandPath = path.join(folderPath, file); | |
const command = require(commandPath); | |
if ('data' in command && 'execute' in command) { | |
this.client.commands.set(command.data.name, command); | |
} else { | |
console.log(`[WARNING] The command at ${commandPath} is missing a required "data" or "execute" property.`); | |
} | |
} | |
} | |
const eventsPath = path.join(__dirname, 'events'); | |
const eventFiles = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js')); | |
for (const file of eventFiles) { | |
const eventPath = path.join(eventsPath, file); | |
const event = require(eventPath); | |
if (event.once) { | |
this.client.once(event.name, (...args) => event.execute(...args)); | |
} else { | |
this.client.on(event.name, (...args) => event.execute(...args)); | |
} | |
} | |
} | |
start() { | |
this.client.login(this.token); | |
} | |
stop() { | |
this.client.destroy(); | |
} | |
getStatus() { | |
return this.client.isReady() ? 'online' : 'offline'; | |
} | |
} | |
module.exports = Bot; |