Compare commits

...

2 commits

Author SHA1 Message Date
93548c0069
Check when we exceed char limit by splitting files into multiples field
All checks were successful
PR Check / lint-and-format (pull_request) Successful in 22s
2024-10-14 21:29:01 +02:00
a8a0c36e51
default element 2024-10-14 21:23:29 +02:00
2 changed files with 32 additions and 13 deletions

View file

@ -1,4 +1,4 @@
import { Client, EmbedBuilder, Message, TextBasedChannel } from "discord.js"; import { APIEmbedField, Client, EmbedBuilder, Message, TextBasedChannel } from "discord.js";
import { getLocale } from "../../utils/locales"; import { getLocale } from "../../utils/locales";
import { isImage, userWithNickname } from "../../utils/misc"; import { isImage, userWithNickname } from "../../utils/misc";
import { showDate } from "../../utils/time"; import { showDate } from "../../utils/time";
@ -96,7 +96,7 @@ export default async (message: Message, client: Client) => {
// Remove undefined elements // Remove undefined elements
.filter(Boolean); .filter(Boolean);
const loc = getLocale(client, client.config.default_lang); const loc = getLocale(client);
// Remove duplicates then map the quoted posts // Remove duplicates then map the quoted posts
[...new Set(messages)] [...new Set(messages)]
@ -114,18 +114,33 @@ export default async (message: Message, client: Client) => {
embed.setImage(quoted_post.attachments.first()!.url); embed.setImage(quoted_post.attachments.first()!.url);
} else { } else {
// Contains more than one image and/or other files // Contains more than one image and/or other files
let files = "";
quoted_post.attachments.forEach((file) => (files += `[${file.name}](${file.url}), `));
embed.addFields({
name:
quoted_post.attachments.size > 1
? loc.get("e_attachements")
: loc.get("e_attachement"),
// TODO: Check if don't exceed char limit, if yes, split // We are currently losing a link to a file if the link is too long,
// files into multiples field. // but we can't do much about it
value: `${files.slice(0, -2)}.`, const maxFieldValueLength = 1024;
const files = quoted_post.attachments
.map((file) => `[${file.name}](${file.url}`)
.filter((link) => link.length <= maxFieldValueLength);
let currentField = "";
const fields: APIEmbedField[] = [];
files.forEach((file, idx) => {
const potentialField = `${currentField}, ${file}`;
if (potentialField.length > maxFieldValueLength || idx === files.length - 1) {
fields.push({
name: loc.get(
quoted_post.attachments.size > 1 ? "e_attachements" : "e_attachement",
),
value: currentField,
});
currentField = file;
} else {
currentField = potentialField;
}
}); });
embed.addFields(fields);
} }
} }

View file

@ -81,9 +81,13 @@ export const getLocalizations = (client: Client, text: string, lowercase = false
* @param lang Lang to fetch * @param lang Lang to fetch
* @returns the map with the desired languaged clogged with the default one * @returns the map with the desired languaged clogged with the default one
*/ */
export const getLocale = (client: Client, lang: string) => { export const getLocale = (client: Client, lang: string | undefined = undefined) => {
// Load default lang // Load default lang
const default_locales = client.locales.get(client.config.default_lang); const default_locales = client.locales.get(client.config.default_lang);
if (!lang) {
return default_locales!;
}
// Load desired lang // Load desired lang
const desired_locales = client.locales.get(lang); const desired_locales = client.locales.get(lang);