mirror of
https://github.com/ReVanced/revanced-bots.git
synced 2026-01-19 17:23:59 +00:00
81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
import parse from 'parse-duration'
|
|
import setMuteTimeout from './setMuteTimeout.js';
|
|
|
|
parse['mo'] = parse['month']
|
|
|
|
export default async function muteMember(config, member, { duration, reason, supportMute }) {
|
|
let expires;
|
|
|
|
if (supportMute) {
|
|
expires = Date.now() + duration;
|
|
} else {
|
|
const parsedDuration = parse(duration);
|
|
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('muted').findOne({
|
|
guild_id: member.guild.id,
|
|
user_id: member.id
|
|
});
|
|
|
|
if (existingMute) {
|
|
// Update existing mute
|
|
|
|
await member.client.db.collection('muted').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('muted').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, member.client);
|
|
|
|
// Return parsed time for the mute command to resolve.
|
|
return expires;
|
|
} |