当前位置: 首页 > 知识库问答 >
问题:

discord.js列出我所有的bot命令

司马宏邈
2023-03-14

我制作了一个不和谐的机器人.js并尝试执行帮助命令以向用户显示所有可用的命令。

示例命令:头像.js

module.exports.run = async(bot, message, args) => {
    let msg = await message.channel.send("doing some magic ...");
    let target = message.mentions.users.first() || message.author;

    await message.channel.send({files: [
        {
            attachment: target.displayAvatarURL,
            name: "avatar.png"
        }
    ]});

    msg.delete();
}

module.exports.help = {
    name: "avatar",
    description: "show the avatar of a user",
    usage: "[@user]"
}

然后,我尝试发送一条包含完整命令列表的消息,比如:

    < li >命令1 < li >描述 < li >用法 < li >命令2 < li >描述 < li >用法 <李>...

帮助.js

const fs = require("fs");
const Discord = require("discord.js");

module.exports.run = async(bot, message, args, con) => {
    fs.readdir("./cmds/", (err, files) => {
        if(err) console.error(err);

        let jsfiles = files.filter(f => f.split(".").pop() === "js");
        if(jsfiles.length <= 0) {
            console.log("No commands to load!");
            return;
        }

        var namelist = "";
        var desclist = "";
        var usage = "";

        let result = jsfiles.forEach((f, i) => {
            let props = require(`./${f}`);
            namelist = props.help.name;
            desclist = props.help.description;
            usage = props.help.usage;
        });

        message.author.send(`**${namelist}** \n${desclist} \n${usage}`);
    });
}

module.exports.help = {
    name: "help",
    description: "show all commands",
    usage: ""
}

我的代码有点工作,但它只发送第一个命令。

我对javascript很陌生,我找不到解决这个问题的方法。我试图谷歌所有关于foreach地图不和谐的集合和东西,但我找不到一个结果组合在一起的例子。

如果有人可以帮助我或给我一个提示,我可以搜索这样的东西。会很棒。

共有3个答案

谷梁淇
2023-03-14

以下是我对此的看法....它对我有用。

const Discord = require('discord.js'); 
const fs = require("fs");

module.exports = {
    name: 'help',
    description: 'Lists available commands',

    async run(client, message, args, con) {
        fs.readdir("./commands/", (err, files) => {
            if(err) console.error(err);
    
            let jsfiles = files.filter(f => f.split(".").pop() === "js");
            if(jsfiles.length <= 0) {
                console.log("No commands to load!");
                return;
            }
            
            var namelist = "";
            var desclist = "";
            
            let result = jsfiles.forEach((f, i) => {
                let props = require(`./${f}`);
                namelist = props.name;
                desclist = props.description;
                message.author.send(`**${namelist}** \n${desclist} \n`);
            });
     

     
        });
    }
都才俊
2023-03-14

你应该在数组中执行此操作,它将解决问题,因此它应该看起来像这样。

module.exports.run = async(bot, message, args, con) => {
    fs.readdir("./cmds/", (err, files) => {
        if(err) console.error(err);

        let jsfiles = files.filter(f => f.split(".").pop() === "js");
        if(jsfiles.length <= 0) {
            console.log("No commands to load!");
            return;
        }


        let result = jsfiles.forEach((f, i) => {
            let props = require(`./${f}`);
            let filesArray = [props.help.name, props.help.description, props.help.usage]
            message.author.send(`**${filesArray[0]}** \n${filesArray[1]} \n${filesArray[2]}`);
        });

    });
}

很抱歉这么晚才回复。

柯耀
2023-03-14

您的代码只发送一个命令的原因是因为您的代码只调用 message.author.send('...' 一次。您成功地设置了变量名称列表解列表和每个文件中的数据的使用情况,但 .forEach(... 循环在移动到下一个文件时只会覆盖所有数据。

尝试在 .forEach(... 循环的每次迭代中发送数据,如下所示:

var namelist = "";
var desclist = "";
var usage = "";

let result = jsfiles.forEach((f, i) => {
    let props = require(`./${f}`);
    namelist = props.help.name;
    desclist = props.help.description;
    usage = props.help.usage;

    // send help text
    message.author.send(`**${namelist}** \n${desclist} \n${usage}`);
});
 类似资料:
  • 我正在使用discord.js创建一个discord bot,我想执行如下命令: 前缀为。是消息内容,用户位于命令的末尾。此命令只向标记用户发送一条直接消息。如何重新创建这样的命令?

  • 我需要得到发布内容的用户的名字。我所尝试的一切都将返回ID。我尝试过msg.author等。 编辑:恐怖标题名称smh

  • 问题内容: 是否有Linux命令将列出此终端会话的所有可用命令和别名? 就像您键入“ a”并按下制表符一样,但是对于字母的每个字母。或运行“别名”,但也返回命令。 为什么?我想运行以下命令,看看命令是否可用: 问题答案: 您可以使用内置的bash(1) 将列出您可以运行的所有命令。 将列出您可以运行的所有别名。 将列出您可以运行的所有内置插件。 将列出您可以运行的所有关键字。 将列出您可以运行的所

  • 问题内容: 我知道有列出所有用户组的文件。 我想知道是否存在一个简单的命令来列出所有用户组名称,尽管解析了世界可读文件。我愿意创建一个列出Linux帐户组名称的管理员网页。 问题答案: 要列出所有分配了用户的本地组,请使用以下命令: 有关更多信息-> Unix组, Cut命令, sort命令

  • 我正在使用discord.jsV12.2.0+库创建一个discord bot。我正在创建一个!奴役命令,让机器人每2秒ping目标人一次60次。例如,让机器人发送“torturing@hello123:evil:”垃圾邮件,但如果我执行并发送“torturing undefined:evil:”,机器人就不会发送。长数字是不一致用户的ID。 这是我的enslave.js代码: 这是我的messa

  • 然而,我无法在0.8.1中找到相同的内容。https://github.com/apache/kafka/blob/0.8.1/bin 任何指针都可以