1
votes

message.content.toLowerCase () ne fonctionne pas pour moi

J'ai ce code

{
    "T4 Plate Boots": [],
    "T4 Plate Armor": [],
    "T4 Plate Helmet": [],
    "T4 Sword": [],
    "T4 Battleaxe": [],
    "T4 Mace": [],
    "T4 Hammer": [],
    "T4 Crossbow": [],
    "T4 Shield": [],
    "T4 Leather Shoes": [],
    "T4 Leather Jacket": [],
    "T4 Leather Hood": [],
    "T4 Bow": [],
    "T4 Spear": [],
    "T4 Nature Staff": [],
    "T4 Dagger": [],
    "T4 Quarterstaff": [],
    "T4 Torch": [],
    "T4 Demolition Hammer": [],
    "T4 Bag": [],
    "T4 Cape": [],
    "T4 Fisherman": [],
    "T4 Lumberjack": [],
    "T4 Quarrier": [],
    "T4 Miner": [],
    "T4 Skinner": [],
    "T4 Harvester": [],
    "T5 Plate Boots": [],
    "T5 Plate Armor": [],
    "T5 Plate Helmet": [],
    "T5 Sword": [],
    "T5 Battleaxe": [],
    "T5 Mace": [],
    "T5 Hammer": [],
    "T5 Crossbow": [],
    "T5 Shield": [],
    "T5 Leather Shoes": [],
    "T5 Leather Jacket": [],
    "T5 Leather Hood": [],
    "T5 Bow": [
        "95790380057894912"
    ],
    "T5 Spear": [],
    "T5 Nature Staff": [],
    "T5 Dagger": [],
    "T5 Quarterstaff": [],
    "T5 Torch": [],
    "T5 Demolition Hammer": [],
    "T5 Bag": [],
    "T5 Cape": [],
    "T5 Fisherman": [],
    "T5 Lumberjack": [],
    "T5 Quarrier": [],
    "T5 Miner": [],
    "T5 Skinner": [],
    "T5 Harvester": [],
    "T6 Plate Boots": [],
    "T6 Plate Armor": [],
    "T6 Plate Helmet": [],
    "T6 Sword": [],
    "T6 Battleaxe": [],
    "T6 Mace": [],
    "T6 Hammer": [],
    "T6 Crossbow": [],
    "T6 Shield": [],
    "T6 Leather Shoes": [],
    "T6 Leather Jacket": [],
    "T6 Leather Hood": [],
    "T6 Bow": [],
    "T6 Spear": [],
    "T6 Nature Staff": [],
    "T6 Dagger": [],
    "T6 Quarterstaff": [],
    "T6 Torch": [],
    "T6 Demolition Hammer": [],
    "T6 Bag": [],
    "T6 Cape": [],
    "T6 Fisherman": [],
    "T6 Lumberjack": [],
    "T6 Quarrier": [],
    "T6 Miner": [],
    "T6 Skinner": [],
    "T6 Harvester": [],
    "T7 Plate Boots": [],
    "T7 Plate Armor": [],
    "T7 Plate Helmet": [],
    "T7 Sword": [],
    "T7 Battleaxe": [],
    "T7 Mace": [],
    "T7 Hammer": [],
    "T7 Crossbow": [],
    "T7 Shield": [],
    "T7 Leather Shoes": [],
    "T7 Leather Jacket": [],
    "T7 Leather Hood": [],
    "T7 Bow": [
        "95790380057894912"
    ],
    "T7 Spear": [],
    "T7 Nature Staff": [],
    "T7 Dagger": [],
    "T7 Quarterstaff": [],
    "T7 Torch": [],
    "T7 Demolition Hammer": [],
    "T7 Bag": [],
    "T7 Cape": [],
    "T7 Fisherman": [],
    "T7 Lumberjack": [],
    "T7 Quarrier": [],
    "T7 Miner": [],
    "T7 Skinner": [],
    "T7 Harvester": [],
    "T8 Plate Boots": [],
    "T8 Plate Armor": [],
    "T8 Plate Helmet": [],
    "T8 Sword": [],
    "T8 Battleaxe": [],
    "T8 Mace": [],
    "T8 Hammer": [],
    "T8 Crossbow": [],
    "T8 Shield": [],
    "T8 Leather Shoes": [],
    "T8 Leather Jacket": [],
    "T8 Leather Hood": [],
    "T8 Bow": [
        "95790380057894912"
    ],
    "T8 Spear": [],
    "T8 Nature Staff": [],
    "T8 Dagger": [],
    "T8 Quarterstaff": [],
    "T8 Torch": [],
    "T8 Demolition Hammer": [],
    "T8 Bag": [],
    "T8 Cape": [],
    "T8 Fisherman": [],
    "T8 Lumberjack": [],
    "T8 Quarrier": [],
    "T8 Miner": [],
    "T8 Skinner": [],
    "T8 Harvester": []
}

Il met le message.author dans un fichier JSON, avec la commande "! v craft T6 Plate Armor", mais je voudrais que la commande soit case insensible. Par exemple, "! V craft t6 plate armor" placerait toujours l'utilisateur sous la valeur "T6 Plate Armor" dans le fichier JSON.

Le fichier JSON est formaté comme ceci:

    if(message.content.startsWith (prefix + " craft")) {
        let editedmessage = message.content.slice(prefix.length + 1);
        let skill = message.content.toLowerCase().slice(9);

        if(!client.msgs[skill]) return message.reply("I cant find that skill"); {
            client.msgs[skill] = [message.author.id]
        }
            if(!client.msgs[skill].includes(message.author.id)) client.msgs[skill].push(message.author.id);
            {

            message.reply("You can now " + editedmessage)
        }
    }


0 commentaires

3 Réponses :


1
votes

Vous devez convertir le message.content , alias la skill en minuscules, mais vous recherchez des clés mixtes: client.msgs [skill ]

Votre clé client.msgs est "T4 Plate Armor" , ce qui n'est pas égal à "t4 plate armor" code > (version minuscule), donc il ne le trouvera jamais.

Solution

Conserver une carte en minuscules pour la version en casse mixte

//create a map of lowercase keys to mixedcase (actual) key names
const lowercaseToMixedcase = {}; //create the map
Object.keys(client.msgs)
  .forEach(key => lowercaseToMixedcase[key.toLowerCase()] = key); //populate it

if(message.content.startsWith (prefix + " craft")) {
    let editedmessage = message.content.slice(prefix.length + 1);
    let lowercaseSkill = message.content.toLowerCase().slice(9); //save the lowercase key. Looks like "t4 plate armor"
    let skill = lowercaseToMixedcase[lowercaseSkill]; //take the lowercase key, and use it to get the actual key name, e.g. "T4 Plate Armor"

    if(!client.msgs[skill]) return message.reply("I cant find that skill"); {
        client.msgs[skill] = [message.author.id]
    }
        if(!client.msgs[skill].includes(message.author.id)) client.msgs[skill].push(message.author.id);
        {

        message.reply("You can now " + editedmessage)
    }
}


11 commentaires

Y a-t-il un moyen de contourner cela?


@RasmusHornung J'ai édité la réponse. Est-ce que ça marche pour toi?


C'est génial! Si ce n'est pas trop demander, j'ai une commande qui rappelle également les utilisateurs du tableau. Il devrait pouvoir faire de même lors de l'utilisation de la commande @Codebling


@RasmusHornung je ne sais pas ce que vous demandez


Vérifiez ma propre réponse @Codebling


@RasmusHornung Je le vois, mais je ne comprends toujours pas ce que vous demandez. Vous voulez pouvoir utiliser la compétence insensible à la casse là aussi? Vous devriez pouvoir le faire en utilisant la même technique.


Je voudrais que ce soit également la minusculeToMixedcase, la commande. Cela ne fonctionnera que si je mentionne la valeur "! V who T7 Bow" et non "! V who t7 bow"


Le but ici est de vous fournir des connaissances. Si vous ne comprenez pas comment cela fonctionne, je peux fournir plus d'explications, faites-moi simplement savoir quelle partie n'est pas claire. Une fois que vous comprenez la technique, vous devriez être en mesure de reproduire ce comportement partout où vous en avez besoin (il s'agit essentiellement de copier / coller de toute façon)


@RasmusHornung n'oubliez pas de voter et d'accepter des questions et réponses utiles


J'ai l'impression d'avoir essayé de copier / coller le code que vous m'avez donné dans tous les ordres possibles. Mais je n'arrive pas à le faire fonctionner. Il revient toujours ... J'ai mis ce que j'ai en ce moment dans la nouvelle réponse, pouvez-vous m'expliquer ce que je fais de mal?


@RasmusHornung utiliser d'autres réponses pour publier du code temporaire n'est pas un excellent moyen de le faire. Il est généralement préférable de déplacer la discussion vers StackOverflow Chat ou de publier une nouvelle question. Je vais commenter l'autre réponse



0
votes
´´´
if (message.content.startsWith (prefix + " items")) { 
        let filter = message.content.slice(prefix.length + 8) 
        let item = message.content.slice(7) 
        let _skill = client.msgs[filter]
        /* if(!_skill) return message.reply('I cant find that skill') */
        const whoEmbed = new discord.MessageEmbed() 
            .setColor('#0099ff') 
            .setTitle('These are the items that you can choose from') 
            .setAuthor('VINDICTIVE CRAFTER BOT', 'https://i.imgur.com/uz8xDax.jpg') 
            .addField(Object.keys(client.skills),  "Remember to define your skill with a tier") 
            .setFooter('This bot was created by BigTibbies'); 
        message.channel.send(whoEmbed); }

´´´

0 commentaires

0
votes
if (message.content.startsWith (prefix + " who")) { 
        /* let filter = message.content.slice(prefix.length + 5)  */
        let item = message.content.slice(7) 
        let _skill = client.msgs[filter]
        let lowercaseSkill = message.content.toLowerCase().slice(7); //save the lowercase key. Looks like "t4 plate armor"
        let _skill = lowercaseToMixedcase[lowercaseSkill]; //take the lowercase key, and use it to get the actual key name, e.g. "T4 Plate Armor"
        if(!_skill) return message.reply('I cant find that skill')
        const whoEmbed = new discord.MessageEmbed() 
            .setColor('#0099ff') 
            .setTitle('These players can craft ' + item) 
            .setAuthor('VINDICTIVE CRAFTER BOT', 'https://i.imgur.com/uz8xDax.jpg') 
            .setDescription(`${_skill.map(user => `<@${user}>`).join('\n')}`) 
            .setFooter('This bot was created by BigTibbies'); 
        message.channel.send(whoEmbed); 

    }

3 commentaires

Encore une fois, utiliser des réponses supplémentaires n'est pas un bon moyen de publier du code temporaire. _skill est défini deux fois. Javascript devrait vous donner une erreur lorsque vous essayez de le redéfinir. Ensuite, _skill est référencé comme s'il s'agissait d'un tableau ( _skill.map () ), mais ce n'est pas le cas. C'est une chaîne. Il contient juste le nom de la clé, comme "T4 Plate Armor". Vous ne pouvez pas cartographier cela. Il semble que vous ayez oublié une étape, celle de récupérer les données de client.msgs . Il serait plus facile de conserver toutes les données avec de meilleurs noms, comme skillName au lieu de skill . Ajoutez la ligne supprimée _skill = client.msgs [mixedcaseSkillName]


Donc, pour résumer ce qui doit se passer avec ce code: 1. récupérez les données souhaitées dans le message rawItemName = message.content 2. convertissez-les en minuscules lowercaseItemName = rawItemName.toLowerCase () < / code> 3. obtenir la clé à casse mixte à partir de la carte itemName = lowercaseItemNamesToMixedcaseItemNames [lowercaseItemName] 4. obtenir les données réelles de l'objet item = client.msgs [timeName] 5. utilisez les données item.map (user => ...


Le débogage vous aidera à comprendre ce qui ne fonctionne pas avec votre code. Postez de nouvelles questions si vous avez besoin d'aide supplémentaire