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.
bot.on('message', (message) => {
for (var i = 0; i < message.embeds.length; i++) {
if (message.embeds[i].title.includes("text!")) {
message.channel.send('reply')
}
}
})
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')
}
}
})
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 && ...)
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.
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!"))
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!")) {
/* ... */
}