64 lines
2.3 KiB
JavaScript
64 lines
2.3 KiB
JavaScript
import { Client, Collection, Events, GatewayIntentBits, PresenceUpdateStatus } from 'discord.js';
|
|
import { env, requireEnv } from './config/env.js';
|
|
import { migrate } from './db/migrate.js';
|
|
import { registerMessageCreate } from './events/messageCreate.js';
|
|
import { registerModerationLogs } from './events/guildBanKickLog.js';
|
|
import * as setup from './commands/setup.js';
|
|
import * as leaderboard from './commands/leaderboard.js';
|
|
import * as profile from './commands/profile.js';
|
|
import * as resetmemory from './commands/resetmemory.js';
|
|
import { banExecute, kickExecute, timeoutExecute } from './commands/moderation.js';
|
|
import { startQotdScheduler } from './scheduler/qotd.js';
|
|
requireEnv('discordToken');
|
|
const client = new Client({
|
|
intents: [
|
|
GatewayIntentBits.Guilds,
|
|
GatewayIntentBits.GuildMembers,
|
|
GatewayIntentBits.GuildMessages,
|
|
GatewayIntentBits.MessageContent
|
|
]
|
|
});
|
|
const commands = new Collection();
|
|
commands.set('setup', setup.execute);
|
|
commands.set('leaderboard', leaderboard.execute);
|
|
commands.set('profile', profile.execute);
|
|
commands.set('resetmemory', resetmemory.execute);
|
|
commands.set('ban', banExecute);
|
|
commands.set('kick', kickExecute);
|
|
commands.set('timeout', timeoutExecute);
|
|
client.once(Events.ClientReady, async (c) => {
|
|
await migrate();
|
|
registerMessageCreate(client);
|
|
registerModerationLogs(client);
|
|
startQotdScheduler(client);
|
|
const setPresence = () => {
|
|
const count = c.guilds.cache.size;
|
|
c.user.setPresence({
|
|
status: PresenceUpdateStatus.Online,
|
|
activities: [{ name: `${count} servers`, type: 3 }]
|
|
});
|
|
};
|
|
setPresence();
|
|
setInterval(setPresence, 60_000);
|
|
console.log(`Logged in as ${c.user.tag}`);
|
|
});
|
|
client.on(Events.InteractionCreate, async (interaction) => {
|
|
if (!interaction.isChatInputCommand())
|
|
return;
|
|
const fn = commands.get(interaction.commandName);
|
|
if (!fn)
|
|
return;
|
|
try {
|
|
await fn(interaction);
|
|
}
|
|
catch (e) {
|
|
const msg = 'Error while executing command.';
|
|
if (interaction.deferred || interaction.replied)
|
|
await interaction.followUp({ content: msg, ephemeral: true }).catch(() => null);
|
|
else
|
|
await interaction.reply({ content: msg, ephemeral: true }).catch(() => null);
|
|
console.error(e);
|
|
}
|
|
});
|
|
client.login(env.discordToken);
|