feat(bot-discord): moderation commands

This commit is contained in:
GramingFoxTeam
2023-07-31 19:47:45 +03:00
parent 9ed5365811
commit df363224e7
7 changed files with 131 additions and 3 deletions

View File

@@ -0,0 +1,45 @@
import { SlashCommandBuilder } from 'discord.js';
import { checkForPerms } from '../utils/checkModPerms.js';
import reportToLogs from '../utils/reportToLogs.js';
export default {
data: new SlashCommandBuilder()
.setName('ban')
.setDescription('Ban a member.')
.setDMPermission(false)
.addStringOption(option =>
option
.setName('user')
.setDescription('The member to ban')
.setRequired(true)
)
.addIntegerOption(option =>
option
.setName('dmd')
.setDescription('Amount of days to delete messages')
)
.addStringOption(option =>
option
.setName('reason')
.setDescription('Reason for the ban')
),
async execute(_, config, interaction) {
if (!checkForPerms(config, interaction.member)) return interaction.reply({
epheremal: true,
content: 'You don\'t have the required permissions.'
});
interaction.guild.members.ban(interaction.getString('user'), {
reason: interaction.getString('reason'),
deleteMessageSeconds: interaction.getInteger('dmd') ?
interaction.getInteger('dmd') * 86_400 : 0
});
reportToLogs(config, interaction.client, 'banned', null, {
reason: interaction.getString('reason'),
actionTo: await client.users.fetch(interaction.getString('user')),
actionBy: interaction.member,
channel: interaction.channel
});
}
};

View File

@@ -1,4 +1,4 @@
import { checkForPerms } from '../utils/checkPerms.js';
import { checkForPerms } from '../utils/checkSupporterPerms.js';
import trainAISelectMenu from '../utils/trainAISelectMenu.js';
export default {

View File

@@ -1,4 +1,4 @@
import { checkForPerms } from '../utils/checkPerms.js';
import { checkForPerms } from '../utils/checkSupporterPerms.js';
export default {
data: {

View File

@@ -0,0 +1,42 @@
import { SlashCommandBuilder } from 'discord.js';
import { checkForPerms } from '../utils/checkModPerms';
import reportToLogs from '../utils/reportToLogs.js';
export default {
data: new SlashCommandBuilder()
.setName('ban')
.setDescription('Ban a member.')
.setDMPermission(false)
.addStringOption(option =>
option
.setName('user')
.setDescription('The member to ban')
.setRequired(true)
)
.addIntegerOption(option =>
option
.setName('dmd')
.setDescription('Amount of days to delete messages')
)
.addStringOption(option =>
option
.setName('reason')
.setDescription('Reason for the ban')
),
async execute(_, config, interaction) {
if (!checkForPerms(config, interaction.member)) return interaction.reply({
epheremal: true,
content: 'You don\'t have the required permissions.'
});
interaction.guild.members.unban(interaction.getString('user'),
interaction.getString('reason'));
reportToLogs(config, interaction.client, 'unbanned', null, {
reason: interaction.getString('reason'),
actionTo: await client.users.fetch(interaction.getString('user')),
actionBy: interaction.member,
channel: interaction.channel
});
}
};

View File

@@ -1,5 +1,5 @@
export function checkForPerms(config, member) {
for (let role in config.discord.trainRoles) {
for (const role in config.discord.modRoles) {
if (member.roles.cache.get(role)) {
return true;
}

View File

@@ -0,0 +1,8 @@
export function checkForPerms(config, member) {
for (const role in config.discord.trainRoles) {
if (member.roles.cache.get(role)) {
return true;
}
}
return false;
}

View File

@@ -0,0 +1,33 @@
import { EmbedBuilder, messageLink } from 'discord.js';
export default async function reportToLogs(config, client, action, message, { reason, expire, actionTo, actionBy }, channel) {
const channel = await client.channels.fetch(config.logs.channelId);
const thread = await channel.threads.fetch(config.logs.threadId);
const actionEmbed = new EmbedBuilder()
.setThumbnail(actionTo.user.avatarURL());
const fields = [
{ name: 'Action', value: `${actionTo.toString()} was ${action} by ${actionBy.toString()}` }
];
if (action === 'banned' || action === 'muted') fields.push({
name: 'Reason',
value: reason ? reason : 'No reason provided'
});
if (expire) fields.push({ name: 'Expires', value: `<t:${expire}:F>`});
if (!message) fields.push({ name: 'Reference', value: `[Jump to message](${messageLink(
message.channelId,
message.id,
message.guild.id)})`
});
actionEmbed.setFields(fields);
if (channel) {
const msg = await channel.send({ embeds: [actionEmbed] });
reportToLogs(config, client, action, msg, { reason, expire, actionTo, actionBy });
} else thread.send({ embeds: [actionEmbed] });
}