From b474d556120ebd30b9036dd3dc5f21766b6f6f5b Mon Sep 17 00:00:00 2001 From: Bradley Bickford Date: Sun, 29 Jun 2025 11:18:28 -0400 Subject: [PATCH] Attachment management for messages is good to go, doesn't handle embeds, but the links for those embeds still show up in the messages --- breadbot_test.db | Bin 53248 -> 53248 bytes src/utilties/discord/messages.ts | 33 ++++++++++++++++++++++++++++++- src/utilties/events/messages.ts | 27 +++++++++++++++++++++++-- 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/breadbot_test.db b/breadbot_test.db index 2c712a519c3a63bb6fedf1997f17ce7dce9687c6..101cdfaba63762d47048a40d4c7e9e9c3306e048 100644 GIT binary patch delta 1990 zcmbW2&x;#n7{@1@O|s3lnY1bh3SCelD@^8n-+6y7)U9pV+tSMRD)D{ac_$g%{4kl= z77vqd7ez#<^w3@krAR#}6{hw554v-{sTRTC*Mgn>ITia%_Z|N&&%_DKF{-h zXLK(=x|hHCQf~FLm(S-`zj^0#_f)B}=D0t)x80@-D!*4uWo_?d_0>wcS}GNb#TN=o z&uzTz2Tt|N6CZr|abw3pg|#pK`09J7l$b%1yZznz_RrU=#U-12U1rG_?|!mdeL9=m zN|N4S&G!@2>Gtco+xFj&%@u#p>voz(b(J@GZy1MHWIy!Y?MtPurCv`a$u)1#9yYxL zX|iv6vXczFW*m8fV8$RthzJ2F1c+0s=~%5!3z>X>tZ4Xnw|Zk%(dKYFiC5lC5~*7& zmnXd}eY8OqvvXd-&swQp968_49?Ww0&$W%!Ve6IRH*Pgg-#t}wA2{w)_c!;6`-}U? z-E$x8om{!;;^X;ZZi=xq2_~3|`@vXYVLupGUA*jN?iJy*ty?m!^>|nOa z=?*BAi^bR}oW8N1i5&iLwt6S~&$`^wEz_1stQ%Wx*-tiQ(vPotTdmk^hu*o%4FnMJ z0QC^8_c~20-L@RJWz+aJoDNBcoq8A#bhjVMUT-`tI}6Jx>o*-w_x7Nz`QmFbN@osnFl7FE>Po{SLhHl3?l+DWdDw4rv40_18}g$ zMA(%G5GL4YD2ZheF(rguUZy01NK-7SA`Ivtil9;$2p$T9qEJX=;Vc}4^XaIXcIMIf z3l4hL`*jGMAQc!QEFhS>IE``rd2k}kY}-6U49Ng-9vN&eH6nzEG(>@>f`k-URFE+$ zk&2YYh#HV$MTo*eS~|G{bm|utoMj7V>|gV?dLnM(n@2Mr3n%?g^C5yD$g#ctf*c7B z4E{D85oCs=Bqzq$wNVIQ2mk?4Q!Ozdn&U8vti>^cxDlG5h)5$OV*n_wbYM8<9MsB= y;}qOS|M(o(Pr*a??9}ix)1DgsFf*gY>6`2V=BI&OxX!|IzIZI-n(@7VY4j&7A3VYU delta 92 zcmZozz}&Ead4e>f!bBNoMum+DOZd5%`O_KrPx4RaPv5Ml5XnC|U4AZ5>=pz67yjq` ow>Ap~oZ+8*z@KgM1AP@H27%3j4UhRJE)ZwqVgLd-cTqqC04cm3MgRZ+ diff --git a/src/utilties/discord/messages.ts b/src/utilties/discord/messages.ts index d580845..ddcf827 100644 --- a/src/utilties/discord/messages.ts +++ b/src/utilties/discord/messages.ts @@ -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 { SQLResult } from "../storage/enumerations"; @@ -13,6 +13,15 @@ export async function doesMessageExist(db: SQLCommon, message: OmitPartialGroupD return queryResult.length != 0 } +export async function doesAttachmentExist(db: SQLCommon, attachment: Attachment) : Promise { + 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>) : Promise { const alreadyExists: boolean = await doesMessageExist(db, message) @@ -77,4 +86,26 @@ export async function markMessageDeleted(db: SQLCommon, message: OmitPartialGrou console.log(err) return SQLResult.FAILED } +} + +export async function insertAttachment(db: SQLCommon, attachment: Attachment, message: OmitPartialGroupDMChannel> | PartialMessage) : Promise { + 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 + } } \ No newline at end of file diff --git a/src/utilties/events/messages.ts b/src/utilties/events/messages.ts index fbe5c19..c190519 100644 --- a/src/utilties/events/messages.ts +++ b/src/utilties/events/messages.ts @@ -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 { SQLCommon } from "../storage/interfaces"; import { insertChannel } from "../discord/channels"; 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) { client.on(Events.MessageCreate, async (message) => { @@ -27,13 +27,36 @@ async function processMessageCreate(db: SQLCommon, message: OmitPartialGroupDMCh userOk == SQLResult.ALREADYEXISTS || userOk == SQLResult.CREATED) { 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>) { 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> | PartialMessage) { await markMessageDeleted(db, deletedMessage) } \ No newline at end of file