diff --git a/breadbot_test.db b/breadbot_test.db index 2c712a5..101cdfa 100644 Binary files a/breadbot_test.db and b/breadbot_test.db differ 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