80 lines
2.8 KiB
TypeScript
80 lines
2.8 KiB
TypeScript
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<Message<boolean>> | PartialMessage) : Promise<boolean> {
|
|
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<Message<boolean>>) : Promise<SQLResult> {
|
|
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<Message<boolean>>) : Promise<SQLResult> {
|
|
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<Message<boolean>> | PartialMessage) : Promise<SQLResult> {
|
|
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
|
|
}
|
|
} |