mirror of
https://github.com/ReVanced/revanced-bots.git
synced 2026-01-11 13:56:15 +00:00
feat(bot-discord): moderation commands
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { checkForPerms } from '../utils/checkPerms.js';
|
||||
import { checkForPerms } from '../utils/checkSupporterPerms.js';
|
||||
import trainAISelectMenu from '../utils/trainAISelectMenu.js';
|
||||
|
||||
export default {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { checkForPerms } from '../utils/checkPerms.js';
|
||||
import { checkForPerms } from '../utils/checkSupporterPerms.js';
|
||||
|
||||
export default {
|
||||
data: {
|
||||
|
||||
42
apps/bot-discord/src/commands/unban.js
Normal file
42
apps/bot-discord/src/commands/unban.js
Normal 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
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -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;
|
||||
}
|
||||
8
apps/bot-discord/src/utils/checkSupporterPerms.js
Normal file
8
apps/bot-discord/src/utils/checkSupporterPerms.js
Normal 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;
|
||||
}
|
||||
33
apps/bot-discord/src/utils/reportToLogs.js
Normal file
33
apps/bot-discord/src/utils/reportToLogs.js
Normal 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] });
|
||||
}
|
||||
Reference in New Issue
Block a user