首页 > 解决方案 > 我的不和谐音乐机器人会播放音乐,但是当我尝试停止它时它不起作用

问题描述

当我执行play命令时,我的机器人工作,但是当我执行stop命令时,它给了我一堆错误。我正在使用FFmpegdiscord.js。我的代码是:

const Discord = require('discord.js');
const bot = new Discord.Client

const ytdl = require("ytdl-core")


const token = 'MY API TOKEN'

const PREFIX = '?';

var version = '1.2';

var servers = {};

bot.on('ready', () => {
  console.log('This bot is online!' + version);
})

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("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.voice.channel) {
        message.channel.send("You must be in a Voice Channel to play the bot!")
        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) message.member.voice.channel.join().then(function (connection) {
        play(connection, message);
      })

      break;

    case 'skip':
      var server = servers[message.guild.id]
      if (servers.dispatcher) server.dispatcher.end()
      message.channel.send("Skipping the song...")
      break;

    case 'stop':
      if (message.guild.voice.connection) {
        for (var i = server.queue.length - 1; i >= 0; i--) {
          server.queue.splice(i, 1);
        }

        server.dispatcher.end();
        message.channel.send("Ending the queue leaving the voice channel!")
        console.log('stopped the queue')
      }

      if (message.guild.connection) message.guild.connection.voice.disconnect();
      break;
  }
});

bot.login(token);

当我玩的时候,它工作得很好。但是当我停止音乐时,我收到了这个错误:

TypeError: Cannot read property 'queue' of undefined
    at Client.<anonymous> (C:\Users\picar\Desktop\DiscordMusicBot\index.js:79:36)
    at Client.emit (events.js:315:20)
    at MessageCreateAction.handle (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31)       
    at WebSocketShard.onPacket (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:436:22)
    at WebSocketShard.onMessage (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10)
    at WebSocket.onMessage (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\ws\lib\event-target.js:125:16)
    at WebSocket.emit (events.js:315:20)
    at Receiver.receiverOnMessage (C:\Users\picar\Desktop\DiscordMusicBot\node_modules\ws\lib\websocket.js:800:20)

标签: discorddiscord.js

解决方案


case 'stop':
if (message.guild.voice.connection) {

  var server = servers[message.guild.id]; // I think this could be useful

  for (var i = server.queue.length - 1; i >= 0; i--) {
    server.queue.splice(i, 1);
  }

  server.dispatcher.end();
  message.channel.send("Ending the queue leaving the voice channel!")
  console.log('stopped the queue')
}

if (message.guild.connection) message.guild.connection.voice.disconnect();
break;

推荐阅读