Attachment management for messages is good to go, doesn't handle embeds, but the links for those embeds still show up in the messages

This commit is contained in:
Bradley Bickford 2025-06-29 11:18:28 -04:00
parent c570f57463
commit b474d55612
3 changed files with 57 additions and 3 deletions

Binary file not shown.

View File

@ -1,4 +1,4 @@
import { Message, OmitPartialGroupDMChannel, PartialMessage } from "discord.js"; import { Attachment, Message, OmitPartialGroupDMChannel, PartialMessage } from "discord.js";
import { SQLCommon } from "../storage/interfaces"; import { SQLCommon } from "../storage/interfaces";
import { SQLResult } from "../storage/enumerations"; import { SQLResult } from "../storage/enumerations";
@ -13,6 +13,15 @@ export async function doesMessageExist(db: SQLCommon, message: OmitPartialGroupD
return queryResult.length != 0 return queryResult.length != 0
} }
export async function doesAttachmentExist(db: SQLCommon, attachment: Attachment) : Promise<boolean> {
const queryResult: Object[] = await db.getAllParameterized(
"SELECT * FROM message_attachments WHERE attachment_snowflake = ?",
[attachment.id]
)
return queryResult.length != 0
}
export async function insertMessage(db: SQLCommon, message: OmitPartialGroupDMChannel<Message<boolean>>) : Promise<SQLResult> { export async function insertMessage(db: SQLCommon, message: OmitPartialGroupDMChannel<Message<boolean>>) : Promise<SQLResult> {
const alreadyExists: boolean = await doesMessageExist(db, message) const alreadyExists: boolean = await doesMessageExist(db, message)
@ -77,4 +86,26 @@ export async function markMessageDeleted(db: SQLCommon, message: OmitPartialGrou
console.log(err) console.log(err)
return SQLResult.FAILED return SQLResult.FAILED
} }
}
export async function insertAttachment(db: SQLCommon, attachment: Attachment, message: OmitPartialGroupDMChannel<Message<boolean>> | PartialMessage) : Promise<SQLResult> {
const alreadyExists: boolean = await doesAttachmentExist(db, attachment)
if(alreadyExists) {
return SQLResult.ALREADYEXISTS
}
try {
await db.runParameterized(
"INSERT INTO message_attachments VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
[attachment.id, message.id, attachment.name, attachment.description, message.createdTimestamp,
attachment.contentType, attachment.url, 0]
)
return SQLResult.CREATED
} catch (err) {
// TODO Winston should handle this
console.log(err)
return SQLResult.FAILED
}
} }

View File

@ -1,9 +1,9 @@
import { Client, Events, Message, messageLink, OmitPartialGroupDMChannel, PartialMessage } from "discord.js"; import { Client, Events, Message, OmitPartialGroupDMChannel, PartialMessage } from "discord.js";
import { SQLResult } from "../storage/enumerations"; import { SQLResult } from "../storage/enumerations";
import { SQLCommon } from "../storage/interfaces"; import { SQLCommon } from "../storage/interfaces";
import { insertChannel } from "../discord/channels"; import { insertChannel } from "../discord/channels";
import { insertUser } from "../discord/users"; import { insertUser } from "../discord/users";
import { doesMessageExist, insertMessage, markMessageDeleted, updateMessageContentHistory } from "../discord/messages"; import { insertAttachment, insertMessage, markMessageDeleted, updateMessageContentHistory } from "../discord/messages";
export function setupMessageCapture(client: Client, db: SQLCommon) { export function setupMessageCapture(client: Client, db: SQLCommon) {
client.on(Events.MessageCreate, async (message) => { client.on(Events.MessageCreate, async (message) => {
@ -27,13 +27,36 @@ async function processMessageCreate(db: SQLCommon, message: OmitPartialGroupDMCh
userOk == SQLResult.ALREADYEXISTS || userOk == SQLResult.CREATED) { userOk == SQLResult.ALREADYEXISTS || userOk == SQLResult.CREATED) {
await insertMessage(db, message) await insertMessage(db, message)
// TODO observe success of message insertion
if(message.attachments.size != 0) {
const allAttachments: void[] = message.attachments.map((attachment) => {
insertAttachment(db, attachment, message)
})
await Promise.all(allAttachments).catch((error) => {
// TODO Winston should handle this
console.log(error)
})
}
} }
} }
async function processMessageModify(db: SQLCommon, newMessage: OmitPartialGroupDMChannel<Message<boolean>>) { async function processMessageModify(db: SQLCommon, newMessage: OmitPartialGroupDMChannel<Message<boolean>>) {
await updateMessageContentHistory(db, newMessage) await updateMessageContentHistory(db, newMessage)
if(newMessage.attachments.size != 0) {
const allAttachments: void[] = newMessage.attachments.map((attachment) => {
insertAttachment(db, attachment, newMessage)
})
await Promise.all(allAttachments).catch((error) => {
// TODO Winston should handle this
console.log(error)
})
}
} }
async function processMessageDeleted(db: SQLCommon, deletedMessage: OmitPartialGroupDMChannel<Message<boolean>> | PartialMessage) { async function processMessageDeleted(db: SQLCommon, deletedMessage: OmitPartialGroupDMChannel<Message<boolean>> | PartialMessage) {
await markMessageDeleted(db, deletedMessage) await markMessageDeleted(db, deletedMessage)
} }