mirror of
https://github.com/ReVanced/revanced-bots.git
synced 2026-01-25 04:01:02 +00:00
feat(bot-discord): mute and unmute command
This commit is contained in:
74
apps/bot-discord/src/utils/muteMember.js
Normal file
74
apps/bot-discord/src/utils/muteMember.js
Normal file
@@ -0,0 +1,74 @@
|
||||
import parse from 'parse-duration'
|
||||
import setMuteTimeout from './setMuteTimeout.js';
|
||||
|
||||
parse['mo'] = parse['month']
|
||||
|
||||
export default async function muteMember(config, member, { duration, reason, supportMute }) {
|
||||
const parsedDuration = parse(duration);
|
||||
const expires = Date.now() + parsedDuration;
|
||||
const takenRoles = [];
|
||||
for (const takeRole of supportMute ?
|
||||
config.discord.mute.supportTakeRoles :
|
||||
config.discord.mute.takeRoles
|
||||
) {
|
||||
if (member.roles.cache.get(takeRole)) {
|
||||
takenRoles.push(takeRoles);
|
||||
}
|
||||
}
|
||||
|
||||
const existingMute = await member.client.db.collection('mute').findOne({
|
||||
guild_id: member.guild.id,
|
||||
user_id: member.id
|
||||
});
|
||||
|
||||
if (existingMute) {
|
||||
// Update existing mute
|
||||
|
||||
await member.client.db.collection('mute').updateOne({
|
||||
guild_id: member.guild.id,
|
||||
user_id: member.id
|
||||
}, {
|
||||
$set: {
|
||||
reason,
|
||||
expires,
|
||||
support_mute: supportMute
|
||||
}
|
||||
});
|
||||
|
||||
if (client.mutes.has(member.id)) {
|
||||
clearTimeout(client.mutes.get(member.id))
|
||||
client.mutes.delete(member.id);
|
||||
}
|
||||
} else {
|
||||
await member.client.db.collection('mute').insert({
|
||||
guild_id: member.guild.id,
|
||||
user_id: member.id,
|
||||
taken_roles: takenRoles,
|
||||
expires,
|
||||
reason,
|
||||
support_mute: supportMute
|
||||
});
|
||||
}
|
||||
|
||||
// Remove the roles, give defined roles.
|
||||
if (!existingMute) {
|
||||
member.roles.remove(takenRoles);
|
||||
member.roles.add(supportMute ?
|
||||
config.discord.mute.giveRoles :
|
||||
config.discord.mute.supportGiveRoles
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Start a timeout.
|
||||
setMuteTimeout({
|
||||
guild_id: member.guild.id,
|
||||
user_id: member.id,
|
||||
taken_roles: takenRoles,
|
||||
expires,
|
||||
support_mute: supportMute
|
||||
}, member.client.mutes);
|
||||
|
||||
// Return parsed time for the mute command to resolve.
|
||||
return expires;
|
||||
}
|
||||
@@ -3,9 +3,12 @@ import { EmbedBuilder, messageLink } from 'discord.js';
|
||||
export default async function reportToLogs(config, client, action, message, { reason, expire, actionTo, actionBy }, msgChannel) {
|
||||
const channel = await client.channels.fetch(config.logs.channelId);
|
||||
const thread = await channel.threads.fetch(config.logs.threadId);
|
||||
|
||||
|
||||
const actionUpper = action.charAt(0).toUpperCase() + action.slice(1);
|
||||
const actionTitle = `${actionUpper} ${actionTo.tag}`;
|
||||
const actionEmbed = new EmbedBuilder()
|
||||
.setThumbnail(actionTo.user.avatarURL());
|
||||
.setThumbnail(actionTo.user.avatarURL())
|
||||
.setTitle(actionTitle);
|
||||
|
||||
const fields = [
|
||||
{ name: 'Action', value: `${actionTo.toString()} was ${action} by ${actionBy.toString()}` }
|
||||
|
||||
19
apps/bot-discord/src/utils/setMuteTimeout.js
Normal file
19
apps/bot-discord/src/utils/setMuteTimeout.js
Normal file
@@ -0,0 +1,19 @@
|
||||
export default async function setMuteTimeout(mute, mutes) {
|
||||
const duration = Date.now() - mute.expires;
|
||||
mutes.set(mute.user_id, setTimeout(async() => {
|
||||
const guild = await client.guilds.fetch(mute.guild_id);
|
||||
let member;
|
||||
try {
|
||||
member = await guild.members.fetch(mute.user_id);
|
||||
} catch (_) {
|
||||
return;
|
||||
}
|
||||
|
||||
member.roles.add(mute.taken_roles);
|
||||
member.roles.remove(
|
||||
mute.support_mute ?
|
||||
config.discord.mute.supportGiveRoles :
|
||||
config.discord.mute.giveRoles
|
||||
);
|
||||
}, duration));
|
||||
}
|
||||
22
apps/bot-discord/src/utils/unmuteMember.js
Normal file
22
apps/bot-discord/src/utils/unmuteMember.js
Normal file
@@ -0,0 +1,22 @@
|
||||
export default async function unmuteMember(config, member) {
|
||||
const mute = await member.client.db.collection('mute').findOne({
|
||||
guild_id: member.guild.id,
|
||||
user_id: member.id
|
||||
});
|
||||
|
||||
if (!mute) return false;
|
||||
|
||||
member.roles.remove(mute.support_mute ?
|
||||
config.mute.supportGiveRoles :
|
||||
config.mute.giveRoles
|
||||
);
|
||||
|
||||
member.roles.add(mute.taken_roles);
|
||||
|
||||
await member.client.db.collection('mute').remove({
|
||||
guild_id: member.guild.id,
|
||||
user_id: member.id
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user