【问题标题】:How to handle arguments with spaces in Discord.js如何在 Discord.js 中处理带空格的参数
【发布时间】:2021-10-13 10:42:15
【问题描述】:

我正在尝试让我的 Discord 机器人处理参数中带有空格的命令。我的args 变量在我的index.js 文件中定义:

const args = message.content.slice(prefix.length).split(/ +/);
const commandName = args.shift().toLowerCase(); 

我的命令文件 (perk.js) 如下所示:

const Discord = require('discord.js');
const PerkData = require('./perk.json');


module.exports = {
    name: 'perk',
    args: true,
    execute(message, args) {
        for (let i = 0; i < PerkData.perks.length; i++) {
            if (PerkData.perks[i].id.toLowerCase() === args[0].toLowerCase()) {
                const perkEmbed = new Discord.MessageEmbed()

                    .setColor('#000000')
                    .setTitle('__**' + PerkData.perks[i].name + '**__ ')
                    .setURL(PerkData.perks[i].url)
                    .setThumbnail(PerkData.perks[i].gif)
                    .setDescription('A teachable unique [' + PerkData.perks[i].character + '](' + PerkData.perks[i].characterURL + ') Perk <:Perk:833657215743295499>. It can be unlocked for all other characters from Level ' + PerkData.perks[i].lvl + ' onwards:')
                    .addField('__Description__', PerkData.perks[i].description, false)

                message.channel.send(perkEmbed)
            }
        }
   }     
}

到目前为止,我在 JSON 文件中有一个“id”字段,其中包含连字符 - 而不是空格,然后perk.js 文件会从其中读取并将其与描述匹配。 示例:.perk ace-in-the-hole

如何做到这一点,以便我可以在参数中使用空格而不必使用连字符?

我是否需要更改argsindex.js 中的定义方式?或者可以在命令文件perk.js中完成吗?

长话短说,我有:.perk ace-in-the-hole 工作。 但我希望能够做到这一点:.perk ace in the hole

(对不起,如果写得不好,我不是一个有经验的程序员......)

【问题讨论】:

    标签: javascript node.js json discord discord.js


    【解决方案1】:

    您可以简单地用空格连接参数数组。

    execute(message, args) {
        // Join the args array
        let perkArg = args.join(' ')
        
        for (let i = 0; i < PerkData.perks.length; i++) {
            if (PerkData.perks[i].id.toLowerCase() === perkArg.toLowerCase()) {
                // ...
            }
        }
    }
    

    假设所有 perk ID 都是唯一的,并且您只想发送一条消息,您还可以在一行中搜索整个 PerkData.perks 数组,而无需使用 for 循环来查找单个项目。

    // Join the args array
    let perkArg = args.join(' ')
    let perk = PerkData.perks.find(perk => perk.id === perkArg.toLowerCase())
    if(perk !== undefined) {
        // perk was found
    } else {
        // perk was not found
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2019-04-15
      • 2018-08-11
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多