Files
euba-itckar-bot/index.js
2026-09-23 18:31:15 +02:00

100 lines
3.1 KiB
JavaScript

import { ApplicationCommandTypes, Client, ComponentTypes, InteractionTypes } from "oceanic.js";
import { readdir } from "node:fs/promises";
import { KVDB } from "./utils/kvdb";
const db = new KVDB("data/db.sqlite");
const client = new Client({
token: process.env.TOKEN
});
const commandFiles = await readdir("./commands", { recursive: true });
const commandsData = []
const commands = new Map()
for (const commandFile of commandFiles) {
const command = (await import(`./commands/${commandFile}`)).default
commandsData.push(command.data)
commands.set(command.data.name, command)
}
const buttonFiles = await readdir("./buttons", { recursive: true });
const buttonsData = []
const buttons = new Map()
for (const buttonFile of buttonFiles) {
const button = (await import(`./buttons/${buttonFile}`)).default
buttonsData.push(button.data)
buttons.set(button.data.name, button)
}
const modalFiles = await readdir("./modals", { recursive: true });
const modalsData = []
const modals = new Map()
for (const modalFile of modalFiles) {
const modal = (await import(`./modals/${modalFile}`)).default
modalsData.push(modal.data)
modals.set(modal.data.name, modal)
}
client.on("ready", async() => {
await client.application.bulkEditGlobalCommands(commandsData);
console.log("Ready as", client.user.tag);
});
// if you do not add a listener for the error event, any errors will cause an UncaughtError to be thrown,
// and your process may be killed as a result.
client.on("error", (err) => {
console.error("bro vazne..", err);
});
client.on("interactionCreate", async(interaction) => {
switch(interaction.type) {
// https://docs.oceanic.ws/latest/classes/CommandInteraction.html
case InteractionTypes.APPLICATION_COMMAND:
// data = https://docs.oceanic.ws/latest/interfaces/Types_Interactions.ApplicationCommandInteractionData.html
switch(interaction.data.type) {
// Chat Input commands are what you use in the chat, i.e. slash commands
case ApplicationCommandTypes.CHAT_INPUT:
const command = commands.get(interaction.data.name)
if (!command)
return await interaction.reply("invalid command")
await command.handle(interaction, db)
break
}
break
case InteractionTypes.MESSAGE_COMPONENT:
switch(interaction.data.componentType) {
case ComponentTypes.BUTTON:
const button = buttons.get(interaction.data.customID.split(".")[0])
if (!button)
return await interaction.reply("something went wrong")
await button.handle(interaction, db)
break
}
break
case InteractionTypes.MODAL_SUBMIT:
const modal = modals.get(interaction.data.customID.split(".")[0])
if (!modal)
return await interaction.reply("something went wrong")
await modal.handle(interaction, db)
break
}
});
await client.connect();