Enhance bot functionality with AutoMod, Logging, Welcome, and Verification features
- Implemented AutoMod capabilities including spam filtering, anti-raid, and anti-nuke actions. - Added Logging module to track moderation actions and events across the bot. - Introduced Welcome module for customizable welcome messages and autoroles. - Developed Verification system with captcha and role assignment features. - Updated Prisma schema to include new models for AutoMod, Logging, Welcome, and Verification. - Enhanced command localization for new features in both German and English. - Improved health server to handle captcha verification requests. - Added new environment variable for public base URL to support captcha links.
This commit is contained in:
@@ -20,6 +20,12 @@ import {
|
||||
} from './modules/moderation/confirmations.js';
|
||||
import { getGuildLocale } from './i18n.js';
|
||||
import { t } from '@nexumi/shared';
|
||||
import { handleAutoModMessage } from './modules/automod/actions.js';
|
||||
import { registerLoggingEvents } from './modules/logging/events.js';
|
||||
import { registerWelcomeEvents } from './modules/welcome/events.js';
|
||||
import { registerVerificationEvents } from './modules/verification/events.js';
|
||||
import { handleVerificationButton } from './modules/verification/handlers.js';
|
||||
import { isVerificationButton } from './modules/verification/service.js';
|
||||
|
||||
const isShard = process.argv.includes('--shard');
|
||||
|
||||
@@ -38,20 +44,35 @@ if (!isShard) {
|
||||
GatewayIntentBits.Guilds,
|
||||
GatewayIntentBits.GuildMembers,
|
||||
GatewayIntentBits.GuildMessages,
|
||||
GatewayIntentBits.GuildModeration,
|
||||
GatewayIntentBits.GuildVoiceStates,
|
||||
GatewayIntentBits.GuildEmojisAndStickers,
|
||||
GatewayIntentBits.GuildInvites,
|
||||
GatewayIntentBits.MessageContent
|
||||
],
|
||||
partials: [Partials.Channel]
|
||||
partials: [Partials.Channel, Partials.Message, Partials.GuildMember]
|
||||
});
|
||||
|
||||
const context: BotContext = { client, prisma, redis };
|
||||
startWorkers(context);
|
||||
await ensureRecurringJobs();
|
||||
registerLoggingEvents(context);
|
||||
registerWelcomeEvents(context);
|
||||
registerVerificationEvents(context);
|
||||
|
||||
client.on(Events.ClientReady, async () => {
|
||||
logger.info({ tag: client.user?.tag }, 'Bot ready');
|
||||
await registerCommands();
|
||||
});
|
||||
|
||||
client.on(Events.MessageCreate, async (message) => {
|
||||
try {
|
||||
await handleAutoModMessage(context, message);
|
||||
} catch (error) {
|
||||
logger.error({ error, messageId: message.id }, 'AutoMod message handler failed');
|
||||
}
|
||||
});
|
||||
|
||||
client.on(Events.InteractionCreate, async (interaction: Interaction) => {
|
||||
try {
|
||||
if (interaction.isChatInputCommand()) {
|
||||
@@ -63,6 +84,11 @@ if (!isShard) {
|
||||
await handleModerationConfirmation(interaction, context);
|
||||
return;
|
||||
}
|
||||
|
||||
if (interaction.isButton() && isVerificationButton(interaction.customId)) {
|
||||
await handleVerificationButton(interaction, context);
|
||||
return;
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error({ error }, 'Interaction handling failed');
|
||||
const locale = await getGuildLocale(context.prisma, interaction.guildId);
|
||||
|
||||
Reference in New Issue
Block a user