import runServer from "./api/index.js";
import client from "./utils/client.js";
// @ts-expect-error
import config from "./config/main.json" assert { type: "json" };
import register from "./utils/commandRegistration/register.js";

client.on("ready", () => {
    console.log(`Logged in as ${client.user!.tag}!`);
    register();
    runServer(client);
});
process.on("unhandledRejection", (err) => {
    console.error(err);
});
process.on("uncaughtException", (err) => {
    console.error(err);
});

if (config.enableDevelopment) { await client.login(config.developmentToken); }
else { await client.login(config.token); }
