#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. Если это работает, примите ответ, чтобы другие, у кого такая же проблема, могли знать!