【问题标题】:Discord music bot: prefix not definedDiscord 音乐机器人:未定义前缀
【发布时间】:2025-12-19 14:45:12
【问题描述】:

我想制作一个音乐不和谐机器人,但我遇到了一段时间的麻烦。我不断收到错误消息,我从 CodeLyon 的名为“制作您自己的 Discord Bot | Music Bot(播放、跳过、停止命令)”的视频中得到了这段代码

我尝试时总是遇到同样的错误:

ReferenceError: PREFIX 未定义

    const ytdl = require("ytdl-core");
    var servers = {};
    
    client.on('message', message => {
        
        let args = message.content.substring(PREFIX.length).split(" ");
        switch (args[0]){
            case "play":
                const prefix = '!'; 
            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("end", function(){
                    if(server.queue[0]){
                        play(connection, message);
                    }else {
                        connection.disconnect();
    
                    }
                });
            }
    
           if(!args[1]){
               message.channel.send("you need to provide a link");
               return;
           }
           if(!message.member.VoiceChannel){
               message.channel.send("you must be in a channel to play the bot");
            return;
            }
           
            if(!serveres[message.guild.id]) servers[message.guild.id] = {
    
               queue: [] 
            }
           var server = servers[message.guild.id];
    
           server.queue.push(args[1]);
    
            if(!message.guild.voice) message.member.VoiceChannel.join().then(function(Connection){
                play(connection, message)
    
            })
    
           break;
    
           case 'skip':
               var server = servers[message.guild.id];
               if(server.dispatcher) server.dispatcher.end();
               break;
               case 'stop':
                var server = servers[message.guild.id];
                if(message.guild.voice){
                    for(var i = server.queue.length -1; i >=0;i--){
                    server.queue.splice(i, 1);   
                    }
                    server.dispatcher.end();
                    console.log('stopped the queue')
                }
                if(message.guild.connection) message.guild.voice.disconnect();
                break;
        }
    
    
    });

【问题讨论】:

  • 请确保您的代码格式正确并更清楚地表达问题,因为我无法理解错误/问题是什么。

标签: javascript discord discord.js bots


【解决方案1】:

你得到的错误基本上告诉你你没有定义PREFIX 变量。

您应该在代码的顶部添加以下 constant 变量:

const PREFIX = '!';

【讨论】:

  • 现在我的机器人告诉我我必须在一个频道中,而我已经在一个频道中
  • 只看你的代码和那个教程,那已经过时了。有些事情发生了变化。发生示例错误是因为 message.member.VoiceChannel 的使用已更改为 message.member.voice.channel。我建议你阅读documentation
  • 实际上,在 CodeLyon 的教程中,您将前缀存储在 .env 文件中。前缀 = !或类似的东西。查看他的“保护您的机器人令牌”视频。
  • @Shunya Codelyon 有一个更新的 2021 视频。