Files
keiko/src/index.ts
T
naomi 8eb0c19709
Node.js CI / Lint and Test (push) Successful in 39s
fix: guild intents
2025-10-09 15:05:56 -07:00

85 lines
2.2 KiB
TypeScript

/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { DiscordAnalytics } from "@nhcarrigan/discord-analytics";
import {
Client,
Events,
GatewayIntentBits,
Partials,
} from "discord.js";
import { onMessage } from "./events/onMessage.js";
import { clear } from "./modules/clear.js";
import { dm } from "./modules/dm.js";
import { instantiateServer } from "./server/serve.js";
import { logger } from "./utils/logger.js";
process.on("unhandledRejection", (error) => {
if (error instanceof Error) {
void logger.error("Unhandled Rejection", error);
return;
}
void logger.error("unhandled rejection", new Error(String(error)));
});
process.on("uncaughtException", (error) => {
if (error instanceof Error) {
void logger.error("Uncaught Exception", error);
return;
}
void logger.error("uncaught exception", new Error(String(error)));
});
const client = new Client({
intents: [
GatewayIntentBits.DirectMessages,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.Guilds,
],
partials: [ Partials.Channel ],
});
const analytics = new DiscordAnalytics(client, logger);
client.on(Events.InteractionCreate, (interaction) => {
if (interaction.isChatInputCommand()) {
switch (interaction.commandName) {
case "dm":
void dm(interaction);
break;
case "clear":
void clear(interaction);
break;
default:
void interaction.reply({
content: `I'm sorry, I don't know the ${interaction.commandName} command.`,
ephemeral: true,
});
break;
}
}
});
client.on(Events.MessageCreate, (message) => {
void onMessage(message);
});
client.on(Events.EntitlementCreate, (entitlement) => {
void logger.log("info", `User ${entitlement.userId} has subscribed!`);
});
client.on(Events.EntitlementDelete, (entitlement) => {
void logger.log("info", `User ${entitlement.userId} has unsubscribed... :c`);
});
client.on(Events.ClientReady, () => {
void logger.log("debug", "Bot is ready.");
analytics.startCron();
});
instantiateServer();
await client.login(process.env.DISCORD_TOKEN);