import { Message, OmitPartialGroupDMChannel, PartialMessage } from "discord.js"; import { SQLCommon } from "../storage/interfaces"; import { SQLResult } from "../storage/enumerations"; // TODO Do partial messages affect other functionality elsewhere? export async function doesMessageExist(db: SQLCommon, message: OmitPartialGroupDMChannel> | PartialMessage) : Promise { const queryResult: Object[] = await db.getAllParameterized( "SELECT * FROM messages WHERE message_snowflake = ?", [message.id] ) return queryResult.length != 0 } export async function insertMessage(db: SQLCommon, message: OmitPartialGroupDMChannel>) : Promise { const alreadyExists: boolean = await doesMessageExist(db, message) if(alreadyExists) { return SQLResult.ALREADYEXISTS } try { await db.runParameterized( "INSERT INTO messages VALUES (?, ?, ?, ?, ?, ?)", [message.id, message.channel.id, message.author.id, message.content, message.createdTimestamp, 0] ) return SQLResult.CREATED } catch (err) { //TODO Winston should handle this console.log(err) return SQLResult.FAILED } } export async function updateMessageContentHistory(db: SQLCommon, message: OmitPartialGroupDMChannel>) : Promise { const messageIDExists: boolean = await doesMessageExist(db, message) if(!messageIDExists) { return SQLResult.FAILED } try { await db.runParameterized( "INSERT INTO message_content_changes (message_snowflake, message_change_old_timestamp, message_change_old_content) " + "SELECT message_snowflake, message_timestamp, message_content FROM messages WHERE message_snowflake = ?;" + "UPDATE messages SET message_timestamp = ?, message_content = ? WHERE message_snowflake = ?;", [message.id, message.editedTimestamp, message.content, message.id] ) return SQLResult.UPDATED } catch (err) { //TODO Winston should handle this console.log(err) return SQLResult.FAILED } } export async function markMessageDeleted(db: SQLCommon, message: OmitPartialGroupDMChannel> | PartialMessage) : Promise { const messageIDExists: boolean = await doesMessageExist(db, message) if(!messageIDExists) { return SQLResult.FAILED } try { await db.runParameterized( "UPDATE messages SET message_deleted = 1 WHERE message_snowflake = ?", [message.id] ) return SQLResult.UPDATED } catch (err) { // TODO Winston should handle this console.log(err) return SQLResult.FAILED } }