64 lines
2.5 KiB
TypeScript
64 lines
2.5 KiB
TypeScript
// @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<Message<boolean>>) {
|
|
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<Message<boolean>>) {
|
|
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) {
|
|
await markMessageDeleted(db, deletedMessage)
|
|
} |