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

JavaScript开发Discord音乐机器人执行play等指令无响应无报错问题

问题根因及修复方案

1. 事件监听与权限配置错误

  • Discord.js v13及以上版本已将原message事件废弃,替换为messageCreate事件,你当前使用的旧事件无法捕获用户发送的消息
  • 声明的网关意图不全:缺少接收消息、语音状态相关的必要意图,且必须开启消息内容权限才能读取用户指令内容,需要修改客户端初始化代码:
// 修改前
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
// 修改后
const client = new Client({ 
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_VOICE_STATES,
    Intents.FLAGS.MESSAGE_CONTENT
  ] 
});

额外注意:需要同时进入Discord开发者后台的Bot管理页,手动开启Message Content Intent开关,否则代码声明也无效

2. 代码语法错误

你存在赋值逻辑错误,直接覆写了存储队列的servers对象,导致队列逻辑完全失效:

// 错误写法 把servers对象直接改成了数组,完全破坏原有结构
var server = servers = [message.guild.id];
// 正确写法 读取对应服务器的配置
var server = servers[message.guild.id];

3. 废弃API使用

新版本Discord.js已修改了语音相关的属性和方法名:

  • 原message.member.voiceChannel 改为 message.member.voice.channel
  • 原connection.playStream 已废弃,需要改用play方法,v14+版本需要单独安装@discordjs/voice依赖处理语音流
  • 原message.guild.voiceConnection 改为 message.guild.members.me.voice.connection

修复后核心逻辑参考

const { Client, Intents, Attachment} = require('discord.js');
const client = new Client({ 
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_VOICE_STATES,
    Intents.FLAGS.MESSAGE_CONTENT
  ] 
});
const PREFIX = '!';
const ytdl = require("ytdl-core");

var servers = {};

// 改用messageCreate事件
client.on('messageCreate', message => {
    // 先过滤非指令消息和机器人消息
    if (!message.content.startsWith(PREFIX) || message.author.bot) return;

    let args = message.content.substring(PREFIX.length).split(" ");

    switch (args[0]) {
        case 'play':
            function play(connection, message){
                var server = servers[message.guild.id];
                // 改用play方法
                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("give a link");
                return;
            }
            // 修正语音频道属性名
            if(!message.member.voice.channel){
                message.channel.send("you must be on voice chat to play music");
                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.members.me.voice.connection) message.member.voice.channel.join().then(function(connection){
                play(connection, message);
            })
        break;

        case "ping":
            message.channel.send("pong");
            console.log("pong");
            break;
    }
});

client.login(token);

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

内容的提问来源于stack exchange,提问作者JM0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:39:04