NodeJS discord.js v14 -将成员移动到语音通道

pnwntuvh  于 2023-03-07  发布在  Node.js
关注(0)|答案(1)|浏览(142)

通过slashcommand /crociera,我尝试每隔2秒将提到的用户从他所在的语音通道移动到语音通道列表。在调试中,我收到此错误:

CANALE: <#729013398368419891>
Errore durante lo spostamento dell'UTENTE:<@836003700588937268> nel CANALE: <#729013398368419891> con errore: TypeError: Cannot read properties of undefined (reading 'setChannel')
CANALE: <#729016216894832641>
Errore durante lo spostamento dell'UTENTE:<@836003700588937268> nel CANALE: <#729016216894832641> con errore: TypeError: Cannot read properties of undefined (reading 'setChannel')
CANALE: <#892746358061146152>
Errore durante lo spostamento dell'UTENTE:<@836003700588937268> nel CANALE: <#892746358061146152> con errore: TypeError: Cannot read properties of undefined (reading 'setChannel')
CANALE: <#729016744605384784>
Errore durante lo spostamento dell'UTENTE:<@836003700588937268> nel CANALE: <#729016744605384784> con errore: TypeError: Cannot read properties of undefined (reading 'setChannel')

根据我的法典:

const { SlashCommandBuilder } = require('@discordjs/builders');
const { Permissions, PermissionsBitField} = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('crociera')
        .setDescription('Sposta un utente nei canali vocali specificati')
        .addUserOption(option => 
            option.setName('utente')
                .setDescription('L\'utente da spostare')
                .setRequired(true)
        ),
    
    async execute(interaction) {
        const userToMove = interaction.options.getUser('utente');
        await interaction.reply(`Ciao, ${userToMove}!`);
        //const userToMove = interaction.options.getUser('userToMove');
        console.log(`LOG DI USER ${userToMove}`)
        
        // Controllo delle autorizzazioni dell'utente
        if (!interaction.member.permissions.has(PermissionsBitField.Flags.MoveMembers)) {
            return interaction.editReply('Non hai il permesso di spostare membri.');
        }
         
        if (!userToMove) {
            await interaction.editReply('Error: Didn\'t specify member.');          
            return;
        }
        //if (!userToMove.voice.channel) {
        //    await interaction.editReply('Error: Mentioned member is not in a Voice Channel.');
        //    return;
        //}
        
        //if (!(interaction.member.voice.channel)) {
        //    return await interaction.reply({ content: "You need to join a Voice-Channel first.", ephemeral: true });
        //}
        //if (!(userToMove.voice.channelId)) {
        //    return await interaction.reply({ content: "The Member is currently not in a Voice-Channel.", ephemeral: true });
        //}
        

    
        // Ottiene i canali vocali di destinazione
        const channelIds = ['729013398368419891', '729016216894832641', '892746358061146152', '729016744605384784'];
        const channels = channelIds.map(id => interaction.guild.channels.cache.get(id)).filter(Boolean);
        console.log(`CANALI: ${channels}`)
        if (channels.length === 0) {
            return interaction.editReply('Non sono stati trovati i canali vocali di destinazione.');
        }

        // Sposta l'utente nei canali vocali
        for (const channel of channels) {
            try {
                console.log(`CANALE: ${channel}`)
                await userToMove.voice.setChannel(channel);
                await new Promise(resolve => setTimeout(resolve, 2000)); // Attendere 2 secondi prima di spostarsi di nuovo
            } catch (error) {
                console.error(`Errore durante lo spostamento dell'UTENTE:${userToMove} nel CANALE: ${channel} con errore: ${error}`);
            }
        }

        await interaction.editReply(`L'utente ${userToMove} è stato spostato nei canali vocali specificati.`);
    },
};

我尝试了所有我知道的方法,但我不能解决它,你能帮助我吗?我不是很熟悉discord.js。我看到其他3d,但不能解决我的问题。谢谢

to94eoyn

to94eoyn1#

User没有语音状态,只有GuildMember有。interaction.options.getUser('utente')返回User。您需要将其更改为interaction.options.getMember('utente')才能接收GuildMember

相关问题