feat(bot-discord): mute and unmute command

This commit is contained in:
GramingFoxTeam
2023-08-07 13:15:19 +03:00
parent d11ee5f01f
commit e5cf9f214e
13 changed files with 605 additions and 6 deletions

View 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;
}