javascript - 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,
},
},
});
});
}
},
};
解决方案
无法读取未定义的 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');
}
推荐阅读
- python - 我正在尝试在 ubuntu 上的崇高文本中在 python 上使用 tkinter,但我不断收到错误消息
- python - 打印出列表中项目的出现
- python-3.x - 更新画布中矩形的来源以更改背景图像
- c# - 这个“No object for moniker”是什么信息?
- django - get_object() 取决于 UpdateView 中的“请求”
- ajax - Laravel 中的数据验证不起作用
- c# - 在 C# 中从 Google Drive 发送带有附件的 MailGun 电子邮件
- spring-boot - 使用 Swagger 最新版本 2.9.2 和 HATEOS 升级 Spring boot 2.2.0 后集成测试开始失败
- vue.js - Vue - 使用 vuex 进行深度复制在 vuejs 中不起作用
- flutter - appbundle 颤振应用程序的 64 位显示停止器错误