Moderation
Ban, kick, and unban with permission checks.
Always check the moderator's permissions before calling guild moderation helpers. See Permissions.
Ban options are camelCase: reason, deleteMessageDays (0 to 7), banDurationSeconds. Kick and unban take a user ID only.
Ban
javascript
const userId = parseUserMention(target);
if (userId) {
await guild.ban(userId, {
reason: rest.join(' ') || undefined,
deleteMessageDays: 1,
});
await message.reply(`Banned <@${userId}>.`);
}Kick
javascript
const userId = parseUserMention(target);
if (userId) {
await guild.kick(userId);
await message.reply(`Kicked <@${userId}>.`);
}Unban
javascript
const userId = parseUserMention(target);
if (userId) {
await guild.unban(userId);
await message.reply(`Unbanned <@${userId}>.`);
}Skeleton with permission checks
javascript
import { Client, Events, PermissionFlags, parseUserMention } from '@fluxerjs/core';
const PREFIX = '!';
const client = new Client({ intents: 0 });
async function getModeratorPerms(message) {
const guild = message.guild ?? (await message.client.guilds.resolve(message.guildId));
if (!guild) return null;
const member =
guild.members.get(message.author.id) ??
(await guild.fetchMember(message.author.id).catch(() => null));
return member?.permissions ?? null;
}
client.on(Events.MessageCreate, async (message) => {
if (message.author.bot || !message.content?.startsWith(PREFIX)) return;
const [cmd, target, ...rest] = message.content.slice(PREFIX.length).trim().split(/\s+/);
const perms = await getModeratorPerms(message);
if (!perms) return;
const guild = message.guild ?? (await message.client.guilds.resolve(message.guildId));
if (!guild) return;
const canBan =
perms.has(PermissionFlags.BanMembers) || perms.has(PermissionFlags.Administrator);
const canKick =
perms.has(PermissionFlags.KickMembers) || perms.has(PermissionFlags.Administrator);
if (cmd === 'ban' && canBan) {
const userId = parseUserMention(target);
if (userId) {
await guild.ban(userId, {
reason: rest.join(' ') || undefined,
deleteMessageDays: 1,
});
await message.reply(`Banned <@${userId}>.`);
}
}
if (cmd === 'kick' && canKick) {
const userId = parseUserMention(target);
if (userId) {
await guild.kick(userId);
await message.reply(`Kicked <@${userId}>.`);
}
}
});
await client.login(process.env.FLUXER_BOT_TOKEN);Full bot with embeds and error mapping: moderation-bot. Error codes: Errors.