fix: time related issues #179
5 changed files with 235 additions and 1049 deletions
1105
package-lock.json
generated
1105
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -25,7 +25,6 @@
|
|||
"discord-player": "^6.7.1",
|
||||
"discord.js": "^14.16.2",
|
||||
"mediaplex": "^0.0.9",
|
||||
"puppeteer": "^23.4.0",
|
||||
"sqlite3": "^5.1.7",
|
||||
"typescript": "^5.6.2",
|
||||
"uuid": "^10.0.0"
|
||||
|
|
|
@ -98,89 +98,100 @@ 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(
|
||||
message.guild?.preferredLocale ?? client.config.default_lang,
|
||||
loc,
|
||||
quoted_post.createdAt,
|
||||
)}`;
|
||||
if (quoted_post.editedAt) {
|
||||
footer += ` et modifié le ${showDate(
|
||||
message.guild?.preferredLocale ?? client.config.default_lang,
|
||||
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(
|
||||
message.guild?.preferredLocale ?? client.config.default_lang,
|
||||
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,
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
@ -414,6 +414,7 @@ export const embedListReminders = async (
|
|||
const expiration = `${loc.get("c_reminder8")} ${timeDeltaToString(remind.expiration_date)}`;
|
||||
embed.addFields({
|
||||
name: `#${remind.id} • ${loc.get("c_reminder9")} ${showDate(
|
||||
local,
|
||||
loc,
|
||||
new Date(Number(remind.creation_date)),
|
||||
)}\n${expiration}`,
|
||||
|
|
|
@ -5,10 +5,8 @@
|
|||
* @param date Date
|
||||
* @returns String
|
||||
*/
|
||||
export const showDate = (locale: Map<string, unknown>, date: Date) => {
|
||||
const timezoned = new Date(date.getTime());
|
||||
return `${timezoned.toDateString()} ${locale.get("u_time_at")} ${timezoned.toTimeString().split(" ")[0]}`;
|
||||
};
|
||||
export const showDate = (tz: string, locale: Map<string, unknown>, date: Date) =>
|
||||
date.toLocaleString(tz).replace(" ", ` ${locale.get("u_time_at")} `);
|
||||
|
||||
enum TimeSecond {
|
||||
Year = 31536000,
|
||||
|
|
Loading…
Reference in a new issue