// @ts-nocheck 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 { insertAttachment, insertMessage, markMessageDeleted, updateMessageContentHistory } from "../discord/messages"; export function setupMessageCapture(client: Client, db: SQLCommon) { client.on(Events.MessageCreate, async (message) => { await processMessageCreate(db, message) }) client.on(Events.MessageUpdate, async (oldMessage, newMessage) => { await processMessageModify(db, newMessage) }) client.on(Events.MessageDelete, async (deletedMessage) => { await processMessageDeleted(db, deletedMessage) }) } async function processMessageCreate(db: SQLCommon, message: OmitPartialGroupDMChannel>) { const channelOk: SQLResult = await insertChannel(db, message.channel) const userOk: SQLResult = await insertUser(db, message.author) if (channelOk == SQLResult.ALREADYEXISTS || channelOk == SQLResult.CREATED || 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("MESSAGE ATTACHMENT INSERT ERROR") 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) }