Подключение.воспроизведение не является функцией

#javascript #audio-player

#javascript #аудиоплеер

Вопрос:

Я просто пытаюсь создать discord bot на javascript, и я хочу, чтобы, когда кто-то присоединится к голосовому чату, бот присоединился. Но когда я попробую это, бот присоединится, но я получу сообщение об ошибке. Я начал этот день, и это просто так, для развлечения. Если у кого-нибудь что-то есть, пожалуйста, скажите мне, я новичок.

 const Discord = require('discord.js');
const client = new Discord.Client();

const prefix = 'more '

client.once('ready', () => {
    console.log('Hello ')
});



client.on('message', async message =>{

    //if(!message.content.startsWith(prefix) || message.author.bot) return;

    if (message.content === '%play') {
        // Join the same voice channel of the author of the message
        if (message.member.voice.channel) {
            const connection = await message.member.voice.channel.join();
            // Play audio, see below
            const dispatcher = connection.play('sound.mp3');
            dispatcher.on('finish', () => message.member.voice.channel.leave());
        }};
    const args = message.content.slice(prefix.length).split(/  /);
    const command = args.shift().toLowerCase();

    if(command === 'play'){
        message.channel.send('%play');
        return;
    }



});


client.on("voiceStateUpdate", (oldVoiceState, newVoiceState) => { // Listeing to the voiceStateUpdate event
    if (newVoiceState.channel) { // The member connected to a channel.
        const connection = newVoiceState.channel.join();
            // Play audio, see below
            const dispatcher = connection.play('sound.mp3');
            dispatcher.on('finish', () => newVoiceState.channel.leave());
    } else if (oldVoiceState.channel) { // The member disconnected from a channel.
        console.log(`${oldVoiceState.member.user.tag} disconnected from ${oldVoiceState.channel.name}.`)
    };
});

client.login('NjI2ODQ0NDIzOTY3MzQyNjAz.XY0AXA.WEghPj9EZkLFPblsORUhVgvNkYI');
 

И вот ошибка:

 TypeError: newVoiceState.channel.play is not a function
    at Client.client.on (C:UsersAdminDesktopDiscordBotmain.js:41:54)
    at Client.emit (events.js:198:13)
    at VoiceStateUpdate.handle (C:UsersAdminDesktopDiscordBotnode_modulesdiscord.jssrcclientactionsVoiceStateUpdate.js:40:14)
    at Object.module.exports [as VOICE_STATE_UPDATE] (C:UsersAdminDesktopDiscordBotnode_modulesdiscord.jssrcclientwebsockethandlersVOICE_STATE_UPDATE.js:4:35)
    at WebSocketManager.handlePacket (C:UsersAdminDesktopDiscordBotnode_modulesdiscord.jssrcclientwebsocketWebSocketManager.js:384:31)
    at WebSocketShard.onPacket (C:UsersAdminDesktopDiscordBotnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:444:22)
    at WebSocketShard.onMessage (C:UsersAdminDesktopDiscordBotnode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:301:10)
    at WebSocket.onMessage (C:UsersAdminDesktopDiscordBotnode_moduleswslibevent-target.js:132:16)
    at WebSocket.emit (events.js:198:13)
    at Receiver.receiverOnMessage (C:UsersAdminDesktopDiscordBotnode_moduleswslibwebsocket.js:825:20)
 

Спасибо за некоторую помощь.

Ответ №1:

Вам нужно добавить await ключевое слово в эту часть кода: const connection = newVoiceState.channel.join(); , оно превратится в const connection = await newVoiceState.channel.join(); . Это должно сработать! Другой способ, которым вы можете это сделать, — использовать .затем в функции join, поскольку она возвращает обещание. Подробнее об этом читайте здесь: https://discord.js.org/#/docs/main/stable/class/VoiceChannel?scrollTo=join

Комментарии:

1. Если это работает, примите ответ, чтобы другие, у кого такая же проблема, могли знать!