| import client from "../utils/client.js"; |
| import keyValueList from "../utils/generateKeyValueList.js"; |
| import singleNotify from "../utils/singleNotify.js"; |
| import { saveAttachment } from "../reflex/scanners.js"; |
| import EmojiEmbed from "../utils/generateEmojiEmbed.js"; |
| import addPlural from "../utils/plurals.js"; |
| import type { Message } from "discord.js"; |
| |
| |
| export default async function logAttachment(message: Message): Promise<AttachmentLogSchema> { |
| if (!message.guild) throw new Error("Tried to log an attachment in a non-guild message"); |
| const { renderUser, renderChannel, renderDelta } = client.logger; |
| const attachments = []; |
| for (const attachment of message.attachments.values()) { |
| attachments.push({local: await saveAttachment(attachment.url), url: attachment.url, height: attachment.height, width: attachment.width, size: attachment.size}); |
| } |
| const links = message.content.match(/https?:\/\/\S+/gi) || []; |
| for (const link of links) { |
| if (link.toLowerCase().match(/\.(jpg|jpeg|png|gif|gifv|webm|webp|mp4|wav|mp3|ogg)$/gi)) { |
| attachments.push({local: await saveAttachment(link), url: link, height: null, width: null}); |
| } |
| } |
| if (attachments.length === 0) return {files: []}; |
| if (client.database.premium.hasPremium(message.guild.id)) { |
| const channel = (await client.database.guilds.read(message.guild.id)).logging.attachments.channel; |
| if (!channel) { |
| singleNotify("noAttachmentLogChannel", message.guild.id, "No channel set for attachment logging", "Warning"); |
| return {files: attachments}; |
| } |
| const channelObj = await client.channels.fetch(channel); |
| if (!channelObj) { |
| singleNotify("attachmentLogChannelDeleted", message.guild.id, "Attachment history channel was deleted", "Warning"); |
| return {files: attachments}; |
| } |
| const m = await channelObj.send({embeds: [new EmojiEmbed() |
| .setTitle(`${addPlural(attachments.length, "Attachment")} Sent`) |
| .setDescription(keyValueList({ |
| "messageId": `\`${message.id}\``, |
| "sentBy": renderUser(message.author), |
| "sentIn": renderChannel(message.channel), |
| "sent": renderDelta(new Date(message.createdTimestamp)) |
| }) + `\n[[Jump to message]](${message.url})`) |
| .setEmoji("ICONS.ATTACHMENT") |
| .setStatus("Success") |
| ], files: attachments.map(file => file.local)}); |
| // await client.database.guilds.write(interaction.guild.id, {[`tags.${name}`]: value}); |
| client.database.guilds.write( |
| message.guild.id, |
| {[`logging.attachments.saved.${message.channel.id}${message.id}`]: m.url} |
| ); |
| return {files: attachments, jump: m.url}; |
| } else { |
| return {files: attachments}; |
| } |
| } |
| |
| export interface AttachmentLogSchema { |
| files: { |
| url: string, |
| local: string, |
| height: number | null, |
| width: number | null |
| }[], |
| jump?: string; |
| } |