Home > Blockchain >  DiscordJS move all members in a specific vc
DiscordJS move all members in a specific vc

Time:04-17

I'm trying to find a way to move all members which are in a specific vc to the vc which the sender of the command is in. The command should be -warp. This is what i have so far:

        if (!message.member?.permissions.has('MOVE_MEMBERS')) return;
        const member = message.mentions.members?.first();
        if (!member) return message.reply("Error: Didn't specify member.");
        if (!member.voice.channel) return message.reply("Error: Mentioned member is not in a Voice Channel.");

        if (!message.member.voice.channel) return message.reply("Error: Executor of command is not in a Voice Channel.");
        member.voice.setChannel(message.member.voice.channel)
        message.reply('Success: Moved member.')

It works but i can only move one user at the time and from every vc. I want everyone to be able to move others but only from a specific vc. Thanks for your help!

CodePudding user response:

This works for me, let me know if you have any troubles:

client.on('messageCreate', async message => {
    if (message.author.bot) return;
    if (message.content === '-warp') {
        // doing the same validation here as you did
        if (!message.member.voice.channel) {
            await message.reply('Error: Executor of command is not in a Voice Channel.');
            return;
        }
        const sendersChannel = message.member.voice.channel;
        const mentionedMember = message.mentions.members?.first();
        if (!mentionedMember) {
            await message.reply('Error: Didn\'t specify member.');
            return;
        }
        if (!mentionedMember.voice.channel) {
            await message.reply('Error: Mentioned member is not in a Voice Channel.');
            return;
        }
        // get the channel of the mentioned member
        const targetChannel = mentionedMember.voice.channel;
        // iterate over all the members in that voice channel and move them to the sender's channel
        for (const [, member] of targetChannel.members) {
            await member.voice.setChannel(sendersChannel);
        }
        await message.reply(`Moved all members from ${targetChannel.name} to ${sendersChannel.name}`);
    }
});

CodePudding user response:

Give this a try

    const channel2pullFrom = message.guild.channels.cache.get(‘channelID’)
    const sendersChannel = message.member.voice.channel.id
    const totalCount = channel2pullFrom.members.size

    if (!message.member.permissions.has('MOVE_MEMBERS')) return
    if (!message.member.voice.channel) return message.reply("Error: Executor of command is not in a Voice Channel.")
   
    channel2pullFrom.members.forEach((member) => {
        member.voice.setChannel(sendersChannel)
    })
   
    message.reply(`Moved ${totalCount} members.`)

Code:

Code

Before Command:

Before Command

After Command:

After Command

  • Related