voiceChannel.play 不是函数错误
voiceChannel.play is not a function error
async function play(msg) {
let mg = getMusicGuild(msg.guild.id);
let voiceChannel = msg.guild.voiceConnection;
if (!voiceChannel) voiceChannel = await msg.member.voiceChannel.join();
msg.guild.me.setDeaf(true);
let sq = mg.shiftQueue();
mg.setDispatcher(voiceChannel.play(ytdl(sq.youtube.link,{filter:"audioonly"}),{passes:4}));
mg.setPlayingTitle(sq.youtube.title);
mg.getDispatcher().on('end',reason => {
setTimeout(()=>{
let sqa = mg.queue[0];
mg.setPlaying(false);
if (!sqa) {
console.log("music ended");
voiceChannel.disconnect();
} else {
play(msg).catch(console.error);
}
},500);
});
mg.setPlaying(true);
msg.channel.send(new MessageEmbed()
.setColor(0x0ea5d3)
.setAuthor(msg.author.username, msg.author.avatarURL)
.setDescription(sq.youtube.description)
.setTimestamp(new Date())
.setTitle(sq.youtube.title)
.setImage(sq.youtube.thumbnails.high.url)
.setURL(sq.youtube.link)
);
}
module.exports = {
play: play,
searchAddToQueue: searchAddToQueue,
getMusicGuild: getMusicGuild
};
这是允许我的机器人加入语音频道并播放音乐的代码。但是,当我执行允许所有这些工作的命令时,出现此错误:
(node:2668) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: voiceChannel.play is not a function
如您所知,我一直坚持这一点。到底我在代码中做错了什么?
我看到你在做一个音乐机器人,我个人认为这对音乐来说效率不高。如果你想要一个更高级的音乐机器人,它运行良好并且有许多难以实现的功能,I recommend this.如果你仍然想用你自己的代码制作你的音乐功能,我建议你做一个类似于这个的功能:
function play(connection, message){
var server = servers[message.guild.id];
server.dispatcher = connection.playStream(ytdl(server.queue[0], {filter:
"audioonly"}));
server.queue.shift();
server.dispatcher.on("end", function() {
if(server.queue[0]) play(connection, message);
else connection.disconnect();
});
}
请记住这是使用 FFmpeg
和 opusscript
async function play(msg) {
let mg = getMusicGuild(msg.guild.id);
let voiceChannel = msg.guild.voiceConnection;
if (!voiceChannel) voiceChannel = await msg.member.voiceChannel.join();
msg.guild.me.setDeaf(true);
let sq = mg.shiftQueue();
mg.setDispatcher(voiceChannel.play(ytdl(sq.youtube.link,{filter:"audioonly"}),{passes:4}));
mg.setPlayingTitle(sq.youtube.title);
mg.getDispatcher().on('end',reason => {
setTimeout(()=>{
let sqa = mg.queue[0];
mg.setPlaying(false);
if (!sqa) {
console.log("music ended");
voiceChannel.disconnect();
} else {
play(msg).catch(console.error);
}
},500);
});
mg.setPlaying(true);
msg.channel.send(new MessageEmbed()
.setColor(0x0ea5d3)
.setAuthor(msg.author.username, msg.author.avatarURL)
.setDescription(sq.youtube.description)
.setTimestamp(new Date())
.setTitle(sq.youtube.title)
.setImage(sq.youtube.thumbnails.high.url)
.setURL(sq.youtube.link)
);
}
module.exports = {
play: play,
searchAddToQueue: searchAddToQueue,
getMusicGuild: getMusicGuild
};
这是允许我的机器人加入语音频道并播放音乐的代码。但是,当我执行允许所有这些工作的命令时,出现此错误:
(node:2668) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: voiceChannel.play is not a function
如您所知,我一直坚持这一点。到底我在代码中做错了什么?
我看到你在做一个音乐机器人,我个人认为这对音乐来说效率不高。如果你想要一个更高级的音乐机器人,它运行良好并且有许多难以实现的功能,I recommend this.如果你仍然想用你自己的代码制作你的音乐功能,我建议你做一个类似于这个的功能:
function play(connection, message){
var server = servers[message.guild.id];
server.dispatcher = connection.playStream(ytdl(server.queue[0], {filter:
"audioonly"}));
server.queue.shift();
server.dispatcher.on("end", function() {
if(server.queue[0]) play(connection, message);
else connection.disconnect();
});
}
请记住这是使用 FFmpeg
和 opusscript