auto-create bridged rooms if they don't exist #75
1 changed files with 21 additions and 28 deletions
|
|
@ -10,7 +10,6 @@ if (!channelID) {
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
const assert = require("assert/strict")
|
|
||||||
const sqlite = require("better-sqlite3")
|
const sqlite = require("better-sqlite3")
|
||||||
const backfill = new sqlite("scripts/backfill.db")
|
const backfill = new sqlite("scripts/backfill.db")
|
||||||
backfill.prepare("CREATE TABLE IF NOT EXISTS backfill (channel_id TEXT NOT NULL, message_id INTEGER NOT NULL, PRIMARY KEY (channel_id, message_id))").run()
|
backfill.prepare("CREATE TABLE IF NOT EXISTS backfill (channel_id TEXT NOT NULL, message_id INTEGER NOT NULL, PRIMARY KEY (channel_id, message_id))").run()
|
||||||
|
|
@ -56,35 +55,29 @@ async function event(event) {
|
||||||
if (!channel) return
|
if (!channel) return
|
||||||
const guild_id = event.d.id
|
const guild_id = event.d.id
|
||||||
|
|
||||||
let roomID = passthrough.select("channel_room", "room_id", {channel_id: channelID}).pluck().get()
|
try {
|
||||||
if (!roomID) {
|
await createRoom.syncRoom(channelID)
|
||||||
console.log(`Channel #${channel.name} is not bridged yet. Attempting to auto-create...`)
|
let last = backfill.prepare("SELECT cast(max(message_id) as TEXT) FROM backfill WHERE channel_id = ?").pluck().get(channelID) || "0"
|
||||||
try {
|
console.log(`OK, processing messages for #${channel.name}, continuing from ${last}`)
|
||||||
roomID = await createRoom.syncRoom(channelID)
|
|
||||||
console.log(`Successfully bridged to new room: ${roomID}`)
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`Failed to auto-create room: ${e.message}`)
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let last = backfill.prepare("SELECT cast(max(message_id) as TEXT) FROM backfill WHERE channel_id = ?").pluck().get(channelID) || "0"
|
while (last) {
|
||||||
console.log(`OK, processing messages for #${channel.name}, continuing from ${last}`)
|
const messages = await discord.snow.channel.getChannelMessages(channelID, {limit: 50, after: String(last)})
|
||||||
|
messages.reverse() // More recent messages come first -> More recent messages come last
|
||||||
while (last) {
|
for (const message of messages) {
|
||||||
const messages = await discord.snow.channel.getChannelMessages(channelID, {limit: 50, after: String(last)})
|
const simulatedGatewayDispatchData = {
|
||||||
messages.reverse() // More recent messages come first -> More recent messages come last
|
guild_id,
|
||||||
for (const message of messages) {
|
backfill: true,
|
||||||
const simulatedGatewayDispatchData = {
|
...message
|
||||||
guild_id,
|
}
|
||||||
backfill: true,
|
await eventDispatcher.MESSAGE_CREATE(discord, simulatedGatewayDispatchData)
|
||||||
...message
|
preparedInsert.run(channelID, message.id)
|
||||||
}
|
}
|
||||||
await eventDispatcher.MESSAGE_CREATE(discord, simulatedGatewayDispatchData)
|
last = messages.at(-1)?.id
|
||||||
preparedInsert.run(channelID, message.id)
|
|
||||||
}
|
}
|
||||||
last = messages.at(-1)?.id
|
|
||||||
}
|
|
||||||
|
|
||||||
process.exit()
|
process.exit()
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
process.exit(1) // won't exit automatically on thrown error due to living discord connection, so manual exit is necessary
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue