我在做一个不和谐的音乐机器人,我写了下面的代码:
module.exports = {
name: 'play',
aliases: ['p'],
description: 'Play a song',
guildOnly: true,
execute(message, args) {
const ytdl = require("ytdl-core");
var servers = {}
var server = servers[message.guild.id];
var queue = []
function play(connection, message){
var server = servers[message.guild.id];
var str = String(message)
var key = str.split(/\s/);
// If user inputs skip, skip the song
try {
server.dispatcher = connection.play(ytdl(queue[0], {filter: "audio"}));
} catch (error) {
if (key[1] == "skip") {
server.dispatcher.destroy();
} else {
message.channel.send("You need to provide a correct url!");
console.log(error)
}
return;
}
queue.shift();
server.dispatcher.on("finish", function(){
if (queue[0]){
play(connection, message);
} else {
connection.disconnect();
}
});
}
//------------function ends here-------------------
if (!args[0]) {
message.channel.send("You need to provide a link!");
return;
}
if (!message.member.voice.channel){
message.channel.send("You must be in a voice channel to use this command!");
return;
}
queue.push(args[0]);
if (!message.guild.voiceConnection) message.member.voice.channel.join().then(function(connection){
play(connection, message);
});
}}
每当我运行代码时,它总是给我错误
TypeError: Cannot set property 'dispatcher' of undefined
该错误发生在第22行,即
server.dispatcher = connection.play(ytdl(queue[0], {filter: "audio"}));
据我所知,当一个变量被声明但是没有被赋值时,它将抛出错误。但是我只是在上面指定了值,我不明白为什么它会给我错误。
顺便说一句,歌曲队列和跳过功能从未起作用,所以如果有人可以帮助我更正错误,我将非常感谢!
答案 0 :(得分:1)
var servers = {}
var server = servers[message.guild.id];
因为服务器是一个空对象,所以您不应期望它具有message.guild.id
属性