首页 > 解决方案 > Discord.js“无法读取未定义的属性‘toLowerCase’”

问题描述

我想问一下代码有什么问题,因为我不知道。它说 toLowerCase 是未定义的。我尝试了很多方法来解决这个问题,但不幸的是我还没有想出任何办法。discord.js 版本是 11.5.1。嗯......有代码:

const { RichEmbed, Client } = require('discord.js');
const { getMember, formatDate } = require('../../functions.js');
const { stripIndents } = require('common-tags');

module.exports = {
 name: 'order',
 category: 'server',
 description: 'Vytvoří kanál, kde se tě zeptá co za druh objednavky chceš..',
 run: async (client, message, args) => {
  const member = getMember(message, args.join(' '));
  const msg = await message.channel
   .send({
    embed: {
     color: 5729279,
     description:
      '<a:AsukaLoading:828186024214659102> Pracuje se na požadavku...',
     timestamp: new Date(),
     footer: {
      icon_url: message.author.avatarURL,
      text: 'Požadavek od: ' + message.author.username,
     },
    },
   })
   .then((m) => m.delete(1999));

  if (args[0].toLowerCase() === 'set') {
    //       ^^
    // error here         
   if (message.content.includes('|')) {
    var sluzba = message.content.split('|')[0];
    sluzba = sluzba.replace('!order set', '');
    var platba = message.content.split('|')[1];

    const AsukaOrder3 = new RichEmbed()

     .setTitle(
      `<:AsukaOrder:835620702559797299> Vaše objednávka byla úspěšně upřesněna!`
     )
     .addField(
      `**<a:AsukaModeration:835266151269138522> Vaše požadavky**`,
      stripIndents`**Služba**: ${sluzba}.
         **Platba**: ${platba}.`,
      true
     )
     .addBlankField()
     .addField(
      `<@826756799062474757> By se měli tvé zprávy co v nejbližší době všimnout a pomoct ti s tvou objednávkou!`
     )
     .setFooter(
      'Požadavek od: ' + message.author.username,
      message.author.avatarURL
     )
     .setColor('#576bff')

     .setTimestamp();
    message.channel.send(AsukaOrder3);

    const esayMessage = args.slice(1).join(' ');
    message.delete().catch((O_o) => {});
   } else {
    return;
   }
  } else {
   message.guild
    .createChannel(`objednavka-${message.author.id}`, 'text')
    .then((c) => {
     let everyone = message.guild.roles.find('name', '@everyone');
     c.overwritePermissions(everyone, {
      SEND_MESSAGES: false,
      READ_MESSAGES: false,
     });
     c.overwritePermissions(message.author, {
      SEND_MESSAGES: true,
      READ_MESSAGES: true,
     });

     const AsukaOrder = new RichEmbed()

      .setDescription(
       `Objednávka uživatele ${message.author.username}, byla úspěšně vytvořena!`
      )
      .setFooter(
       'Požadavek od: ' + message.author.username,
       message.author.avatarURL
      )
      .setColor('#576bff')

      .setTimestamp();
     message.channel.send(AsukaOrder);
     const channel = client.channels.find(
      (channel) => channel.name === `objednavka-${message.author.id}`
     );

     const AsukaOrder2 = new RichEmbed()

      .setDescription(
       'Předtím než ale začneme, tak budeme potřebovat abyste nám sdělil své požadavky. V první řadě, co za server chcete, čím budete platit, jaké chcete parametry a na jak dlouho u nás chcete hostovat. \n\n Pro upřesnění vašich parametrů stačí napsat: ``!order set (Služba) | (Platební metoda) | (Paramtery) | (Doba trvání)`` \n\n Příklad takovéto objednávky: ``!order set Minecraft | Platební karta | 10GB RAM, 30GB Disk | 30d`` \n\n Vaši objednávku zaregistrujeme nejpozději do pár hodin a pokusíme se ji s vámi dokončit a poskytnout vám naše služby! \n\n V případě nějaké chyby v vytváření objednávky kontaktujte: <@574849327650963469>!'
      )
      .setTitle(
       `<:AsukaOrder:835620702559797299> Vaše objednávka byla úspěšně vytvořena!`
      )
      .setFooter(
       'Požadavek od: ' + message.author.username,
       message.author.avatarURL
      )
      .setColor('#576bff')

      .setTimestamp();
     channel.send(AsukaOrder2);

     if (message.channel.name !== `objednavka-${message.author.id}`)
      return message.channel.send({
       embed: {
        color: 161240,
        description: `<a:AsukaError:828188028551299072> Promiň, ale tento příkaz lze použít pouze v kanále s objednávky!`,
        timestamp: new Date(),
        footer: {
         icon_url: message.author.avatarURL,
         text: 'Požadavek od: ' + message.author.username,
        },
       },
      });
    });
  }
 },
};

标签: javascriptnode.jsdiscord.js

解决方案


无法读取未定义的 x

此错误意味着您正在尝试访问未定义的属性。例如:

const thisIsUndefined = undefined;

// Uncaught TypeError: Cannot read property 'arbitraryProperty' of undefined
thisIsUndefined.arbitraryProperty;

在您的代码中,它可能意味着以下两种情况之一:

  • args未定义或不是数组。两者undefined[0]notAnArray[0]都将返回 undefined (除非您之前明确分配它,例如:)notAnArray[0] = 'Hello World'
  • args 一个数组,但没有元素填充它。[][0]将返回未定义。

我发现您的问题不太可能是前者,因为它很可能会在args.join(...). 假设是后者,解决这个问题的方法就是检查是否args[0]存在。

// alternatives:
// if (!args.length)
// if (args.length === 0)
if (!args[0]) {
  return message.channel.send('I am an error message');
}

推荐阅读