Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
7
rated 0 times [  10] [ 3]  / answers: 1 / hits: 5589  / 3 Years ago, sun, april 4, 2021, 12:00:00

I would like to know how to kick/disconnect someone from the voice channel the user is in, or a specific channel. I learned how to kick someone and here is my code:


const discord = require('discord.js');
const config = require('../config.json');

module.exports.run = async (bot, message, args) => {
const member = message.mentions.users.first();
if (!message.member.hasPermission('KICK_MEMBERS'))
return message.reply(
'NO tiene permiso para este comando mijo, ojo con ratismos inadecuados',
);
if (member) {
const memberTarget = message.guild.members.cache.get(member.id);
memberTarget.kick();
message.channel.send(`<@${memberTarget.user.id}> pa juera de esta monda`);
} else {
message.channel.send('aja y a quien? a ti q?');
}
};

module.exports.help = {
name: 'kick',
};

I tried using memberTarget.voicechat.disconnect() instead of memberTarget.kick() and other codes. I tried from Discord.js.org but I don't get to do that, so I would be highly thankful if anyone could help me with this!


More From » node.js

 Answers
18

While memberTarget.kick() kicks someone from the server, memberTarget.voice.kick() kicks someone from the voice channel. You could also get the first mentioned member using message.mentions.members.first().


If you use mentions.members instead of mentions.users you don't need to get the member from the user id.


Also, memberTarget.kick() will return a promise, so you should only send the message when it's resolved and handle rejections if there are any (using catch()).


See the code below:


module.exports.run = async (bot, message, args) => {
const memberTarget = message.mentions.members.first();

if (!message.member.hasPermission('KICK_MEMBERS'))
return message.reply(
'NO tiene permiso para este comando mijo, ojo con ratismos inadecuados',
);

if (!memberTarget)
return message.channel.send('aja y a quien? a ti q?');

if (!memberTarget.voice.channel)
return message.channel.send(`${memberTarget} no está en chat de voz`);

memberTarget.voice
.kick()
.then((member) => message.channel.send(`${member} pa juera de esta monda`))
.catch(console.error);
};

If you want to be able to mention more than one member you can iterate over message.mentions.members using the .each() method:


if (!message.member.hasPermission('KICK_MEMBERS'))
return message.reply(
'NO tiene permiso para este comando mijo, ojo con ratismos inadecuados',
);

if (!message.mentions.members.size) {
return message.channel.send('aja y a quien? a ti q?');
}

message.mentions.members.each((memberTarget) => {
if (!memberTarget.voice.channel)
return message.channel.send(`${memberTarget} no está en chat de voz`);

memberTarget.voice
.kick()
.then((member) =>
message.channel.send(`${member} pa juera de esta monda`),
)
.catch(console.error);
});

enter


If you want to add a counter, you need to wait until the bot tried to kick out every mentioned member. You can use await Promise.all to wait for all of them to finish and instead of mentions.members.each you need to use mentions.members.map which will return a new promise for each member:


if (!message.member.hasPermission('KICK_MEMBERS'))
return message.reply(
'NO tiene permiso para este comando mijo, ojo con ratismos inadecuados',
);

if (!message.mentions.members.size) {
return message.channel.send('aja y a quien? a ti q?');
}

const counters = { notInVoiceChannel: 0, kicked: 0, error: 0 };

await Promise.all(
message.mentions.members.map(async (memberTarget) => {
if (!memberTarget.voice.channel) {
return (counters.notInVoiceChannel += 1);
}
try {
memberTarget.voice.kick();
counters.kicked += 1;
} catch (error) {
console.log(error);
counters.error += 1;
}
}),
);

return message.channel.send(
`**Kicked out:** ${counters.kicked}n**Not in a voice channel:** ${counters.notInVoiceChannel}n**Errors:** ${counters.error}`,
);

enter


[#1531] Tuesday, March 30, 2021, 3 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
andreguym

Total Points: 125
Total Questions: 112
Total Answers: 103

Location: Wallis and Futuna
Member since Tue, Mar 30, 2021
3 Years ago
;