Как мне написать подкоманды в моей команде? - PullRequest
1 голос
/ 04 апреля 2020

Я хотел поместить свои команды «play», «stop», «skip», «exit» в один файл, называемый «musi c команды. js», поэтому я поместил свой код «play» так же, как это:

const Discord = require('discord.js');
const ytdl = require('ytdl-core');
const bot = new Discord.Client();
var servers = {};

module.exports = {
    name: 'play',
    description: 'works',
    execute(msg, args) {
        function play(connection, msg) {

            var server = servers[msg.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, msg);
                } else {
                    connection.disconnect();
                }
            });
        }

        if (!args[1]) {
            msg.reply('please provide a link');
            return;
        }
        if (!msg.member.voice.channel) {
            msg.reply("Join a voice channel to play music!");
            return;
        }

        if (!servers[msg.guild.id]) servers[msg.guild.id] = {
            queue: []
        }

        var server = servers[msg.guild.id];

        server.queue.push(args[1]);

        const voiceChannel = msg.member.voice.channel;
        if (!voiceChannel) {
            return msg.reply('you are not in a voice channel.');
        } else {
            voiceChannel.join().then(function (connection) {
                play(connection, msg);
            }).catch(err => console.error(err));
        }
    }

}

(Примечание: если у вас есть идея улучшить, пожалуйста, опубликуйте ее)

, поэтому я хотел добавить свои команды пропуска, остановки и оставления внутри, также имея возможность доступа такие вещи, как server.dispatcher, в то же время, поскольку помещение каждой команды в свой собственный файл приводило меня к некоторой проблеме, например, соединение не определено, но оно определено в команде play как параметр в функции, поэтому я использовал это, но все ставил сам В этом файле многое не определено, так что если вы можете помочь, пожалуйста, оставьте комментарий, спасибо!

1 Ответ

0 голосов
/ 04 апреля 2020

Прежде всего, вы проверяете, если !args[1] кажется, что должно быть !args[0], потому что все массивы начинаются с 0 (Делайте это, только если вы не принимаете мое предложение ниже) .

Один из способов, который я бы предложил, - это ввести подкоманды для команды music, чтобы у вас были music play <link>, music stop, music skip, et c. все в одном файле.

Этого можно добиться, проверив, является ли args[0] либо play, stop, skip и т. д. c.

. ясно, вот пример:

module.exports = {
    name: 'music',
    description: 'works',
    execute(msg, args) {
        if (args[0] === "play") {
            // Do something
        } else if (args[0] === "stop") {
            // Do something
        } else if (args[0] === "skip") {
            // Do something
        } else {
            message.reply("use the right syntax")
        }
    }
}
...