Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 5m5s
102 lines
3.5 KiB
TypeScript
102 lines
3.5 KiB
TypeScript
// ENVIRONMENT VARIABLES
|
|
import "dotenv/config"
|
|
|
|
const appId = process.env.DISCORD_APP_ID
|
|
const token = process.env.DISCORD_TOKEN
|
|
if (!appId || !token) {
|
|
console.warn(chalk.red("[DiscordJS] Missing DISCORD_APP_ID or DISCORD_TOKEN in environment variables!"))
|
|
process.exit(1)
|
|
}
|
|
|
|
// PACKAGES
|
|
import { Client, GatewayIntentBits, REST, Routes } from "discord.js"
|
|
import { Player } from "discord-player"
|
|
import { connection } from "mongoose"
|
|
import type { GuildQueueEvents } from "discord-player"
|
|
import chalk from "chalk"
|
|
import { commandFolders } from "./commands"
|
|
import clientEvents from "./events/client"
|
|
import mongoEvents from "./events/mongo"
|
|
import playerEvents from "./events/player"
|
|
import { logConsole, logConsoleDev } from "@/utils/console"
|
|
|
|
// CLIENT INITIALIZATION
|
|
const client = new Client({
|
|
intents: [
|
|
GatewayIntentBits.AutoModerationConfiguration,
|
|
GatewayIntentBits.AutoModerationExecution,
|
|
GatewayIntentBits.DirectMessageReactions,
|
|
GatewayIntentBits.DirectMessageTyping,
|
|
GatewayIntentBits.DirectMessages,
|
|
GatewayIntentBits.GuildExpressions,
|
|
GatewayIntentBits.GuildIntegrations,
|
|
GatewayIntentBits.GuildInvites,
|
|
GatewayIntentBits.GuildMembers,
|
|
GatewayIntentBits.GuildMessageReactions,
|
|
GatewayIntentBits.GuildMessageTyping,
|
|
GatewayIntentBits.GuildMessages,
|
|
GatewayIntentBits.GuildModeration,
|
|
GatewayIntentBits.GuildPresences,
|
|
GatewayIntentBits.GuildScheduledEvents,
|
|
GatewayIntentBits.GuildVoiceStates,
|
|
GatewayIntentBits.GuildWebhooks,
|
|
GatewayIntentBits.Guilds,
|
|
GatewayIntentBits.MessageContent
|
|
],
|
|
allowedMentions: { parse: ["roles", "users", "everyone"] }
|
|
})
|
|
|
|
// PLAYER INITIALIZATION
|
|
const player = new Player(client)
|
|
|
|
// COMMANDS REGISTRATION
|
|
const rest = new REST({ version: "10" }).setToken(token)
|
|
void (async () => {
|
|
try {
|
|
const commands = commandFolders.flatMap(folder => folder.name !== "salonpostam" ? folder.commands.map(command => command.data) : [])
|
|
logConsole('discordjs', 'commands_registered', { count: commands.length.toString() })
|
|
await rest.put(Routes.applicationCommands(process.env.DISCORD_APP_ID ?? ""), { body: commands })
|
|
|
|
const sptGuildId = process.env.DISCORD_SPT_GUILD_ID
|
|
if (!sptGuildId) return
|
|
|
|
const commandsSpt = commandFolders.flatMap(folder => folder.name === "salonpostam" ? folder.commands.map(command => command.data) : [])
|
|
logConsole('discordjs', 'commands_registered_guild', { count: commandsSpt.length.toString(), guild: 'salonpostam' })
|
|
await rest.put(Routes.applicationGuildCommands(appId, sptGuildId), { body: commandsSpt })
|
|
}
|
|
catch (error) { console.error(error) }
|
|
})()
|
|
|
|
// CLIENT EVENTS REGISTRATION
|
|
clientEvents.forEach(event => {
|
|
const callback = (...args: unknown[]) => {
|
|
logConsoleDev('discordjs', 'event_triggered', { event: event.name.toString() })
|
|
event.execute(...args)
|
|
}
|
|
if (event.once) client.once(event.name, callback)
|
|
else client.on(event.name, callback)
|
|
})
|
|
// MONGO EVENTS REGISTRATION
|
|
mongoEvents.forEach(event => {
|
|
const callback = (...args: unknown[]) => {
|
|
logConsoleDev('mongoose', 'event_triggered', { event: event.name.toString() })
|
|
event.execute(...args)
|
|
}
|
|
if (event.once) connection.once(event.name, callback)
|
|
else connection.on(event.name, callback)
|
|
})
|
|
// PLAYER EVENTS REGISTRATION
|
|
playerEvents.forEach(event => {
|
|
if (event.name === "debug") return
|
|
const callback = (...args: unknown[]) => {
|
|
logConsoleDev('discord_player', 'event_triggered', { event: event.name.toString() })
|
|
event.execute(...args)
|
|
}
|
|
player.events.on(event.name as keyof GuildQueueEvents, callback)
|
|
})
|
|
|
|
// LAUNCH
|
|
void client.login()
|
|
|
|
export default client
|