【问题标题】:How do I write sub-commands in my command?如何在我的命令中编写子命令?
【发布时间】:2020-07-16 21:12:07
【问题描述】:

我想将我的“播放”、“停止”、“跳过”、“离开”命令放入一个名为“music commands.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 之类的东西,因为将每个命令放在它自己的文件中给我带来了一些问题,比如连接未定义,但它是在 play 命令中定义为函数中的参数,所以我曾经使用它 但是将所有内容都放在自己的文件中,这使很多事情变得不确定 所以如果你能提供帮助,请发表评论谢谢!

【问题讨论】:

    标签: javascript node.js bots discord.js


    【解决方案1】:

    首先,您正在检查!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")
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多