mirror of
https://github.com/ReVanced/revanced-bots.git
synced 2026-01-29 22:21: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;
|
||||
}
|
||||
Reference in New Issue
Block a user