import { Client, Events, GatewayIntentBits, Message, Partials, } from "discord.js"; import dotenv from "dotenv"; import path from "path"; import loadModulesFromDir from "./lib/loadStartupHandlers"; import * as mongoDB from "mongodb"; import { env } from "process"; import webserver from "./webserver"; dotenv.config(); const dbclient: mongoDB.MongoClient = new mongoDB.MongoClient(env.MONGO_DB!); const db: mongoDB.Db = dbclient.db(env.DB_NAME!); export { db, dbclient }; const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMessageReactions, GatewayIntentBits.GuildMembers, GatewayIntentBits.MessageContent, ], partials: [ Partials.Message, Partials.Channel, Partials.Reaction, Partials.User, ], }); let readyClient: typeof client | null = null; client.once(Events.ClientReady, async (rc) => { readyClient = rc; console.log(`Logged in as ${rc.user.tag}`); const dirs = [ path.join(__dirname, "commands"), // load commands first path.join(__dirname, "handlers"), path.join(__dirname, "listeners"), ]; for (const dir of dirs) { await loadModulesFromDir(dir, client); } }); // Start webserver in the background webserver().catch(console.error); // Exports export { client, readyClient }; client.login(process.env.DISCORD_TOKEN);