I am new to JavaScript, am I was trying to dissect an embedded message. Here\'s my code, it runs fine for a few mins, works accordingly but idk what goes wrong.
You can write your code more defensive like this. Instead of
if(message.embeds[i].title.includes("text!"))
you can write the following
if(typeof message.embeds[i].title === "string" &&
message.embeds[i].title.includes("text!"))
Its because there is at least one item inside the embeds array items that missing the title
property.
You will need to update the if statement to be:
If (message.embeds[i] &&
message.embeds[i].title && ...)
JavaScript is not a type safe language, and the error is caused by not being type safe. We will have to check if object exists and nested properties exists and after we should be able check the value. In your case:
bot.on('message', (message) => {
// check if main obj and main property exist
if (message && message.embeds) {
for (var i = 0; i < message.embeds.length; i++) {
// now, check if title exists and after check the text inside
if (
message.embeds[i].title &&
message.embeds[i].title.includes("text!"))
{
message.channel.send('reply')
}
}
}
});
It means inside message.embeds[i]
there is at least one element without title property.
You should check first if message.embeds[i].title
exists and perform other operations after the check.
Probably some of the embed
object is coming without the title
property.
You can safely use your logic changing your if condition to:
if ('title' in message.embeds[i] && message.embeds[i].title.includes("text!")) {
/* ... */
}
I think this code can fix this problem.
bot.on('message', (message) => {
for (var i = 0; i < message.embeds.length; i++) {
if (message.embeds[i] && message.embeds[i].title.includes("text!")) {
message.channel.send('reply')
}
}
})