嗨,我想用JS做一个不和谐的音乐机器人,但有些命令却无法解决

时间:2020-04-29 13:49:41

标签: javascript discord

所以我想为Discord频道提供一个Discord机器人,所以我在线搜索了一个教程。我在YouTube上找到了一个教程,它有点旧,但是很好,问题是我遵循了该教程,但遇到了一些问题:

  1. 歌曲的队列不起作用,如果我正在播放歌曲,然后尝试将其放入队列,它将停止播放当前的歌曲,并开始播放我尝试添加到队列中的歌曲

  2. !stop命令不起作用,不确定为什么。

  3. 前缀不起作用,因此我设置为“!”作为前缀,因此该命令仅在您输入“!”后才有效在它的最前面,但是如果我在它们的最前面放置任何命令,命令就会起作用,因此,如果我像这样键入它们,请!

在此之前我还没有编程过任何东西,这是我第一次尝试使用任何编程语言。我通过在线搜索解决了一些问题,例如,voiceChannel是voice.channel之类的东西。通过这个机器人,我正在使用FFMPEG,ytdl-core和opusscript。

我将在下面粘贴代码(出于明显的原因,我将取出机器人令牌),希望有人能帮助我。

const {
    Client,
    Attachment
} = require('discord.js');
const bot = new Client();

const ytdl = require("ytdl-core");

const token = 'BOT TOKEN';

const PREFIX = '!';

var version = '4.2.0';

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 music through 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.voiceConnection) message.member.voice.channel.join().then(function(connection){
                 play(connection, message);
             })
             break;

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


        case 'stop':
            var server = servers[message.guild.id];
             if(message.guild.voiceConnection){
                 for(var i = server.queue.length -1; i >=0; i--){
                     server.queue.splice(i, 1);
                 }

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

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

    }


});

bot.login(token);

P.S。抱歉,英语不是我的母语,我希望不会有很多拼写错误

0 个答案:

没有答案