diff --git a/src/events/message/messageCreate.ts b/src/events/message/messageCreate.ts index 7c1acaa..31d25ea 100644 --- a/src/events/message/messageCreate.ts +++ b/src/events/message/messageCreate.ts @@ -98,89 +98,91 @@ export default async (message: Message, client: Client) => { const loc = getLocale(client, client.config.default_lang); // Remove duplicates then map the quoted posts - [...new Set(messages)].map((quoted_post) => { - const embed = new EmbedBuilder().setColor("#2f3136").setAuthor({ - name: "Citation", - iconURL: quoted_post?.author.displayAvatarURL(), - }); + [...new Set(messages)] + .filter((p) => p !== undefined) + .map((quoted_post) => { + const embed = new EmbedBuilder().setColor("#2f3136").setAuthor({ + name: "Citation", + iconURL: quoted_post.author.displayAvatarURL(), + }); - // Handle attachments - if (quoted_post?.attachments.size !== 0) { - if (quoted_post?.attachments.size === 1 && isImage(quoted_post.attachments.first()!.name)) { - // Only contains one image - embed.setImage(quoted_post.attachments.first()!.url); + // Handle attachments + if (quoted_post.attachments.size !== 0) { + if (quoted_post.attachments.size === 1 && isImage(quoted_post.attachments.first()!.name)) { + // Only contains one image + embed.setImage(quoted_post.attachments.first()!.url); + } else { + // Contains more than one image and/or other files + let files = ""; + quoted_post.attachments.forEach((file) => (files += `[${file.name}](${file.url}), `)); + embed.addFields({ + // TODO: Don't pluralize when there is only one file. + // TODO: Locales + name: "Fichiers joints", + // TODO: Check if don't exceed char limit, if yes, split + // files into multiples field. + value: `${files.slice(0, -2)}.`, + }); + } + } + + // Description as post content + if (quoted_post.content) { + // Only if content exists and length > 0 + embed.setDescription(quoted_post.content); + } + + // Footer + let footer = `Posté le ${showDate(loc, quoted_post.createdAt)}`; + if (quoted_post.editedAt) { + footer += ` et modifié le ${showDate(loc, quoted_post.editedAt)}`; + } + + let author = "Auteur"; + if (message.author === quoted_post.author) { + author += " & Citateur"; } else { - // Contains more than one image and/or other files - let files = ""; - quoted_post?.attachments.forEach((file) => (files += `[${file.name}](${file.url}), `)); - embed.addFields({ - // TODO: Don't pluralize when there is only one file. - // TODO: Locales - name: "Fichiers joints", - // TODO: Check if don't exceed char limit, if yes, split - // files into multiples field. - value: `${files.slice(0, -2)}.`, + footer += `\nCité par ${userWithNickname(message.member!) ?? "?"} le ${showDate( + loc, + message.createdAt, + )}`; + } + + embed.setFooter({ + text: footer, + iconURL: message.author.avatarURL() ?? undefined, + }); + + // Location/author of the quoted post + embed.addFields( + { + name: author, + value: `${quoted_post.author}`, + inline: true, + }, + { + name: "Message", + value: `${quoted_post.channel} - [Lien Message](${quoted_post.url})`, + inline: true, + }, + ); + + // Delete source message if no content when removing links + if ( + !message.content.replace(new RegExp(regex, "g"), "").trim() && + messages.length === urls.length && + !message.mentions.repliedUser && + message.channel.isSendable() + ) { + message.delete(); + return message.channel.send({ embeds: [embed] }); + } else { + return message.reply({ + embeds: [embed], + allowedMentions: { + repliedUser: false, + }, }); } - } - - // Description as post content - if (quoted_post?.content) { - // Only if content exists and length > 0 - embed.setDescription(quoted_post?.content); - } - - // Footer - let footer = `Posté le ${showDate(loc, quoted_post!.createdAt)}`; - if (quoted_post?.editedAt) { - footer += ` et modifié le ${showDate(loc, quoted_post.editedAt)}`; - } - - let author = "Auteur"; - if (message.author === quoted_post?.author) { - author += " & Citateur"; - } else { - footer += `\nCité par ${userWithNickname(message.member!) ?? "?"} le ${showDate( - loc, - message.createdAt, - )}`; - } - - embed.setFooter({ - text: footer, - iconURL: message.author.avatarURL() ?? undefined, }); - - // Location/author of the quoted post - embed.addFields( - { - name: author, - value: `${quoted_post?.author}`, - inline: true, - }, - { - name: "Message", - value: `${quoted_post?.channel} - [Lien Message](${quoted_post?.url})`, - inline: true, - }, - ); - - // Delete source message if no content when removing links - if ( - !message.content.replace(new RegExp(regex, "g"), "").trim() && - messages.length === urls.length && - !message.mentions.repliedUser && - message.channel.isSendable() - ) { - message.delete(); - return message.channel.send({ embeds: [embed] }); - } else { - return message.reply({ - embeds: [embed], - allowedMentions: { - repliedUser: false, - }, - }); - } - }); };