如何在命令中编写子命令?

问题描述 投票:1回答:1

我想将我的“播放”,“停止”,“跳过”,“离开”命令放到一个名为“ musiccommands.js”的文件中所以我将“播放”代码放入这样:

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之类的东西,因为将每个命令都放在自己的文件中给我带来了一些问题,例如未定义连接但已定义在播放命令中作为函数的参数,所以我曾经用过但是将所有内容放在自己的文件中会使很多事情变得不确定因此,如果您仍然可以提供帮助,请发表评论谢谢!

javascript node.js bots discord.js
1个回答
0
投票

首先,您正在检查是否似乎需要将!args[1]设为!args[0],因为所有数组都以0开头((如果您在下面不接受我的建议,请仅执行此操作)

我建议的一种方法是对music命令进行子命令,以便将music play <link>music stopmusic skip等都放在一个文件中。

您可以通过检查args[0]是否为playstopskip等来实现此目的>

为了更加清楚,下面是一个示例:

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")
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.