Discord音乐bot报错Cannot read property 'queue' of undefined如何解决
问题原因与修复方案
报错核心原因
你收到的*TypeError: Cannot read property 'queue' of undefined*错误,本质是尝试访问server对象的queue属性时,server本身为undefined,由代码里的多处拼写错误、逻辑错误共同导致:
- 错误1:
servers对象的存储键写错
判断当前服务器不存在配置时,错误把message.guild(服务器对象)作为键存入servers,但后续取值时用的是message.guild.id(服务器ID字符串)作为键,自然取不到对应值,导致server为undefined
对应错误代码行:if(!servers[message.guild.id]) servers[message.guild] = { queue: [] } - 错误2:属性名拼写错误
play函数中你写的是server.gueue[0],正确属性名是queue,字母顺序写反 - 错误3:对象名拼写错误
判断语音连接时写的是message.quild.voice.connection,正确拼写是message.guild,首字母写错
修复后的完整代码
const { Client, Attachment } = require('discord.js'); const bot = new Client(); const ytdl = require("ytdl-core"); const token = ''; const PREFIX = '!'; const servers = {}; bot.on('ready', () =>{ console.log('This bot is online!'); }) bot.on('message', message=>{ let args = message.content.substring(PREFIX.length).split(" "); switch(args[0]){ case 'play': function play(connection, message){ var server = servers[message.guild.id]; server.dispatcher = connection.play(ytdl(server.queue[0], {filter: "audioonly"})); server.queue.shift(); server.dispatcher.on("finish", function(){ if(server.queue[0]){ play(connection, message); }else{ connection.disconnect(); } }); } if(!args[1]){ message.channel.send("你需要提供一个音乐链接 :D") return; } if(!message.member.voice.channel){ message.channel.send("你必须先加入一个语音频道"); return; } // 修复存储键错误 if(!servers[message.guild.id]) servers[message.guild.id] = { queue: [] } var server = servers[message.guild.id]; server.queue.push(args[1]); // 修复拼写错误 if(!message.guild.voice.connection) message.member.voice.channel.join().then(function(connection){ play(connection, message); }) break; } }) bot.login(token);
内容的提问来源于stack exchange,提问作者Molecraft HD
相关产品推荐
相关产品推荐

