Improved database schema
- Some queries are faster due to better index ordering - Database is smaller thanks to splitting message_channel table and adding WITHOUT ROWID where helpful
This commit is contained in:
@@ -81,18 +81,18 @@ module.exports = {
|
||||
async checkMissedMessages(client, guild) {
|
||||
if (guild.unavailable) return
|
||||
const bridgedChannels = db.prepare("SELECT channel_id FROM channel_room").pluck().all()
|
||||
const prepared = db.prepare("SELECT message_id FROM event_message WHERE channel_id = ? AND message_id = ?").pluck()
|
||||
const prepared = db.prepare("SELECT 1 FROM event_message WHERE message_id = ?").pluck()
|
||||
for (const channel of guild.channels.concat(guild.threads)) {
|
||||
if (!bridgedChannels.includes(channel.id)) continue
|
||||
if (!channel.last_message_id) continue
|
||||
const latestWasBridged = prepared.get(channel.id, channel.last_message_id)
|
||||
const latestWasBridged = prepared.get(channel.last_message_id)
|
||||
if (latestWasBridged) continue
|
||||
|
||||
/** More recent messages come first. */
|
||||
console.log(`[check missed messages] in ${channel.id} (${guild.name} / ${channel.name}) because its last message ${channel.last_message_id} is not in the database`)
|
||||
const messages = await client.snow.channel.getChannelMessages(channel.id, {limit: 50})
|
||||
let latestBridgedMessageIndex = messages.findIndex(m => {
|
||||
return prepared.get(channel.id, m.id)
|
||||
return prepared.get(m.id)
|
||||
})
|
||||
console.log(`[check missed messages] got ${messages.length} messages; last message that IS bridged is at position ${latestBridgedMessageIndex} in the channel`)
|
||||
if (latestBridgedMessageIndex === -1) latestBridgedMessageIndex = 1 // rather than crawling the ENTIRE channel history, let's just bridge the most recent 1 message to make it up to date.
|
||||
|
Reference in New Issue
Block a user