如何在 Discord.js 中处理带空格的参数

Posted

技术标签:

【中文标题】如何在 Discord.js 中处理带空格的参数【英文标题】:How to handle arguments with spaces in 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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在 Discord.js 中处理带空格的参数的主要内容,如果未能解决你的问题,请参考以下文章

JS函数如何传递带空格参数

斜杠命令处理程序中的 Discord.js v13 TypeError

在 discord.js 中制作带有前缀的命令处理程序时出现问题 [重复]

具有用户权限、客户端权限和限制的 Discord.js 命令处理程序

shell脚本或R脚本中参数含有空格的处理方法

discord.js - 如何从嵌入中读取数据