joel joel joel

This commit is contained in:
2024-05-02 13:22:15 +02:00
commit 73200479bd
20 changed files with 684 additions and 0 deletions

125
index.ts Normal file
View File

@@ -0,0 +1,125 @@
import { ActivityType, Events, GatewayIntentBits } from "discord.js";
import { DiscordClient } from "./client";
import { readCommands } from "./commands";
import { registerCommands } from "./commands/register";
import { setSleepTimer, startTimer } from "./utils";
let wakeUpInterval: Timer;
// create a new Client instance
const client = new DiscordClient({
intents: [
GatewayIntentBits.MessageContent,
GatewayIntentBits.Guilds,
GatewayIntentBits.DirectMessages,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildModeration,
],
});
// listen for the client to be ready
client.once(Events.ClientReady, async (c) => {
console.log(`Ready! Logged in as ${c.user.tag}`);
const commands = await readCommands();
commands.forEach((command) => {
client.commands.set(command.data.name, command);
});
await registerCommands(commands, c.user.id);
startTimer(client, 5 * 1000);
console.log("timer started");
});
client.on(Events.MessageCreate, async (message) => {
if (message.author.id === client.user?.id) return;
if (
message.mentions.has(client.user!.id) ||
message.content.toLowerCase().includes("joel")
) {
message.channel.sendTyping();
let reference: string | undefined;
if (message.reference) {
const referenceMessage = await message.fetchReference();
reference = referenceMessage.content
.replace(/<@!?(\d+)>/g, (match, id) => {
const user = message.guild?.members.cache.get(id);
return user ? user.displayName : match;
})
.trim();
}
// convert mentions to regular text
const content = message.content
.replace(/<@!?(\d+)>/g, (match, id) => {
const user = message.guild?.members.cache.get(id);
return user ? user.displayName : match;
})
.trim();
try {
const response = await client.ai.ask(
content,
message.author.username,
reference
);
const text = response.choices[0].message.content;
// if message is longer than 2000 characters, send it in chunks
const slices = text?.replace("\n\n", "\n").match(/.{1,2000}/gs) || [
"🟥 There was an error while processing this message!",
];
slices.forEach(async (slice, index) => {
if (index === 0) {
await message.reply({
content: slice,
});
} else {
await message.channel.send({
content: slice,
});
}
});
setSleepTimer(client);
} catch (error) {
startTimer(client, 5 * 1000);
await message.reply({
content: "🟥 Joel fucking sover! Ge honom en minut eller två",
});
}
}
});
client.on(Events.InteractionCreate, async (interaction) => {
if (!interaction.isChatInputCommand()) return;
console.log(interaction.commandName);
const command = client.commands.get(interaction.commandName);
if (!command) {
console.error(`No command matching ${interaction.commandName} was found.`);
return;
}
try {
await command.execute(interaction);
} catch (error) {
console.error(error);
if (interaction.replied || interaction.deferred) {
await interaction.followUp({
content: "There was an error while executing this command!",
ephemeral: true,
});
} else {
await interaction.reply({
content: "There was an error while executing this command!",
ephemeral: true,
});
}
}
});
// login with the token from .env.local
client.login(process.env.DISCORD_TOKEN);