【问题标题】:How to output different command in Discord.js and .JSON using else if structure如何使用 else if 结构在 Discord.js 和 .JSON 中输出不同的命令
【发布时间】:2021-06-02 01:56:29
【问题描述】:

我正在尝试根据 JSON 数组中的元素等于什么来输出不同的命令。因此,如果 PerkData.perks[i].character = "Survivor",它将输出 "survEmbed"。以下是我尝试执行的以“幸存者”为字符元素的命令时出现的错误:

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('#D41C1C')
                .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 <:Icon_Perk:815066150865469481>. 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)
            }
            else if (PerkData.perks[i].id.toLowerCase() === args[0].toLowerCase() && PerkData.perks[i].character === 'Survivor') {
                const survEmbed = new Discord.MessageEmbed()

                .setColor('#D41C1C')
                .setTitle('__**' + PerkData.perks[i].name + '**__')
                .setDescription(PerkData.perks[i].name + 'is a general ' + PerkData.perks[i].character + ' Perk <:Icon_Perk:815066150865469481>.')

                message.channel.send(survEmbed)
            }
        }
    }
}

perk.json:

{
    "perks": [
        {
            "id": "alert",
            "name": "Alert",
            "url": "",
            "gif": "",
            "character": "Feng Min",
            "characterURL": "",
            "lvl": "",
            "description": ""
        },
        {
            "id": "spine-chill",
            "name": "",
            "url": "",
            "gif": "",
            "character": "Survivor",
            "lvl": "",
            "description": ""
        }
}

(我的 JSON 文件比那个大得多,但我没有包含整个文件。)

【问题讨论】:

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


    【解决方案1】:

    您应该包括您遇到的错误。

    您可以使用Map() 来存储数据

    key -> 来自 Perk 的字符/ID

    value -> MessageEmbed()

    不幸的是,如果您想在不同的嵌入中使用不同的样式和数据,没有捷径可走

    // declare map to store all embeds
    const embedMap = new Map();
    
    // make embed to store
    const survEmbed = new Discord.MessageEmbed()
        .setColor('#D41C1C')
        .setTitle('__**' + PerkData.perks[0].name + '**__')
        .setDescription(PerkData.perks[0].name + 'is a general ' + PerkData.perks[0].character + ' Perk <:Icon_Perk:815066150865469481>.')
    
    // store in Map
    embedMap.set("survivor", survEmbed);
    
    // Repeat the same process for each perk...
    
    // get embed corresponding to args[0] and send it
    return message.channel.send(embedMap.get(args[0].toLowerCase()));
    

    如果您希望每个嵌入都具有相同的结构和格式,那会更容易

    // declare map to store all embeds
    const embedMap = new Map();
    
    // loop though each perk
    PerkData.perks.ferEach(perk => {
        const embed = new Discord.MessageEmbed()
            .setColor('#D41C1C')
            .setTitle('__**' + perk.name + '**__')
            // use description feild in your perk to get this structure
            .setDescription(perk.description)
    
        // set embed to Map, considering you want oerk.charecter to be same as arg[0]
        embedMap.set(perk.character.toLowerCase(), embed);
    });
    
    // send embed to cmd response
    return message.channe.send(embedMap.get(args[0].toLowerCase()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多