You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 13:42:03