blob: 8188a6702d349cd4902ba7a66243b00ab7cc6978 [file] [log] [blame]
import type { NucleusClient } from "../utils/client.js";
import Discord, { AuditLogEvent, ButtonStyle, GuildAuditLogsEntry, Message, User } from "discord.js";
import { imageDataEasterEgg } from "../utils/defaults.js";
export const event = "messageDelete";
export async function callback(client: NucleusClient, message: Message) {
if (message.author.id === client.user!.id) return;
if (message.author.bot) return;
if (client.noLog.includes(`${message.guild!.id}/${message.channel.id}/${message.id}`)) return;
const { getAuditLog, isLogging, log, NucleusColors, entry, renderUser, renderDelta, renderChannel } = client.logger;
if (!(await isLogging(message.guild!.id, "messageDelete"))) return;
const auditLog = (await getAuditLog(message.guild!, AuditLogEvent.MemberBanAdd)).filter(
(entry: GuildAuditLogsEntry) => (entry.target! as User).id === message.author.id
)[0];
if (auditLog) {
if (auditLog.createdTimestamp - 1000 < Date.now()) return;
}
const replyTo = message.reference;
let content = message.cleanContent;
content.replace("`", "\\`");
if (content.length > 256) content = content.substring(0, 253) + "...";
const attachments =
message.attachments.size +
(
message.content.match(
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/gi
) ?? []
).length;
let attachmentJump = "";
const config = (await client.database.guilds.read(message.guild!.id)).logging.attachments.saved[
message.channel.id + message.id
];
if (config) {
attachmentJump = ` [[View attachments]](${config})`;
}
const imageData = JSON.stringify({ data: message.content, extra: imageDataEasterEgg }, null, 2);
const data = {
meta: {
type: "messageDelete",
displayName: "Message Deleted",
calculateType: "messageDelete",
color: NucleusColors.red,
emoji: "MESSAGE.DELETE",
timestamp: Date.now(),
imageData: imageData,
buttons: [{ buttonText: "View text", buttonId: "log:message.delete", buttonStyle: ButtonStyle.Secondary }]
},
separate: {
start: content ? `**Message:**\n\`\`\`${content}\`\`\`` : "**Message:** *Message had no content*"
},
list: {
messageId: entry(message.id, `\`${message.id}\``),
sentBy: entry(message.author.id, renderUser(message.author)),
sentIn: entry(
message.channel.id,
renderChannel(message.channel as Discord.GuildChannel | Discord.ThreadChannel)
),
deleted: entry(Date.now(), renderDelta(Date.now())),
mentions: message.mentions.users.size,
attachments: entry(attachments, attachments + attachmentJump),
repliedTo: entry(
replyTo ? replyTo.messageId! : null,
replyTo
? `[[Jump to message]](https://discord.com/channels/${message.guild!.id}/${message.channel.id}/${
replyTo.messageId
})`
: "None"
)
},
hidden: {
guild: message.guild!.id
}
};
await log(data);
}