我想问一下代码有什么问题,因为我不知道它。它说 toLowerCase 是 undefined.I've 尝试了很多方法来解决这个问题,但不幸的是我还没有想出任何东西。 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,
},
},
});
});
}
},
};
答案 0 :(得分:1)
无法读取未定义的 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]
将返回 undefined。我发现您的问题不太可能是前者,因为它很可能会在 args.join(...)
处引发错误。假设是后者,解决这个问题的方法就是检查 args[0]
是否存在。
// alternatives:
// if (!args.length)
// if (args.length === 0)
if (!args[0]) {
return message.channel.send('I am an error message');
}