Support multiple versions of rooms
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// @ts-check
|
||||
|
||||
const assert = require("assert")
|
||||
const assert = require("assert").strict
|
||||
|
||||
const passthrough = require("../../passthrough")
|
||||
const {discord, sync, db, select} = passthrough
|
||||
|
||||
@@ -228,7 +228,10 @@ async function createRoom(channel, guild, spaceID, kstate, privacyLevel) {
|
||||
...spaceCreationContent
|
||||
})
|
||||
|
||||
db.prepare("INSERT INTO channel_room (channel_id, room_id, name, nick, thread_parent) VALUES (?, ?, ?, NULL, ?)").run(channel.id, roomID, channel.name, threadParent)
|
||||
db.transaction(() => {
|
||||
db.prepare("INSERT INTO channel_room (channel_id, room_id, name, nick, thread_parent) VALUES (?, ?, ?, NULL, ?)").run(channel.id, roomID, channel.name, threadParent)
|
||||
db.prepare("INSERT INTO historical_channel_room (channel_id, room_id) VALUES (?, ?)").run(channel.id, roomID)
|
||||
})()
|
||||
|
||||
return roomID
|
||||
})
|
||||
@@ -400,7 +403,7 @@ async function _syncRoom(channelID, shouldActuallySync) {
|
||||
}
|
||||
const roomDiff = ks.diffKState(roomKState, channelKState)
|
||||
const roomApply = ks.applyKStateDiffToRoom(roomID, roomDiff)
|
||||
db.prepare("UPDATE channel_room SET name = ? WHERE room_id = ?").run(channel.name, roomID)
|
||||
db.prepare("UPDATE channel_room SET name = ? WHERE channel_id = ?").run(channel.name, channel.id)
|
||||
|
||||
// sync room as space member
|
||||
const spaceApply = _syncSpaceMember(channel, spaceID, roomID, guild.id)
|
||||
@@ -464,7 +467,7 @@ async function unbridgeDeletedChannel(channel, guildID) {
|
||||
|
||||
// delete room from database
|
||||
db.prepare("DELETE FROM member_cache WHERE room_id = ?").run(roomID)
|
||||
db.prepare("DELETE FROM channel_room WHERE room_id = ? AND channel_id = ?").run(roomID, channel.id) // cascades to most other tables, like messages
|
||||
db.prepare("DELETE FROM channel_room WHERE room_id = ? AND channel_id = ?").run(roomID, channel.id) // cascades to most other tables, like messages and historical rooms
|
||||
|
||||
if (!botInRoom) return
|
||||
|
||||
|
||||
@@ -14,11 +14,13 @@ async function deleteMessage(data) {
|
||||
const row = select("channel_room", ["room_id", "speedbump_checked", "thread_parent"], {channel_id: data.channel_id}).get()
|
||||
if (!row) return
|
||||
|
||||
const eventsToRedact = select("event_message", "event_id", {message_id: data.id}).pluck().all()
|
||||
db.prepare("DELETE FROM message_channel WHERE message_id = ?").run(data.id)
|
||||
for (const eventID of eventsToRedact) {
|
||||
// Assume we can redact from tombstoned rooms.
|
||||
const eventsToRedact = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("event_id", "room_id").where({message_id: data.id}).all()
|
||||
db.prepare("DELETE FROM message_room WHERE message_id = ?").run(data.id)
|
||||
for (const {event_id, room_id} of eventsToRedact) {
|
||||
// Unfortunately, we can't specify a sender to do the redaction as, unless we find out that info via the audit logs
|
||||
await api.redactEvent(row.room_id, eventID)
|
||||
await api.redactEvent(room_id, event_id)
|
||||
}
|
||||
|
||||
await speedbump.updateCache(row.thread_parent || data.channel_id, row.speedbump_checked)
|
||||
@@ -28,15 +30,17 @@ async function deleteMessage(data) {
|
||||
* @param {import("discord-api-types/v10").GatewayMessageDeleteBulkDispatchData} data
|
||||
*/
|
||||
async function deleteMessageBulk(data) {
|
||||
const roomID = select("channel_room", "room_id", {channel_id: data.channel_id}).pluck().get()
|
||||
if (!roomID) return
|
||||
const row = select("channel_room", "room_id", {channel_id: data.channel_id}).get()
|
||||
if (!row) return
|
||||
|
||||
const sids = JSON.stringify(data.ids)
|
||||
const eventsToRedact = from("event_message").pluck("event_id").and("WHERE message_id IN (SELECT value FROM json_each(?))").all(sids)
|
||||
db.prepare("DELETE FROM message_channel WHERE message_id IN (SELECT value FROM json_each(?))").run(sids)
|
||||
for (const eventID of eventsToRedact) {
|
||||
// Assume we can redact from tombstoned rooms.
|
||||
const eventsToRedact = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("event_id", "room_id").and("WHERE message_id IN (SELECT value FROM json_each(?))").all(sids)
|
||||
db.prepare("DELETE FROM message_room WHERE message_id IN (SELECT value FROM json_each(?))").run(sids)
|
||||
for (const {event_id, room_id} of eventsToRedact) {
|
||||
// Awaiting will make it go slower, but since this could be a long-running operation either way, we want to leave rate limit capacity for other operations
|
||||
await api.redactEvent(roomID, eventID)
|
||||
await api.redactEvent(room_id, event_id)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
const assert = require("assert").strict
|
||||
|
||||
const passthrough = require("../../passthrough")
|
||||
const {sync, db, select} = passthrough
|
||||
const {sync, db, select, from} = passthrough
|
||||
/** @type {import("../converters/edit-to-changes")} */
|
||||
const editToChanges = sync.require("../converters/edit-to-changes")
|
||||
/** @type {import("./register-pk-user")} */
|
||||
@@ -19,6 +19,12 @@ const mreq = sync.require("../../matrix/mreq")
|
||||
* @param {{speedbump_id: string, speedbump_webhook_id: string} | null} row data about the webhook which is proxying messages in this channel
|
||||
*/
|
||||
async function editMessage(message, guild, row) {
|
||||
const historicalRoomOfMessage = from("message_room").join("historical_channel_room", "historical_room_index").where({message_id: message.id}).select("room_id").get()
|
||||
const currentRoom = from("channel_room").join("historical_channel_room", "room_id").where({channel_id: message.channel_id}).select("room_id", "historical_room_index").get()
|
||||
assert(currentRoom)
|
||||
|
||||
if (historicalRoomOfMessage && historicalRoomOfMessage.room_id !== currentRoom.room_id) return // tombstoned rooms should not have new events (including edits) sent to them
|
||||
|
||||
let {roomID, eventsToRedact, eventsToReplace, eventsToSend, senderMxid, promotions} = await editToChanges.editToChanges(message, guild, api)
|
||||
|
||||
if (row && row.speedbump_webhook_id === message.webhook_id) {
|
||||
@@ -61,7 +67,7 @@ async function editMessage(message, guild, row) {
|
||||
|
||||
// 4. Send all the things.
|
||||
if (eventsToSend.length) {
|
||||
db.prepare("INSERT OR IGNORE INTO message_channel (message_id, channel_id) VALUES (?, ?)").run(message.id, message.channel_id)
|
||||
db.prepare("INSERT OR IGNORE INTO message_room (message_id, historical_room_index) VALUES (?, ?)").run(message.id, currentRoom.historical_room_index)
|
||||
}
|
||||
for (const content of eventsToSend) {
|
||||
const eventType = content.$type
|
||||
|
||||
@@ -4,10 +4,9 @@ const assert = require("assert").strict
|
||||
const {reg} = require("../../matrix/read-registration")
|
||||
const DiscordTypes = require("discord-api-types/v10")
|
||||
const Ty = require("../../types")
|
||||
const mixin = require("@cloudrac3r/mixin-deep")
|
||||
|
||||
const passthrough = require("../../passthrough")
|
||||
const {discord, sync, db, select} = passthrough
|
||||
const {discord, sync, db, from, select} = passthrough
|
||||
/** @type {import("../../matrix/api")} */
|
||||
const api = sync.require("../../matrix/api")
|
||||
/** @type {import("../../matrix/file")} */
|
||||
@@ -222,7 +221,8 @@ async function syncUser(user, member, channel, guild, roomID) {
|
||||
* @param {string} roomID
|
||||
*/
|
||||
async function syncAllUsersInRoom(roomID) {
|
||||
const mxids = select("sim_member", "mxid", {room_id: roomID}).pluck().all()
|
||||
const users = from("sim_member").join("sim", "mxid")
|
||||
.where({room_id: roomID}).and("and user_id not like '%-%' and user_id not like '%\\_%' escape '\\'").pluck("user_id").all()
|
||||
|
||||
const channelID = select("channel_room", "channel_id", {room_id: roomID}).pluck().get()
|
||||
assert.ok(typeof channelID === "string")
|
||||
@@ -234,10 +234,7 @@ async function syncAllUsersInRoom(roomID) {
|
||||
/** @ts-ignore @type {DiscordTypes.APIGuild} */
|
||||
const guild = discord.guilds.get(guildID)
|
||||
|
||||
for (const mxid of mxids) {
|
||||
const userID = select("sim", "user_id", {mxid}).pluck().get()
|
||||
assert.ok(typeof userID === "string")
|
||||
|
||||
for (const userID of users) {
|
||||
/** @ts-ignore @type {Required<DiscordTypes.APIGuildMember>} */
|
||||
const member = await discord.snow.guild.getGuildMember(guildID, userID)
|
||||
/** @ts-ignore @type {Required<DiscordTypes.APIUser>} user */
|
||||
|
||||
@@ -4,7 +4,7 @@ const Ty = require("../../types")
|
||||
const DiscordTypes = require("discord-api-types/v10")
|
||||
|
||||
const passthrough = require("../../passthrough")
|
||||
const {discord, sync, db, select} = passthrough
|
||||
const {discord, sync, db, from, select} = passthrough
|
||||
/** @type {import("../../matrix/api")} */
|
||||
const api = sync.require("../../matrix/api")
|
||||
/** @type {import("../converters/emoji-to-key")} */
|
||||
@@ -18,12 +18,15 @@ const converter = sync.require("../converters/remove-reaction")
|
||||
* @param {DiscordTypes.GatewayMessageReactionRemoveDispatchData | DiscordTypes.GatewayMessageReactionRemoveEmojiDispatchData | DiscordTypes.GatewayMessageReactionRemoveAllDispatchData} data
|
||||
*/
|
||||
async function removeSomeReactions(data) {
|
||||
const roomID = select("channel_room", "room_id", {channel_id: data.channel_id}).pluck().get()
|
||||
if (!roomID) return
|
||||
const eventIDForMessage = select("event_message", "event_id", {message_id: data.message_id, reaction_part: 0}).pluck().get()
|
||||
if (!eventIDForMessage) return
|
||||
const row = select("channel_room", "room_id", {channel_id: data.channel_id}).get()
|
||||
if (!row) return
|
||||
|
||||
const reactions = await api.getFullRelations(roomID, eventIDForMessage, "m.annotation")
|
||||
const eventReactedTo = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.where({message_id: data.message_id, reaction_part: 0}).select("event_id", "room_id").get()
|
||||
if (!eventReactedTo) return
|
||||
|
||||
// Due to server restrictions, all relations (i.e. reactions) have to be in the same room as the original event.
|
||||
const reactions = await api.getFullRelations(eventReactedTo.room_id, eventReactedTo.event_id, "m.annotation")
|
||||
|
||||
// Run the proper strategy and any strategy-specific database changes
|
||||
const removals = await
|
||||
@@ -33,7 +36,7 @@ async function removeSomeReactions(data) {
|
||||
|
||||
// Redact the events and delete individual stored events in the database
|
||||
for (const removal of removals) {
|
||||
await api.redactEvent(roomID, removal.eventID, removal.mxid)
|
||||
await api.redactEvent(eventReactedTo.room_id, removal.eventID, removal.mxid)
|
||||
if (removal.hash) db.prepare("DELETE FROM reaction WHERE hashed_event_id = ?").run(removal.hash)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,8 @@ const dUtils = sync.require("../../discord/utils")
|
||||
*/
|
||||
async function sendMessage(message, channel, guild, row) {
|
||||
const roomID = await createRoom.ensureRoom(message.channel_id)
|
||||
const historicalRoomIndex = select("historical_channel_room", "historical_room_index", {room_id: roomID}).pluck().get()
|
||||
assert(historicalRoomIndex)
|
||||
|
||||
let senderMxid = null
|
||||
if (dUtils.isWebhookMessage(message)) {
|
||||
@@ -52,7 +54,7 @@ async function sendMessage(message, channel, guild, row) {
|
||||
const events = await messageToEvent.messageToEvent(message, guild, {}, {api, snow: discord.snow})
|
||||
const eventIDs = []
|
||||
if (events.length) {
|
||||
db.prepare("INSERT OR IGNORE INTO message_channel (message_id, channel_id) VALUES (?, ?)").run(message.id, message.channel_id)
|
||||
db.prepare("INSERT OR IGNORE INTO message_room (message_id, historical_room_index) VALUES (?, ?)").run(message.id, historicalRoomIndex)
|
||||
if (senderMxid) api.sendTyping(roomID, false, senderMxid).catch(() => {})
|
||||
}
|
||||
for (const event of events) {
|
||||
|
||||
@@ -265,7 +265,7 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||
- So make sure we don't do anything in this case.
|
||||
*/
|
||||
const mentions = {}
|
||||
/** @type {{event_id: string, room_id: string, source: number}?} */
|
||||
/** @type {{event_id: string, room_id: string, source: number, channel_id: string}?} */
|
||||
let repliedToEventRow = null
|
||||
let repliedToUnknownEvent = false
|
||||
let repliedToEventSenderMxid = null
|
||||
@@ -280,9 +280,9 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||
// Mentions scenarios 1 and 2, part A. i.e. translate relevant message.mentions to m.mentions
|
||||
// (Still need to do scenarios 1 and 2 part B, and scenario 3.)
|
||||
if (message.type === DiscordTypes.MessageType.Reply && message.message_reference?.message_id) {
|
||||
const row = from("event_message").join("message_channel", "message_id").join("channel_room", "channel_id").select("event_id", "room_id", "source").and("WHERE message_id = ? AND part = 0").get(message.message_reference.message_id)
|
||||
const row = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index").select("event_id", "room_id", "reference_channel_id", "source").and("WHERE message_id = ? AND part = 0").get(message.message_reference.message_id)
|
||||
if (row) {
|
||||
repliedToEventRow = row
|
||||
repliedToEventRow = Object.assign(row, {channel_id: row.reference_channel_id})
|
||||
} else if (message.referenced_message) {
|
||||
repliedToUnknownEvent = true
|
||||
}
|
||||
@@ -294,7 +294,7 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||
assert(message.embeds[0].description)
|
||||
const match = message.embeds[0].description.match(/\/channels\/[0-9]*\/[0-9]*\/([0-9]{2,})/)
|
||||
if (match) {
|
||||
const row = from("event_message").join("message_channel", "message_id").join("channel_room", "channel_id").select("event_id", "room_id", "source").and("WHERE message_id = ? AND part = 0").get(match[1])
|
||||
const row = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index").select("event_id", "room_id", "reference_channel_id", "source").and("WHERE message_id = ? AND part = 0").get(match[1])
|
||||
if (row) {
|
||||
/*
|
||||
we generate a partial referenced_message based on what PK provided. we don't need everything, since this will only be used for further message-to-event converting.
|
||||
@@ -313,7 +313,7 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||
}
|
||||
}
|
||||
message.embeds.shift()
|
||||
repliedToEventRow = row
|
||||
repliedToEventRow = Object.assign(row, {channel_id: row.reference_channel_id})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -485,8 +485,12 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||
const {body: repliedToBody, html: repliedToHtml} = await transformContent(repliedToContent)
|
||||
if (repliedToEventRow) {
|
||||
// Generate a reply pointing to the Matrix event we found
|
||||
html = `<mx-reply><blockquote><a href="https://matrix.to/#/${repliedToEventRow.room_id}/${repliedToEventRow.event_id}">In reply to</a> ${repliedToUserHtml}`
|
||||
+ `<br>${repliedToHtml}</blockquote></mx-reply>`
|
||||
const latestRoomID = select("channel_room", "room_id", {channel_id: repliedToEventRow.channel_id}).pluck().get() // native replies don't work across room upgrades, so make sure the old and new message are in the same room
|
||||
html =
|
||||
(latestRoomID === repliedToEventRow.room_id ? "<mx-reply>" : "")
|
||||
+ `<blockquote><a href="https://matrix.to/#/${repliedToEventRow.room_id}/${repliedToEventRow.event_id}">In reply to</a> ${repliedToUserHtml}`
|
||||
+ `<br>${repliedToHtml}</blockquote>`
|
||||
+ (latestRoomID === repliedToEventRow.room_id ? "</mx-reply>" : "")
|
||||
+ html
|
||||
body = (`${repliedToDisplayName}: ` // scenario 1 part B for mentions
|
||||
+ repliedToBody).split("\n").map(line => "> " + line).join("\n")
|
||||
@@ -544,21 +548,23 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||
// Forwarded content appears first
|
||||
if (message.message_reference?.type === DiscordTypes.MessageReferenceType.Forward && message.message_snapshots?.length) {
|
||||
// Forwarded notice
|
||||
const eventID = select("event_message", "event_id", {message_id: message.message_reference.message_id}).pluck().get()
|
||||
const event = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("event_id", "room_id").where({message_id: message.message_reference.message_id}).get()
|
||||
const room = select("channel_room", ["room_id", "name", "nick"], {channel_id: message.message_reference.channel_id}).get()
|
||||
const forwardedNotice = new mxUtils.MatrixStringBuilder()
|
||||
if (room) {
|
||||
const roomName = room && (room.nick || room.name)
|
||||
const via = await getViaServersMemo(room.room_id)
|
||||
if (eventID) {
|
||||
if (event) {
|
||||
const via = await getViaServersMemo(event.room_id)
|
||||
forwardedNotice.addLine(
|
||||
`[🔀 Forwarded from #${roomName}]`,
|
||||
tag`🔀 <em>Forwarded from <a href="https://matrix.to/#/${room.room_id}/${eventID}?${via}">${roomName}</a></em>`
|
||||
tag`🔀 <em>Forwarded from ${roomName} <a href="https://matrix.to/#/${room.room_id}/${event.event_id}?${via}">[jump to event]</a></em>`
|
||||
)
|
||||
} else {
|
||||
const via = await getViaServersMemo(room.room_id)
|
||||
forwardedNotice.addLine(
|
||||
`[🔀 Forwarded from #${roomName}]`,
|
||||
tag`🔀 <em>Forwarded from <a href="https://matrix.to/#/${room.room_id}?${via}">${roomName}</a></em>`
|
||||
tag`🔀 <em>Forwarded from ${roomName} <a href="https://matrix.to/#/${room.room_id}?${via}">[jump to room]</a></em>`
|
||||
)
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -1152,7 +1152,7 @@ test("message2event: constructed forwarded message", async t => {
|
||||
body: "[🔀 Forwarded from #wonderland]"
|
||||
+ "\n» What's cooking, good looking? :hipposcope:",
|
||||
format: "org.matrix.custom.html",
|
||||
formatted_body: `🔀 <em>Forwarded from <a href="https://matrix.to/#/!qzDBLKlildpzrrOnFZ:cadence.moe/$tBIT8mO7XTTCgIINyiAIy6M2MSoPAdJenRl_RLyYuaE?via=cadence.moe&via=matrix.org">wonderland</a></em>`
|
||||
formatted_body: `🔀 <em>Forwarded from wonderland <a href="https://matrix.to/#/!qzDBLKlildpzrrOnFZ:cadence.moe/$tBIT8mO7XTTCgIINyiAIy6M2MSoPAdJenRl_RLyYuaE?via=cadence.moe&via=matrix.org">[jump to event]</a></em>`
|
||||
+ `<br><blockquote>What's cooking, good looking? <img data-mx-emoticon height="32" src="mxc://cadence.moe/WbYqNlACRuicynBfdnPYtmvc" title=":hipposcope:" alt=":hipposcope:"></blockquote>`,
|
||||
"m.mentions": {},
|
||||
msgtype: "m.notice",
|
||||
@@ -1210,7 +1210,7 @@ test("message2event: constructed forwarded text", async t => {
|
||||
body: "[🔀 Forwarded from #amanda-spam]"
|
||||
+ "\n» What's cooking, good looking?",
|
||||
format: "org.matrix.custom.html",
|
||||
formatted_body: `🔀 <em>Forwarded from <a href="https://matrix.to/#/!CzvdIdUQXgUjDVKxeU:cadence.moe?via=cadence.moe&via=matrix.org">amanda-spam</a></em>`
|
||||
formatted_body: `🔀 <em>Forwarded from amanda-spam <a href="https://matrix.to/#/!CzvdIdUQXgUjDVKxeU:cadence.moe?via=cadence.moe&via=matrix.org">[jump to room]</a></em>`
|
||||
+ `<br><blockquote>What's cooking, good looking?</blockquote>`,
|
||||
"m.mentions": {},
|
||||
msgtype: "m.notice",
|
||||
|
||||
@@ -99,6 +99,10 @@ function webhookAuthorToFakeUserID(author) {
|
||||
return `webhook_${downcased}`
|
||||
}
|
||||
|
||||
function isWebhookUserID(userID) {
|
||||
return userID.match(/^webhook_[a-z90-9._=/-]+$/)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Ty.WebhookAuthor} author
|
||||
* @returns {string}
|
||||
@@ -132,3 +136,4 @@ function webhookAuthorToSimName(author) {
|
||||
module.exports.userToSimName = userToSimName
|
||||
module.exports.webhookAuthorToFakeUserID = webhookAuthorToFakeUserID
|
||||
module.exports.webhookAuthorToSimName = webhookAuthorToSimName
|
||||
module.exports.isWebhookUserID = isWebhookUserID
|
||||
|
||||
@@ -6,10 +6,6 @@ const DiscordTypes = require("discord-api-types/v10")
|
||||
const passthrough = require("../passthrough")
|
||||
const {sync, db} = passthrough
|
||||
|
||||
function populateGuildID(guildID, channelID) {
|
||||
db.prepare("UPDATE channel_room SET guild_id = ? WHERE channel_id = ?").run(guildID, channelID)
|
||||
}
|
||||
|
||||
const utils = {
|
||||
/**
|
||||
* @param {import("./discord-client")} client
|
||||
@@ -41,14 +37,12 @@ const utils = {
|
||||
channel.guild_id = message.d.id
|
||||
arr.push(channel.id)
|
||||
client.channels.set(channel.id, channel)
|
||||
populateGuildID(message.d.id, channel.id)
|
||||
}
|
||||
for (const thread of message.d.threads || []) {
|
||||
// @ts-ignore
|
||||
thread.guild_id = message.d.id
|
||||
arr.push(thread.id)
|
||||
client.channels.set(thread.id, thread)
|
||||
populateGuildID(message.d.id, thread.id)
|
||||
}
|
||||
|
||||
if (listen === "full") {
|
||||
@@ -112,7 +106,6 @@ const utils = {
|
||||
} else if (message.t === "THREAD_CREATE") {
|
||||
client.channels.set(message.d.id, message.d)
|
||||
if (message.d["guild_id"]) {
|
||||
populateGuildID(message.d["guild_id"], message.d.id)
|
||||
const channels = client.guildChannelMap.get(message.d["guild_id"])
|
||||
if (channels && !channels.includes(message.d.id)) channels.push(message.d.id)
|
||||
}
|
||||
@@ -140,7 +133,6 @@ const utils = {
|
||||
} else if (message.t === "CHANNEL_CREATE") {
|
||||
client.channels.set(message.d.id, message.d)
|
||||
if (message.d["guild_id"]) { // obj[prop] notation can be used to access a property without typescript complaining that it doesn't exist on all values something can have
|
||||
populateGuildID(message.d["guild_id"], message.d.id)
|
||||
const channels = client.guildChannelMap.get(message.d["guild_id"])
|
||||
if (channels && !channels.includes(message.d.id)) channels.push(message.d.id)
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ module.exports = {
|
||||
async checkMissedMessages(client, guild) {
|
||||
if (guild.unavailable) return
|
||||
const bridgedChannels = select("channel_room", "channel_id").pluck().all()
|
||||
const preparedExists = db.prepare("SELECT channel_id FROM message_channel WHERE channel_id = ? LIMIT 1")
|
||||
const preparedExists = from("message_room").join("historical_channel_room", "historical_room_index").pluck("message_id").and("WHERE reference_channel_id = ? LIMIT 1").prepare()
|
||||
const preparedGet = select("event_message", "event_id", {}, "WHERE message_id = ?").pluck()
|
||||
/** @type {(DiscordTypes.APIChannel & {type: DiscordTypes.GuildChannelType})[]} */
|
||||
let channels = []
|
||||
|
||||
@@ -1,225 +0,0 @@
|
||||
-- https://www.sqlite.org/lang_analyze.html
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
ANALYZE sqlite_schema;
|
||||
|
||||
DELETE FROM "sqlite_stat1";
|
||||
INSERT INTO "sqlite_stat1" ("tbl","idx","stat") VALUES ('sim','sim','625 1'),
|
||||
('reaction','reaction','3242 1'),
|
||||
('channel_room','channel_room','389 1'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','389 1'),
|
||||
('media_proxy','media_proxy','5068 1'),
|
||||
('sim_proxy','sim_proxy','36 1'),
|
||||
('webhook','webhook','155 1'),
|
||||
('member_cache','member_cache','784 3 1'),
|
||||
('member_power','member_power','1 1 1'),
|
||||
('file','file','21862 1'),
|
||||
('message_channel','message_channel','366884 1'),
|
||||
('lottie','lottie','19 1'),
|
||||
('event_message','event_message','382920 1 1'),
|
||||
('migration',NULL,'1'),
|
||||
('sim_member','sim_member','2871 7 1'),
|
||||
('guild_space','guild_space','32 1'),
|
||||
('guild_active','guild_active','34 1'),
|
||||
('emoji','emoji','2563 1'),
|
||||
('auto_emoji','auto_emoji','3 1');
|
||||
|
||||
DELETE FROM "sqlite_stat4";
|
||||
INSERT INTO "sqlite_stat4" ("tbl","idx","neq","nlt","ndlt","sample") VALUES ('sim','sim','1','69','69',X'0231313137363631373038303932333039353039'),
|
||||
('sim','sim','1','139','139',X'0231313530383936363934333439373931323332'),
|
||||
('sim','sim','1','209','209',X'0231323231383737363334373737323139303732'),
|
||||
('sim','sim','1','279','279',X'0231333039313431353735353334313136383636'),
|
||||
('sim','sim','1','349','349',X'0231333935343433383235363034313635363434'),
|
||||
('sim','sim','1','419','419',X'0231353335363239373830383338353134373030'),
|
||||
('sim','sim','1','489','489',X'0231363930333339333730353930363636383034'),
|
||||
('sim','sim','1','559','559',X'0231383535353736303637393137323137383133'),
|
||||
('reaction','reaction','1','360','360',X'020699d5faceefb5fb4f'),
|
||||
('reaction','reaction','1','721','721',X'0206b61095e98b6b2fb1'),
|
||||
('reaction','reaction','1','1082','1082',X'0206d1dcb418603a5eaa'),
|
||||
('reaction','reaction','1','1443','1443',X'0206ef9fc42b9df746ad'),
|
||||
('reaction','reaction','1','1804','1804',X'02060f38c1f98f130605'),
|
||||
('reaction','reaction','1','2165','2165',X'02062b53df6dab7b1067'),
|
||||
('reaction','reaction','1','2526','2526',X'020645dd7e7f60c4aac7'),
|
||||
('reaction','reaction','1','2887','2887',X'0206658d2fe735805979'),
|
||||
('channel_room','channel_room','1','43','43',X'023331313434393131333330393139333231363330'),
|
||||
('channel_room','channel_room','1','87','87',X'023331313835343033343830303934303335393738'),
|
||||
('channel_room','channel_room','1','131','131',X'023331323139353036353836343139303638393839'),
|
||||
('channel_room','channel_room','1','175','175',X'023331323336353538333034323331303334393630'),
|
||||
('channel_room','channel_room','1','219','219',X'023331323933373932323135333930323234343235'),
|
||||
('channel_room','channel_room','1','263','263',X'023331333333323139363936393333323038303937'),
|
||||
('channel_room','channel_room','1','307','307',X'0231343835363635393733363433333738363938'),
|
||||
('channel_room','channel_room','1','351','351',X'0231373039303432313039353632323234363731'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','6 6','6 6',X'034b3321416a6c4c49464e6248646474424a6d4d73503a636164656e63652e6d6f6531313531333434383735363139343833373233'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','34 34','34 34',X'034b3321474b4a63424a6b527a47634e4855686c50613a636164656e63652e6d6f6531303237393433323532323237323630343637'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','43 43','43 43',X'034b3121484b50534d62736d694673506d6268414f513a636164656e63652e6d6f65313931343837343839393433343034353434'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','58 58','58 58',X'034b33214a4479425a685545706874784f6e6f6569513a636164656e63652e6d6f6531323937323836373434353633313236333532'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','87 87','87 87',X'034b33214e544d724e686e715271695755654d494d523a636164656e63652e6d6f6531323235323434353738393939373031353536'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','108 108','108 108',X'034b332151444e44796656674e7657565345656876713a636164656e63652e6d6f6531313432333134303935353535363435343830'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','131 131','131 131',X'034b3121544171536b575752654b43506f584c6a75483a636164656e63652e6d6f65383737303730363531343733363631393532'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','175 175','175 175',X'034b3321594249486864714e697255585941587845563a636164656e63652e6d6f6531323335303831373939353936373639333730'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','177 177','177 177',X'034b3321594b46454e79716667696951686956496b533a636164656e63652e6d6f6531323934363237303431343530333933373034'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','186 186','186 186',X'034b3321596f54644f55766a53765349767266716c653a636164656e63652e6d6f6531323734313936373733383435333430323933'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','202 202','202 202',X'034b3121625877616673695372655647676470535a463a636164656e63652e6d6f65373339303137363739373936343336393932'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','208 208','208 208',X'034b3321634a4b6843764943795377717a47634551423a636164656e63652e6d6f6531323732363632303331323238373331343834'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','219 219','219 219',X'034b3121656455786a56647a6755765844554951434b3a636164656e63652e6d6f65343937313631333530393334353630373738'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','242 242','242 242',X'034b31216a4d746e6e6f51414e4278466a486458494d3a636164656e63652e6d6f65373634353135323932303539323731313939'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','263 263','263 263',X'034b31216c7a776870666a5a6e59797468656a7453483a636164656e63652e6d6f65383838343831373132383438343030343534'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','264 264','264 264',X'034b33216d454c5846716a426958726d7558796943723a636164656e63652e6d6f6531313936393134373631303430393234373432'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','268 268','268 268',X'034b33216d557765577571546761574a767769576a653a636164656e63652e6d6f6531323936373131393236333032333830303834'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','291 291','291 291',X'034b3321704761494e45534643587a634e42497a724e3a636164656e63652e6d6f6531303237343531333333333533313532353232'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','306 306','306 306',X'034b3321717646656248564f4b6876454e54494563763a636164656e63652e6d6f6531323737373238383139323232303230313436'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','307 307','307 307',X'034b332171767370666d716f476449634a66794c506c3a636164656e63652e6d6f6531323936393138333638393539343633343735'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','351 351','351 351',X'034b3321774e7a7741724a47796f4c5168426f544e4b3a636164656e63652e6d6f6531303238303436373930333435333739383930'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','368 368','368 368',X'034b3321794e6d504c7765654a69756570725a677a733a636164656e63652e6d6f6531323531393631373233373731313632363234'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','376 376','376 376',X'034b3121796a4879795772466f704c66646878564e423a636164656e63652e6d6f65333336313537353037303734353233313336'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','379 379','379 379',X'034b31217a4c4f6b62766b44587551465948594555673a636164656e63652e6d6f65393933383838313433373030393330363331'),
|
||||
('media_proxy','media_proxy','1','563','563',X'02069e6054680b610946'),
|
||||
('media_proxy','media_proxy','1','1127','1127',X'0206bb489b717c9320e4'),
|
||||
('media_proxy','media_proxy','1','1691','1691',X'0206d75f602775b7a27c'),
|
||||
('media_proxy','media_proxy','1','2255','2255',X'0206f2c705ddca4e2b14'),
|
||||
('media_proxy','media_proxy','1','2819','2819',X'02061060db7a5151967b'),
|
||||
('media_proxy','media_proxy','1','3383','3383',X'02062cc47366f7550d22'),
|
||||
('media_proxy','media_proxy','1','3947','3947',X'020647d275ec0d781fc7'),
|
||||
('media_proxy','media_proxy','1','4511','4511',X'02066402024a7ea38249'),
|
||||
('sim_proxy','sim_proxy','1','4','4',X'025531316564343731342d636635652d346333372d393331382d376136353266383732636634'),
|
||||
('sim_proxy','sim_proxy','1','9','9',X'025533346636333932642d323263372d346337382d393063372d326536323734313535613266'),
|
||||
('sim_proxy','sim_proxy','1','14','14',X'025535396662363131392d626133392d346565382d393738612d386432376366303631393633'),
|
||||
('sim_proxy','sim_proxy','1','19','19',X'025539373066366536332d646234632d346531342d383063362d336639343938643961363665'),
|
||||
('sim_proxy','sim_proxy','1','24','24',X'025561636231613335642d313336662d343362332d626365622d326566646634616265306436'),
|
||||
('sim_proxy','sim_proxy','1','29','29',X'025563316635623735392d336136342d343633342d623634632d643461656436316539656632'),
|
||||
('sim_proxy','sim_proxy','1','34','34',X'025566323230373135632d633436332d343532622d626233612d373662646662306365353537'),
|
||||
('webhook','webhook','1','17','17',X'023331313532383834313435343038373230393936'),
|
||||
('webhook','webhook','1','35','35',X'023331313939303936333434333830343631313138'),
|
||||
('webhook','webhook','1','53','53',X'023331323331383036353337373032353736313938'),
|
||||
('webhook','webhook','1','71','71',X'023331323933373836383939343238383036363536'),
|
||||
('webhook','webhook','1','89','89',X'023331333132363031353130363535353537373132'),
|
||||
('webhook','webhook','1','107','107',X'0231323937323734313733303636333133373339'),
|
||||
('webhook','webhook','1','125','125',X'0231353239313736313536333938363832313137'),
|
||||
('webhook','webhook','1','143','143',X'0231363837303238373334333232313437333434'),
|
||||
('member_cache','member_cache','4 1','73 74','48 74',X'034b3921496f4866536e67625a6762747061747a494e3a636164656e63652e6d6f65406875636b6c65746f6e3a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','2 1','86 87','57 87',X'034b2d214b5169714663546e764f6f4f424475746a7a3a636164656e63652e6d6f6540726e6c3a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','4 1','101 104','68 104',X'034b43214e446249714e704a795076664b526e4e63723a636164656e63652e6d6f6540776f756e6465645f77617272696f723a6d61747269782e6f7267'),
|
||||
('member_cache','member_cache','4 1','110 113','73 113',X'034b3b214f485844457370624d485348716c4445614f3a636164656e63652e6d6f6540717561647261646963616c3a6d61747269782e6f7267'),
|
||||
('member_cache','member_cache','5 1','171 175','111 175',X'034b3b215450616f6a5454444446444847776c7276743a636164656e63652e6d6f6540766962656973766572796f3a6d61747269782e6f7267'),
|
||||
('member_cache','member_cache','39 1','180 208','116 208',X'034b4d2154716c79516d69667847556767456d64424e3a636164656e63652e6d6f6540726f626c6b796f6772653a6372616674696e67636f6d72616465732e6e6574'),
|
||||
('member_cache','member_cache','4 1','231 231','126 231',X'034b3b2156624f77675559777146614e4c5345644e413a636164656e63652e6d6f654061666c6f7765723a73796e646963617465642e676179'),
|
||||
('member_cache','member_cache','9 1','262 263','141 263',X'034b3b21594b46454e79716667696951686956496b533a636164656e63652e6d6f654062656e6d61633a636861742e62656e6d61632e78797a'),
|
||||
('member_cache','member_cache','3 1','283 283','149 283',X'034b35215a615a4d78456f52724d6d4e49554d79446c3a636164656e63652e6d6f6540636164656e63653a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','88 1','307 351','166 351',X'034b3b2163427874565278446c5a765356684a58564b3a636164656e63652e6d6f65406a61736b617274683a736c656570696e672e746f776e'),
|
||||
('member_cache','member_cache','11 1','408 415','177 415',X'034b5121654856655270706e6c6f57587177704a6e553a636164656e63652e6d6f65406a61636b736f6e6368656e3636363a6a61636b736f6e6368656e3636362e636f6d'),
|
||||
('member_cache','member_cache','7 1','423 424','181 424',X'034b4b2165724f7079584e465a486a48724568784e583a636164656e63652e6d6f6540616d796973636f6f6c7a3a6d61747269782e6174697573616d792e636f6d'),
|
||||
('member_cache','member_cache','96 1','436 439','187 439',X'034b4b21676865544b5a7451666c444e7070684c49673a636164656e63652e6d6f6540616c65783a73706163652e67616d65727374617665726e2e6f6e6c696e65'),
|
||||
('member_cache','member_cache','96 1','436 527','187 527',X'034b3121676865544b5a7451666c444e7070684c49673a636164656e63652e6d6f654078796c6f626f6c3a616d6265722e74656c'),
|
||||
('member_cache','member_cache','10 1','546 555','197 555',X'0351312169537958674e7851634575586f587073536e3a707573737468656361742e6f726740797562697175653a6e6f70652e63686174'),
|
||||
('member_cache','member_cache','13 1','594 601','224 601',X'034b2b216c7570486a715444537a774f744d59476d493a636164656e63652e6d6f6540656c6c69753a68617368692e7265'),
|
||||
('member_cache','member_cache','2 1','614 615','229 615',X'034b2f216d584978494644676c4861734e53427371773a636164656e63652e6d6f654077696e673a666561746865722e6f6e6c'),
|
||||
('member_cache','member_cache','4 1','616 619','230 619',X'034b2f216d616767455367755a427147425a74536e723a636164656e63652e6d6f654077696e673a666561746865722e6f6e6c'),
|
||||
('member_cache','member_cache','4 1','659 660','259 660',X'034b332172454f73706e5971644f414c4149466e69563a636164656e63652e6d6f6540656c797369613a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','4 1','699 701','284 701',X'034b3521766e717a56767678534a586c5a504f5276533a636164656e63652e6d6f6540636164656e63653a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','1 1','703 703','285 703',X'034b3521767165714c474851616842464a56566779483a636164656e63652e6d6f654063696465723a6361746769726c2e636c6f7564'),
|
||||
('member_cache','member_cache','4 1','705 705','287 705',X'034b35217750454472596b77497a6f744e66706e57503a636164656e63652e6d6f6540636164656e63653a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','35 1','709 709','288 709',X'034b2d2177574f667376757356486f4e4e567242585a3a636164656e63652e6d6f654061613a6361747669626572732e6d65'),
|
||||
('member_cache','member_cache','14 1','747 749','291 749',X'034b3721776c534544496a44676c486d42474b7254703a636164656e63652e6d6f654062616461746e616d65733a62616461742e646576'),
|
||||
('member_power','member_power','1 1','0 0','0 0',X'03350f40636164656e63653a636164656e63652e6d6f652a'),
|
||||
('file','file','1','2429','2429',X'03815f68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f313039393033313838373530303033343038382f313333313336303134333238333036303833372f50584c5f32303235303132315f3230323934323137372e6a7067'),
|
||||
('file','file','1','4859','4859',X'03817568747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f313134353832313533383832323637323436362f313330323232393131303834373936373331352f53637265656e73686f745f32303234313130325f3034313332365f5265646469742e6a7067'),
|
||||
('file','file','1','7289','7289',X'03815968747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f313231393439383932363436363636323433302f313239373634363930353038353636313234362f494d475f32303234313032305f3135323230302e6a7067'),
|
||||
('file','file','1','9719','9719',X'03814168747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3135393136353731343139343735393638302f313236383537333933363531343337313635392f494d475f353433362e6a7067'),
|
||||
('file','file','1','12149','12149',X'03813b68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3236363736373539303634313233383032372f313237323430333931313939383730313630392f696d6167652e706e67'),
|
||||
('file','file','1','14579','14579',X'03816b68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3539383730363933323736303434343936392f313237373532343532343330383632373437372f45585445524e414c5f454449545f323032345f4d5f64726166745f322e646f6378'),
|
||||
('file','file','1','17009','17009',X'03815768747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3635353231363137333639363238363734362f313333333630333132383634313036303938342f323032352d30312d32375f31372e30312e31352e706e67'),
|
||||
('file','file','1','19439','19439',X'027f68747470733a2f2f63646e2e646973636f72646170702e636f6d2f656d6f6a69732f313230323936303730343936313931323836322e706e67'),
|
||||
('message_channel','message_channel','1','40764','40764',X'023331313630333434353733303030383232383735'),
|
||||
('message_channel','message_channel','1','81529','81529',X'023331313830323437393130343238393837343333'),
|
||||
('message_channel','message_channel','1','122294','122294',X'023331313938303533383732383337363131363230'),
|
||||
('message_channel','message_channel','1','163059','163059',X'023331323237373739373330333839303738303537'),
|
||||
('message_channel','message_channel','1','203824','203824',X'023331323437303438333039303031313538373137'),
|
||||
('message_channel','message_channel','1','244589','244589',X'023331323635363939353734333034303830303034'),
|
||||
('message_channel','message_channel','1','285354','285354',X'023331323835343637363238323434313732383234'),
|
||||
('message_channel','message_channel','1','326119','326119',X'023331333038373932333935313031333736353732'),
|
||||
('lottie','lottie','1','2','2',X'0231373439303534363630373639323138363331'),
|
||||
('lottie','lottie','1','5','5',X'0231373534313037353339323030363731373635'),
|
||||
('lottie','lottie','1','8','8',X'0231373936313430363338303933343433303932'),
|
||||
('lottie','lottie','1','11','11',X'0231373936313431373032363935343835353030'),
|
||||
('lottie','lottie','1','14','14',X'0231383136303837373932323931323832393434'),
|
||||
('lottie','lottie','1','17','17',X'0231383233393736313032393736323930383636'),
|
||||
('event_message','event_message','11 1','14788 14796','14356 14796',X'03336531313532303033373639343137303839303434246d44714a474b3530424a715170394273684e534d64365f3768494354776e70362d793130786d6669766563'),
|
||||
('event_message','event_message','11 1','33806 33815','32914 33815',X'033365313135373630333638373035373836363736322459526f7139484b376e55677a397668796f6e3053424a49497978497a5750734e4f6e39756f765644664d45'),
|
||||
('event_message','event_message','1 1','42546 42546','41335 42546',X'03336531313630363236383737353835363938393237245033436e4f6d6a35462d6939454e4e79586b70796f5679306b74324a654464764276326e746d33566a4355'),
|
||||
('event_message','event_message','2 1','85093 85093','81999 85093',X'0333653131383039393939363531323930343831303424496748666562784533746e623047412d534f7176594a354e4e55385735706c68523159676854636a554734'),
|
||||
('event_message','event_message','11 1','116157 116165','111525 116165',X'03336531313933363837333730363137333237363536245a32305734766c737079566e387a6e2d526a6f64694a51745f5a7851644f5f33744e415169453755356477'),
|
||||
('event_message','event_message','1 1','127640 127640','122328 127640',X'0333653132303132353637313733373633303332323624702d626f415672476a4b45327a7158664f3738387a5a597a376a42624648717431334d386464705467476f'),
|
||||
('event_message','event_message','16 1','140270 140281','134379 140281',X'03336531323039333735363534373138343830343235246c374a4f7543526b7756306d627a69356e5843496b4538416a6951374f67473455456c2d7053445a516649'),
|
||||
('event_message','event_message','11 1','162065 162071','154933 162071',X'0333653132323434383135393033313937373537373424674c77513179796e4b6d5859496b5a597a4a55627a66557a55552d714c4b5f524f454e4250325f6e44766b'),
|
||||
('event_message','event_message','1 1','170187 170187','162530 170187',X'0333653132323937373533363839343532373038333424656c6c76416a544a5847627936767249767470677a555572787231716f5a75536e50525f474b4e35455945'),
|
||||
('event_message','event_message','11 1','178736 178736','170762 178736',X'03336531323333353238303533323338333337353537242d39304668552d36455373594b6435484d7237666d6a414a5f6a576149616e356c4776384e655436564959'),
|
||||
('event_message','event_message','10 1','180317 180325','172228 180325',X'03336531323334363237303030393333383130323637246a4679416449665a4f54432d2d735971715472473735374c7a50504f34386439657963485477686d797751'),
|
||||
('event_message','event_message','1 1','212734 212734','203278 212734',X'03336531323438303131373930303633373637363734246557493950456f4d576b614b4d33416a7030782d6d455f6c4b4a6c495f6d6d44686f6379464b5170534f59'),
|
||||
('event_message','event_message','11 1','228100 228103','217856 228103',X'033365313235333734353736363733373132313336322447326a7a746e5977716a3676304a7a4168576e30725950596470667a5f496f76426771574a4876434c516b'),
|
||||
('event_message','event_message','11 1','240172 240181','229123 240181',X'033365313235393239383538323233303630313735382472635679454c5a76647453547a37366f3669434a4f614a316a756f683835535778494d546c5072517a676f'),
|
||||
('event_message','event_message','10 1','240259 240264','229132 240264',X'0333653132353933303030343035333535373235323024535849376a465f696e71424d714c4f564b347659746852644b31724747502d435a5f355a354f6b774e3751'),
|
||||
('event_message','event_message','2 1','255280 255281','243230 255281',X'03336531323636373837343338353137343234313738246e6e4e576f526a54495757723441463770625454746b7a73784c4d336b312d6d6645665031496b43586e59'),
|
||||
('event_message','event_message','1 1','297828 297828','283436 297828',X'0333653132383637303937353334363834323032313024544342465970356f39767a2d4f6b2d33654f4e433772426d354966615934476b48536e58445257474f4767'),
|
||||
('event_message','event_message','1 1','340375 340375','323489 340375',X'033365313330393336363936343530353934303030392431664536386d2d50546e786d5474345458584c35754847594139353779396c76582d50797150496d395f30'),
|
||||
('event_message','event_message','11 1','343791 343799','326730 343799',X'03336531333131353731333337393331363537323737246731767241315269725951592d3933304f6973587142372d6961686e34684e492d6462374952714176616b'),
|
||||
('event_message','event_message','10 1','363207 363216','344868 363216',X'0333653133323434393732323633393438393834393524784f78636e4749364269545941734d7a4f7557316f526e68356b675378544e30466442386a3037695f4f67'),
|
||||
('event_message','event_message','10 1','363219 363219','344871 363219',X'033365313332343439373532363733323039393732352432586f7938567937643843375a47767472657966326b4c4f4159397546386b4755364c3642435f446b6d77'),
|
||||
('event_message','event_message','10 1','363340 363343','344918 363343',X'03336531333234353037313732333634373530393830244f46645731396649534176706d34646c36367a2d5543337236432d436354506e34752d63444f7036733345'),
|
||||
('event_message','event_message','11 1','369452 369456','350712 369456',X'0333653133323736353831313733343439323336383024574d774330644574417277375f4562554a534465546532577174506d3747584347774570646c4f79326d30'),
|
||||
('event_message','event_message','10 1','372353 372356','353425 372356',X'0333653133323933313737353039313234353035373224366259364d313472667163486d5854476349716d4a4366467471796839794472375a6a487463715a6d4f34'),
|
||||
('sim_member','sim_member','225 1','0 12','0 12',X'034b4721414956694e775a64636b4652764c4f4567433a636164656e63652e6d6f65405f6f6f79655f616b6972615f6e6965723a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','2 1','319 319','14 319',X'034b43214456706f6e54524d56456570486378744c423a636164656e63652e6d6f65405f6f6f79655f656e746f6c6f6d613a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','68 1','391 440','26 440',X'034b4921457a54624a496c496d45534f746b4e644e4a3a636164656e63652e6d6f65405f6f6f79655f73617475726461797465643a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','8 1','638 639','59 639',X'034b3f21497a4f675169446e757346516977796d614c3a636164656e63652e6d6f65405f6f6f79655f636f6f6b69653a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','31 1','743 771','86 771',X'034b49214d5071594e414a62576b72474f544a7461703a636164656e63652e6d6f65405f6f6f79655f746865666f6f6c323239343a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','26 1','774 787','87 787',X'034b49214d687950614b4250506f496c7365794d6d743a636164656e63652e6d6f65405f6f6f79655f6b79757567727970686f6e3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','27 1','877 881','104 881',X'034b45215063734371724f466a48476f41424270414c3a636164656e63652e6d6f65405f6f6f79655f62696c6c795f626f623a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','16 1','956 959','117 959',X'034b43215158526f4a777a63506d5047546d454b454d3a636164656e63652e6d6f65405f6f6f79655f626f7472616334723a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','32 1','997 1012','121 1012',X'034b3f215170676c734e587a4c7751594d4c6c734f503a636164656e63652e6d6f65405f6f6f79655f6a75746f6d693a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','7 1','1274 1279','157 1279',X'034b4121554d6f6e68556765644d47585a78466658753a636164656e63652e6d6f65405f6f6f79655f6d696e696d75733a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','27 1','1415 1439','188 1439',X'034b3d21595868717249786d586e47736961796a59783a636164656e63652e6d6f65405f6f6f79655f73746161663a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','16 1','1597 1599','217 1599',X'034b512163466a4479477274466d48796d794c6652453a636164656e63652e6d6f65405f6f6f79655f626f6a61636b5f686f7273656d616e3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','27 1','1758 1761','248 1761',X'034b3d2168665a74624d656f5355564e424850736a743a636164656e63652e6d6f65405f6f6f79655f617a7572653a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','25 1','1865 1886','270 1886',X'034b3f216b4c52714b4b555158636962494d744f706c3a636164656e63652e6d6f65405f6f6f79655f7361796f72693a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','19 1','1918 1919','276 1919',X'034b3d216b68497350756c465369736d43646c596e493a636164656e63652e6d6f65405f6f6f79655f617a7572653a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','33 1','1986 2015','286 2015',X'034b3d216d5451744d736a534c4f646c576f7265594d3a636164656e63652e6d6f65405f6f6f79655f73746161663a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','37 1','2027 2028','289 2028',X'034b4d216d616767455367755a427147425a74536e723a636164656e63652e6d6f65405f6f6f79655f2e7265616c2e706572736f6e2e3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','28 1','2117 2130','297 2130',X'034b3f216e4e595a794b6f4e70797859417a50466f733a636164656e63652e6d6f65405f6f6f79655f6a75746f6d693a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','20 1','2230 2239','310 2239',X'034b41217046504c7270594879487a784e4c69594b413a636164656e63652e6d6f65405f6f6f79655f686578676f61743a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','30 1','2381 2398','332 2398',X'034b3b21717a44626c4b6c69444c577a52524f6e465a3a636164656e63652e6d6f65405f6f6f79655f6d6e696b3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','38 1','2490 2518','344 2518',X'034b3d2173445250714549546e4f4e57474176496b423a636164656e63652e6d6f65405f6f6f79655f727974686d3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','11 1','2555 2559','358 2559',X'034b4321746751436d526b426e6474516362687150583a636164656e63652e6d6f65405f6f6f79655f6a6f7365707065793a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','47 1','2633 2666','377 2666',X'034b4b217750454472596b77497a6f744e66706e57503a636164656e63652e6d6f65405f6f6f79655f6e61706f6c656f6e333038393a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','52 1','2817 2837','414 2837',X'034b43217a66654e574d744b4f764f48766f727979563a636164656e63652e6d6f65405f6f6f79655f696e736f676e69613a636164656e63652e6d6f65'),
|
||||
('guild_space','guild_space','1','3','3',X'0231313132373630363639313738323431303234'),
|
||||
('guild_space','guild_space','1','7','7',X'023331313534383638343234373234343633363837'),
|
||||
('guild_space','guild_space','1','11','11',X'023331323139303338323637383430393235383138'),
|
||||
('guild_space','guild_space','1','15','15',X'023331323839353939363232353930383930313335'),
|
||||
('guild_space','guild_space','1','19','19',X'0231323733383737363437323234393935383431'),
|
||||
('guild_space','guild_space','1','23','23',X'0231353239313736313536333938363832313135'),
|
||||
('guild_space','guild_space','1','27','27',X'0231373535303134333534373334313533383138'),
|
||||
('guild_space','guild_space','1','31','31',X'0231393933383838313432343535323130303834'),
|
||||
('guild_active','guild_active','1','3','3',X'0231313132373630363639313738323431303234'),
|
||||
('guild_active','guild_active','1','7','7',X'023331313534383638343234373234343633363837'),
|
||||
('guild_active','guild_active','1','11','11',X'023331323139303338323637383430393235383138'),
|
||||
('guild_active','guild_active','1','15','15',X'023331323839353939363232353930383930313335'),
|
||||
('guild_active','guild_active','1','19','19',X'023331333333323139363936393333323038303934'),
|
||||
('guild_active','guild_active','1','23','23',X'0231343735353939303338353336373434393630'),
|
||||
('guild_active','guild_active','1','27','27',X'022f3636313932393535373737343836383438'),
|
||||
('guild_active','guild_active','1','31','31',X'0231383737303635303431393930353136373637'),
|
||||
('emoji','emoji','1','284','284',X'023331313132323031303430303637303339333332'),
|
||||
('emoji','emoji','1','569','569',X'023331323334393032303131393436383630363638'),
|
||||
('emoji','emoji','1','854','854',X'0231323735313734373438353034313935303732'),
|
||||
('emoji','emoji','1','1139','1139',X'0231333837343730383630303134393737303235'),
|
||||
('emoji','emoji','1','1424','1424',X'0231353435363639393734303130383838313932'),
|
||||
('emoji','emoji','1','1709','1709',X'0231363339313034333030393139393437323634'),
|
||||
('emoji','emoji','1','1994','1994',X'0231373532363932363230303638373832313231'),
|
||||
('emoji','emoji','1','2279','2279',X'0231383935343737353331303434363138323430'),
|
||||
('auto_emoji','auto_emoji','1','0','0',X'02114c31'),
|
||||
('auto_emoji','auto_emoji','1','1','1',X'02114c32'),
|
||||
('auto_emoji','auto_emoji','1','2','2',X'020f5f');
|
||||
|
||||
ANALYZE sqlite_schema;
|
||||
|
||||
COMMIT;
|
||||
62
src/db/migrations/0026-make-rooms-historical.sql
Normal file
62
src/db/migrations/0026-make-rooms-historical.sql
Normal file
@@ -0,0 +1,62 @@
|
||||
PRAGMA foreign_keys=OFF;
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
-- *** historical_channel_room ***
|
||||
|
||||
CREATE TABLE "historical_channel_room" (
|
||||
"historical_room_index" INTEGER NOT NULL,
|
||||
"reference_channel_id" TEXT NOT NULL,
|
||||
"room_id" TEXT NOT NULL UNIQUE,
|
||||
PRIMARY KEY("historical_room_index" AUTOINCREMENT),
|
||||
FOREIGN KEY("reference_channel_id") REFERENCES "channel_room"("channel_id") ON DELETE CASCADE
|
||||
);
|
||||
|
||||
INSERT INTO historical_channel_room (reference_channel_id, room_id) SELECT channel_id, room_id FROM channel_room;
|
||||
|
||||
-- *** message_channel -> message_room ***
|
||||
|
||||
CREATE TABLE "message_room" (
|
||||
"message_id" TEXT NOT NULL,
|
||||
"historical_room_index" INTEGER NOT NULL,
|
||||
PRIMARY KEY("message_id"),
|
||||
FOREIGN KEY("historical_room_index") REFERENCES "historical_channel_room"("historical_room_index") ON DELETE CASCADE
|
||||
) WITHOUT ROWID;
|
||||
INSERT INTO message_room (message_id, historical_room_index) SELECT message_id, max(historical_room_index) as historical_room_index FROM message_channel INNER JOIN historical_channel_room ON historical_channel_room.reference_channel_id = message_channel.channel_id GROUP BY message_id;
|
||||
|
||||
-- *** event_message ***
|
||||
|
||||
CREATE TABLE "new_event_message" (
|
||||
"event_id" TEXT NOT NULL,
|
||||
"event_type" TEXT,
|
||||
"event_subtype" TEXT,
|
||||
"message_id" TEXT NOT NULL,
|
||||
"part" INTEGER NOT NULL,
|
||||
"reaction_part" INTEGER NOT NULL,
|
||||
"source" INTEGER NOT NULL,
|
||||
PRIMARY KEY("message_id","event_id"),
|
||||
FOREIGN KEY("message_id") REFERENCES "message_room"("message_id") ON DELETE CASCADE
|
||||
) WITHOUT ROWID;
|
||||
INSERT INTO new_event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) SELECT event_id, event_type, event_subtype, message_id, part, reaction_part, source from event_message;
|
||||
DROP TABLE event_message;
|
||||
ALTER TABLE new_event_message RENAME TO event_message;
|
||||
|
||||
-- *** reaction ***
|
||||
|
||||
CREATE TABLE "new_reaction" (
|
||||
"hashed_event_id" INTEGER NOT NULL,
|
||||
"message_id" TEXT NOT NULL,
|
||||
"encoded_emoji" TEXT NOT NULL, original_encoding TEXT,
|
||||
PRIMARY KEY("hashed_event_id"),
|
||||
FOREIGN KEY("message_id") REFERENCES "message_room"("message_id") ON DELETE CASCADE
|
||||
) WITHOUT ROWID;
|
||||
INSERT INTO new_reaction (hashed_event_id, message_id, encoded_emoji) SELECT hashed_event_id, message_id, encoded_emoji FROM reaction;
|
||||
DROP TABLE reaction;
|
||||
ALTER TABLE new_reaction RENAME TO reaction;
|
||||
|
||||
-- ***
|
||||
|
||||
DROP TABLE message_channel;
|
||||
PRAGMA foreign_key_check;
|
||||
|
||||
COMMIT;
|
||||
PRAGMA foreign_keys=ON;
|
||||
256
src/db/migrations/0027-analyze.sql
Normal file
256
src/db/migrations/0027-analyze.sql
Normal file
@@ -0,0 +1,256 @@
|
||||
-- https://www.sqlite.org/lang_analyze.html
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
ANALYZE sqlite_schema;
|
||||
|
||||
DELETE FROM "sqlite_stat1";
|
||||
INSERT INTO "sqlite_stat1" ("tbl","idx","stat") VALUES ('reaction','reaction','4706 1'),
|
||||
('event_message','event_message','535744 1 1'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','996 1'),
|
||||
('message_room','message_room','508753 1'),
|
||||
('invite','invite','3 2 1'),
|
||||
('auto_emoji','auto_emoji','2 1'),
|
||||
('sim','sim','1072 1'),
|
||||
('webhook','webhook','205 1'),
|
||||
('channel_room','channel_room','996 1'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','996 1'),
|
||||
('guild_active','guild_active','45 1'),
|
||||
('media_proxy','media_proxy','19581 1'),
|
||||
('sim_member','sim_member','5501 6 1'),
|
||||
('emoji','emoji','3470 1'),
|
||||
('guild_space','guild_space','42 1'),
|
||||
('member_power','member_power','1 1 1'),
|
||||
('sim_proxy','sim_proxy','213 1'),
|
||||
('migration',NULL,'1'),
|
||||
('member_cache','member_cache','1099 3 1'),
|
||||
('direct','direct','1 1'),
|
||||
('file','file','36309 1'),
|
||||
('lottie','lottie','22 1');
|
||||
|
||||
DELETE FROM "sqlite_stat4";
|
||||
INSERT INTO "sqlite_stat4" ("tbl","idx","neq","nlt","ndlt","sample") VALUES ('reaction','reaction','1','522','522',X'02069c21bd28f26ae025'),
|
||||
('reaction','reaction','1','1045','1045',X'0206b8b64d2a67851518'),
|
||||
('reaction','reaction','1','1568','1568',X'0206d45580ee5b75848e'),
|
||||
('reaction','reaction','1','2091','2091',X'0206f103da3779e1cf70'),
|
||||
('reaction','reaction','1','2614','2614',X'02061028b6f24ae55f1a'),
|
||||
('reaction','reaction','1','3137','3137',X'02062bd1ffb636826ad6'),
|
||||
('reaction','reaction','1','3660','3660',X'020647c632b246bf22ae'),
|
||||
('reaction','reaction','1','4183','4183',X'020664ebb265471ad34e'),
|
||||
('event_message','event_message','11 1','14790 14800','14356 14800',X'033365313135323030333736393431373038393034342471375f4b666676763631582d30794639334b7532776459377a56553068745a744c2d705272367142473851'),
|
||||
('event_message','event_message','11 1','33809 33817','32914 33817',X'03336531313537363033363837303537383636373632245646504363595144413134586c664d4f5041786c58596b4432595a503562656d6f63336b39787735596141'),
|
||||
('event_message','event_message','1 1','59527 59527','57719 59527',X'03336531313636383130343235323637303737323031244e343074365465464f3841585255766a353568312d31345f3533476c686b586a43364b6142534442647677'),
|
||||
('event_message','event_message','10 1','104218 104225','100236 104225',X'03336531313838373238363331323637313736343538246c6f35326a6332723637734b4b5f4b767a4361702d62627573506d423931454f76776f5f614a6a5a6e6f4d'),
|
||||
('event_message','event_message','11 1','116172 116174','111525 116174',X'03336531313933363837333730363137333237363536244546764673764c6c62316a446a4f616b4838584f68636d556161316f6d7651494143374575723146686567'),
|
||||
('event_message','event_message','10 1','116223 116230','111530 116230',X'03336531313933363837363335343238393231343636246a7243703367546f676a4930525a315561655931577978724d67737874704431494b3769454d6972754e73'),
|
||||
('event_message','event_message','1 1','119055 119055','114207 119055',X'0333653131393530353035383636333130363537353124335561353079304c7044386248725f7142574f44306d6569794f37524a4c746238755755725a716c665477'),
|
||||
('event_message','event_message','16 1','140286 140286','134379 140286',X'033365313230393337353635343731383438303432352430347938482d444f49634270597873576b31756d417a4e424e3061774634487457636e3177426476755255'),
|
||||
('event_message','event_message','11 1','162080 162090','154932 162090',X'0333653132323434383135393033313937373537373424784753744170626668647074526f4a755a2d4d416c557446424e524939344f7661506e4a55694952366138'),
|
||||
('event_message','event_message','1 1','178583 178583','170598 178583',X'033365313233333436343838383836393931363736352444643279534c3857704f666268576b626d684758716c49746f6e7237384b6656456956334b664a43702d38'),
|
||||
('event_message','event_message','11 1','178659 178662','170672 178662',X'03336531323333353238303533323338333337353537244e482d334a42617864424f53724c3259766b715534696c6e54724d485f57454973524b556c684b744f4977'),
|
||||
('event_message','event_message','11 1','215266 215274','205302 215274',X'03336531323533373435373636373337313231333632246a4b63784e434f784b627558315746346e59696538783472753559724a2d756c38455756715731796a4349'),
|
||||
('event_message','event_message','11 1','224498 224504','213831 224504',X'03336531323539323938353832323330363031373538246646483237794b4f75554a5943723671762d676b324b6f636f784663574b766c654b3167636d6445377177'),
|
||||
('event_message','event_message','10 1','224585 224593','213840 224593',X'03336531323539333030303430353335353732353230247164484754527353717138524376756735435349457a6d73717633396c4335746e334942487a4b6366646b'),
|
||||
('event_message','event_message','1 1','238111 238111','226382 238111',X'0333653132363833333233363330323132383735333724766f6261774b476a5742357770795970364c4a3931615136524a6b7330597a7a717a6e715953344d325467'),
|
||||
('event_message','event_message','1 1','297639 297639','282242 297639',X'0333653133303634313236363735393832373837333624502d47394f59667430735143334d6a475a532d445242376a586b4e62366147734c6a6b39544c7561434763'),
|
||||
('event_message','event_message','11 1','304605 304606','288785 304606',X'03336531333131353731333337393331363537323737243031717a505a477a35764a475276464f716533653570513930705a6a43644c326a33485635415571504559'),
|
||||
('event_message','event_message','10 1','322247 322256','305183 322256',X'03336531333234353034393632373530383737373937247a58477647646d614b6f6e4a497232767246354c523235796e4e4b476b5a357a774a696a44645433694f49'),
|
||||
('event_message','event_message','11 1','327028 327032','309699 327032',X'0333653133323736353831313733343439323336383024574d774330644574417277375f4562554a534465546532577174506d3747584347774570646c4f79326d30'),
|
||||
('event_message','event_message','1 1','357167 357167','338131 357167',X'033365313334353735363437313239393933363237362436755847477632536e727a63346353616e3937686a6562356a6a77516d6d4c66464f4c305f74316d627130'),
|
||||
('event_message','event_message','10 1','365779 365781','346205 365781',X'03336531333439393933323736353839323135373835244f484162596f6b67435748704a36556a6e74545f74774452484743624e52656e617a5a3658776f464a4e55'),
|
||||
('event_message','event_message','1 1','416695 416695','394011 416695',X'0333653133363737343039323037343035383134363624486e346e6d784571634758767153577a7343656a586733696c517930554869705f34547073504e71684f55'),
|
||||
('event_message','event_message','11 1','422263 422266','399248 422266',X'0333653133363938333439303532363130343738313824436a34597373765a46544877415a5236724c77472d635250716c426b7a3749626d473261766653562d4e55'),
|
||||
('event_message','event_message','1 1','476223 476223','449789 476223',X'033365313430313837343437373832313732363834312455414d51397a6c2d775a39572d327231687866584162746f447143314734646239554b384573596e657359'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','8 8','8 8',X'034b022141534d746248706d6f4b4e736765574274733a636164656e63652e6d6f65025d'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','18 18','18 18',X'034b02214173786a53777176484e444f4665587a676b3a636164656e63652e6d6f65014c'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','94 94','94 94',X'034b0221464d5346425a536d59596964656f4a58594b3a636164656e63652e6d6f65017e'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','100 100','100 100',X'034b0221466875676b616e45716943627448734644483a636164656e63652e6d6f6502d2'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','103 103','103 103',X'034b0221466a7167556258447a474a75796a464746613a636164656e63652e6d6f6503c6'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','110 110','110 110',X'034b0221474650514f614e7a517465534c4b485374543a636164656e63652e6d6f65013e'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','221 221','221 221',X'034b02214c506d4c664f6b796d63646d725644624a463a636164656e63652e6d6f6501ee'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','311 311','311 311',X'034b02215157735a4a7042716c716548686c616962443a636164656e63652e6d6f65029a'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','332 332','332 332',X'034b022152547356547675424f4555506d52687347633a636164656e63652e6d6f650255'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','408 408','408 408',X'034b022155635059696f48454f426761664f576b694f3a636164656e63652e6d6f6502ea'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','443 443','443 443',X'034b01215754625a53764a66524a72736348574b78563a636164656e63652e6d6f6529'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','450 450','450 450',X'034b022157695842616d5676586279476565657a50413a636164656e63652e6d6f650157'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','468 468','468 468',X'034b022158717470725744744f5761667a72486f477a3a636164656e63652e6d6f65018b'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','526 526','526 526',X'034b022162574b794f596c6468484b7a784b757667623a636164656e63652e6d6f650127'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','554 554','554 554',X'034b0221637779454c6c6b55714a565942646a4250543a636164656e63652e6d6f6501b0'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','597 597','597 597',X'034b02216668587668437279724e525661777572636f3a636164656e63652e6d6f6503bd'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','608 608','608 608',X'034b022167636d734472716442706f7463586b4545703a636164656e63652e6d6f6501d5'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','665 665','665 665',X'034b02216a6c4e64496a62687654486b5a74745166773a636164656e63652e6d6f650131'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','708 708','708 708',X'034b01216d454c5846716a426958726d7558796943723a636164656e63652e6d6f656b'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','768 768','768 768',X'034b02216f7a6f494e55494261685177775a6f586b7a3a636164656e63652e6d6f6501d8'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','776 776','776 776',X'034b022170506f63657a415046506f584c6a6a5750443a636164656e63652e6d6f6503aa'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','877 877','877 877',X'034b02217474644e4b6b4b4f49757879566869794b6a3a636164656e63652e6d6f6502e1'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','887 887','887 887',X'034b02217568496f63597a4e41714244694b5645506d3a636164656e63652e6d6f650080'),
|
||||
('historical_channel_room','sqlite_autoindex_historical_channel_room_1','1 1','943 943','943 943',X'034b02217863655a4641624250425a6d7842677a51523a636164656e63652e6d6f65036b'),
|
||||
('message_room','message_room','1','56528','56528',X'023331313635393437353536363733363334333635'),
|
||||
('message_room','message_room','1','113057','113057',X'023331313932353536323035343730363538363132'),
|
||||
('message_room','message_room','1','169586','169586',X'023331323331373432353832313033373430343937'),
|
||||
('message_room','message_room','1','226115','226115',X'023331323635333430353738363135333934333034'),
|
||||
('message_room','message_room','1','282644','282644',X'023331333033373933303435323632353635343637'),
|
||||
('message_room','message_room','1','339173','339173',X'023331333434343332333234333137363735363733'),
|
||||
('message_room','message_room','1','395702','395702',X'023331333637303635303537373939393636383631'),
|
||||
('message_room','message_room','1','452231','452231',X'023331343030353931393936323333373131373238'),
|
||||
('invite','invite','1 1','0 0','0 0',X'033549406d616c6b696572693a6d61747269782e6f7267216877535462776967674c584a6f6756506b763a6d61747269782e6f7267'),
|
||||
('invite','invite','2 1','1 1','1 1',X'03334b406d65636879613a636164656e63652e6d6f652172486b466c6d724e6e664157455943494a703a636164656e63652e6d6f65'),
|
||||
('invite','invite','2 1','1 2','1 2',X'03334b406d65636879613a636164656e63652e6d6f65217549514e424f4f68735976514c645368726b3a636164656e63652e6d6f65'),
|
||||
('auto_emoji','auto_emoji','1','0','0',X'02114c31'),
|
||||
('auto_emoji','auto_emoji','1','1','1',X'02114c32'),
|
||||
('sim','sim','1','119','119',X'025531316564343731342d636635652d346333372d393331382d376136353266383732636634'),
|
||||
('sim','sim','1','239','239',X'0231313530373435393839383336333038343830'),
|
||||
('sim','sim','1','359','359',X'0231323235393737393435323133313038323234'),
|
||||
('sim','sim','1','479','479',X'0231333038323937303732373738343132303332'),
|
||||
('sim','sim','1','599','599',X'0231343135373135363735313031373234363735'),
|
||||
('sim','sim','1','719','719',X'0231353732363938363739363138353638313933'),
|
||||
('sim','sim','1','839','839',X'0231373332373338333838303431343030343231'),
|
||||
('sim','sim','1','959','959',X'0231393437373336313831393732353636303636'),
|
||||
('webhook','webhook','1','22','22',X'023331313630383933333337303239353836393536'),
|
||||
('webhook','webhook','1','45','45',X'023331323139343938393236343636363632343330'),
|
||||
('webhook','webhook','1','68','68',X'023331323432383939363632343734373131303630'),
|
||||
('webhook','webhook','1','91','91',X'023331323937323836383730393534323833313533'),
|
||||
('webhook','webhook','1','114','114',X'023331333430353438363133363931393332373133'),
|
||||
('webhook','webhook','1','137','137',X'023331343034313334383236303530383436393331'),
|
||||
('webhook','webhook','1','160','160',X'0231333639373535303430343638303431373238'),
|
||||
('webhook','webhook','1','183','183',X'0231363035353930343336333230333738383930'),
|
||||
('channel_room','channel_room','1','110','110',X'023331313939353030313137393834363733393133'),
|
||||
('channel_room','channel_room','1','221','221',X'023331323734313935333432323131393430353434'),
|
||||
('channel_room','channel_room','1','332','332',X'023331333437303939353439343430363735383732'),
|
||||
('channel_room','channel_room','1','443','443',X'023331343035323432323838343138303632333636'),
|
||||
('channel_room','channel_room','1','554','554',X'023331343036373736363630393936333935323830'),
|
||||
('channel_room','channel_room','1','665','665',X'023331343039363536363537383835323635393830'),
|
||||
('channel_room','channel_room','1','776','776',X'023331343139353132333134363234383638343632'),
|
||||
('channel_room','channel_room','1','887','887',X'0231333735373135343638383937353530333631'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','8 8','8 8',X'034b332141534d746248706d6f4b4e736765574274733a636164656e63652e6d6f6531343037333239313938393039303330353135'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','18 18','18 18',X'034b33214173786a53777176484e444f4665587a676b3a636164656e63652e6d6f6531333437303036333637393639343433383430'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','94 94','94 94',X'034b3321464d5346425a536d59596964656f4a58594b3a636164656e63652e6d6f6531343034313333323339303736393530313631'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','100 100','100 100',X'034b3321466875676b616e45716943627448734644483a636164656e63652e6d6f6531343132383936323333373839353837353036'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','103 103','103 103',X'034b3121466a7167556258447a474a75796a464746613a636164656e63652e6d6f65383034363236313139333938393136313037'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','110 110','110 110',X'034b3321474650514f614e7a517465534c4b485374543a636164656e63652e6d6f6531333435363431343537323035323532313737'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','221 221','221 221',X'034b33214c506d4c664f6b796d63646d725644624a463a636164656e63652e6d6f6531343035393733313637323535353834383830'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','311 311','311 311',X'034b33215157735a4a7042716c716548686c616962443a636164656e63652e6d6f6531343039363536363537383835323635393830'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','332 332','332 332',X'034b332152547356547675424f4555506d52687347633a636164656e63652e6d6f6531343037323235393932313935333432343237'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','408 408','408 408',X'034b332155635059696f48454f426761664f576b694f3a636164656e63652e6d6f6531343134303334313437323032303434303134'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','443 443','443 443',X'034b33215754625a53764a66524a72736348574b78563a636164656e63652e6d6f6531313433313231353134393235393238353431'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','450 450','450 450',X'034b332157695842616d5676586279476565657a50413a636164656e63652e6d6f6531333536353037353335313132323738303839'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','468 468','468 468',X'034b332158717470725744744f5761667a72486f477a3a636164656e63652e6d6f6531343034353137353530393634303830363530'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','526 526','526 526',X'034b332162574b794f596c6468484b7a784b757667623a636164656e63652e6d6f6531333239353237383038343232333138313030'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','554 554','554 554',X'034b3321637779454c6c6b55714a565942646a4250543a636164656e63652e6d6f6531343034393538363332363830303939393931'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','597 597','597 597',X'034b31216668587668437279724e525661777572636f3a636164656e63652e6d6f65373535373235353231333731303034393739'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','608 608','608 608',X'034b332167636d734472716442706f7463586b4545703a636164656e63652e6d6f6531343035353833303939383532363139393137'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','665 665','665 665',X'034b33216a6c4e64496a62687654486b5a74745166773a636164656e63652e6d6f6531333339343132353232373538393633323030'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','708 708','708 708',X'034b33216d454c5846716a426958726d7558796943723a636164656e63652e6d6f6531313936393134373631303430393234373432'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','768 768','768 768',X'034b33216f7a6f494e55494261685177775a6f586b7a3a636164656e63652e6d6f6531343035363036393133303638313039383735'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','776 776','776 776',X'034b312170506f63657a415046506f584c6a6a5750443a636164656e63652e6d6f65363832333334343939393136333439353231'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','877 877','877 877',X'034b33217474644e4b6b4b4f49757879566869794b6a3a636164656e63652e6d6f6531343133323134313538383631373632363430'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','887 887','887 887',X'034b33217568496f63597a4e41714244694b5645506d3a636164656e63652e6d6f6531323137383839303233393831323536373534'),
|
||||
('channel_room','sqlite_autoindex_channel_room_1','1 1','943 943','943 943',X'034b31217863655a4641624250425a6d7842677a51523a636164656e63652e6d6f65323937323734343934303737333730333638'),
|
||||
('guild_active','guild_active','1','5','5',X'023331313433333336323438373631363437313534'),
|
||||
('guild_active','guild_active','1','11','11',X'023331313630383933333336333234393331353834'),
|
||||
('guild_active','guild_active','1','17','17',X'023331323839353936343835343631323137333430'),
|
||||
('guild_active','guild_active','1','23','23',X'023331333338363530383035363233393834333030'),
|
||||
('guild_active','guild_active','1','29','29',X'023331343338363132393630393137353836313233'),
|
||||
('guild_active','guild_active','1','35','35',X'0231343937313539373236343535343535373534'),
|
||||
('guild_active','guild_active','1','41','41',X'0231383730313138363530373638363730373530'),
|
||||
('media_proxy','media_proxy','1','2175','2175',X'02069ccd283fa260cb90'),
|
||||
('media_proxy','media_proxy','1','4351','4351',X'0206b95c95635f40b3d8'),
|
||||
('media_proxy','media_proxy','1','6527','6527',X'0206d546a2d00310b6cc'),
|
||||
('media_proxy','media_proxy','1','8703','8703',X'0206f0b1fb70331afcb3'),
|
||||
('media_proxy','media_proxy','1','10879','10879',X'02060e48cd55947d2372'),
|
||||
('media_proxy','media_proxy','1','13055','13055',X'02062ac70844c1762329'),
|
||||
('media_proxy','media_proxy','1','15231','15231',X'0206470a46ab937760c8'),
|
||||
('media_proxy','media_proxy','1','17407','17407',X'0206632a367225280573'),
|
||||
('sim_member','sim_member','225 1','14 104','4 104',X'034b4521414956694e775a64636b4652764c4f4567433a636164656e63652e6d6f65405f6f6f79655f6a6a6a6a6a363634343a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','124 1','598 611','85 611',X'034b4921457a54624a496c496d45534f746b4e644e4a3a636164656e63652e6d6f65405f6f6f79655f61726a756e3034323236393a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','35 1','817 845','107 845',X'034b532147486e4d476978756867527255546d4b77683a636164656e63652e6d6f65405f6f6f79655f6e65637461726f66616d62726f7369613a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','63 1','943 948','140 948',X'034b452148725979716b6f7942485a4a4e634455564f3a636164656e63652e6d6f65405f6f6f79655f5f706b5f64717a76613a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','48 1','1022 1037','148 1037',X'034b47214943566475566c646e6774484b64567070503a636164656e63652e6d6f65405f6f6f79655f5f706b5f7078677679783a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','39 1','1203 1223','174 1223',X'034b45214a48614a714258706d6b49654963615562513a636164656e63652e6d6f65405f6f6f79655f6d69647473756d61723a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','48 1','1736 1781','289 1781',X'034b472150747969527851614879636777626c636f743a636164656e63652e6d6f65405f6f6f79655f76616e746164656c69613a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','5 1','1834 1835','299 1835',X'034b472151544372636e695373616f626957444c516f3a636164656e63652e6d6f65405f6f6f79655f68756d616e67616d65723a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','64 1','2099 2137','353 2137',X'034b4721536c7664497a734f6f534469434e6a6e77733a636164656e63652e6d6f65405f6f6f79655f5f706b5f777768667a6f3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','81 1','2215 2276','361 2276',X'034b4321544f61794476734c735a566d5779745166483a636164656e63652e6d6f65405f6f6f79655f6171756173316d703a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','42 1','2370 2389','373 2389',X'034b47215468436b4b5857434a77657451496d747a573a636164656e63652e6d6f65405f6f6f79655f5f706b5f7465736361723a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','36 1','2424 2447','380 2447',X'034b472154716c79516d69667847556767456d64424e3a636164656e63652e6d6f65405f6f6f79655f657665727970697a7a613a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','65 1','2691 2723','438 2723',X'034b472157755a5549494e7457456a64656658414c473a636164656e63652e6d6f65405f6f6f79655f5f706b5f77797a63686a3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','2 1','3059 3059','497 3059',X'034b3f21616f764c6d776a674d6c44414c6e666c426e3a636164656e63652e6d6f65405f6f6f79655f6f6363696d793a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','32 1','3127 3147','520 3147',X'034b392163427874565278446c5a765356684a58564b3a636164656e63652e6d6f65405f6f6f79655f626f743a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','8 1','3666 3671','630 3671',X'034b39216966636d75794e6e544861464163636575543a636164656e63652e6d6f65405f6f6f79655f726e6c3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','43 1','3849 3855','668 3855',X'034b47216b6b4b714249664c45596a4b534b626b4a633a636164656e63652e6d6f65405f6f6f79655f5f706b5f6f77617a76663a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','8 1','4280 4283','746 4283',X'034b3f216f705748554e6b46646247796b7579564b6a3a636164656e63652e6d6f65405f6f6f79655f636f6f6b69653a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','158 1','4424 4526','770 4526',X'034b472170757146464b59487750677073554e6d6e443a636164656e63652e6d6f65405f6f6f79655f5f706b5f77797a63686a3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','44 1','4807 4843','824 4843',X'034b4521734b4c6f784a4e62547a6c72436d4a796f533a636164656e63652e6d6f65405f6f6f79655f7370696e6e657265743a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','11 1','4889 4895','841 4895',X'034b45217443744769524448676e4a62505a4f5479573a636164656e63652e6d6f65405f6f6f79655f6a656d74616e756b693a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','73 1','5069 5107','888 5107',X'034b4721766576446275617472435946704e71426d583a636164656e63652e6d6f65405f6f6f79655f5f706b5f75616e6766633a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','59 1','5179 5207','903 5207',X'034b5f217750454472596b77497a6f744e66706e57503a636164656e63652e6d6f65405f6f6f79655f66756a69776172615f6e6f5f6d6f6b6f755f66756d6f3a636164656e63652e6d6f65'),
|
||||
('sim_member','sim_member','52 1','5438 5453','968 5453',X'034b41217a66654e574d744b4f764f48766f727979563a636164656e63652e6d6f65405f6f6f79655f666f67656c38323a636164656e63652e6d6f65'),
|
||||
('emoji','emoji','1','385','385',X'023331313035373039393137313237353737363733'),
|
||||
('emoji','emoji','1','771','771',X'023331323230353735323436303531303533353638'),
|
||||
('emoji','emoji','1','1157','1157',X'023331333530383339313335363836313033303730'),
|
||||
('emoji','emoji','1','1543','1543',X'0231333530373039313634383434323533313934'),
|
||||
('emoji','emoji','1','1929','1929',X'0231343934393031383434343036303432363337'),
|
||||
('emoji','emoji','1','2315','2315',X'0231363432383535303135363835323932303438'),
|
||||
('emoji','emoji','1','2701','2701',X'0231373738353731303433363339333934333134'),
|
||||
('emoji','emoji','1','3087','3087',X'0231393031313133373739343135333134343332'),
|
||||
('guild_space','guild_space','1','4','4',X'023331313333333135333632353636343535333336'),
|
||||
('guild_space','guild_space','1','9','9',X'023331313534383638343234373234343633363837'),
|
||||
('guild_space','guild_space','1','14','14',X'023331323139303338323637383430393235383138'),
|
||||
('guild_space','guild_space','1','19','19',X'023331323839363030383537323437303535383733'),
|
||||
('guild_space','guild_space','1','24','24',X'023331333536353037353335313132323738303836'),
|
||||
('guild_space','guild_space','1','29','29',X'0231323937323732313833373136303532393933'),
|
||||
('guild_space','guild_space','1','34','34',X'0231363437393532363337373630363334383831'),
|
||||
('guild_space','guild_space','1','39','39',X'0231383737303635303431393930353136373637'),
|
||||
('member_power','member_power','1 1','0 0','0 0',X'03350f40636164656e63653a636164656e63652e6d6f652a'),
|
||||
('sim_proxy','sim_proxy','1','23','23',X'025531363733363165392d656137652d343530392d623533302d356531613863613735336237'),
|
||||
('sim_proxy','sim_proxy','1','47','47',X'025532653561626332312d326332622d346133352d386237642d366432383162363036653932'),
|
||||
('sim_proxy','sim_proxy','1','71','71',X'025534383131393165322d393462302d346534632d623934352d336330323932623135356238'),
|
||||
('sim_proxy','sim_proxy','1','95','95',X'025536346331346631642d663834342d346535622d386665332d336162336163363239616230'),
|
||||
('sim_proxy','sim_proxy','1','119','119',X'025538376562363463322d363763352d346432352d383161642d666664333235663266303639'),
|
||||
('sim_proxy','sim_proxy','1','143','143',X'025561616630313539652d623165312d343231342d396266652d313334613536303738323231'),
|
||||
('sim_proxy','sim_proxy','1','167','167',X'025563396534393633372d663061352d343566352d383234382d366436393565643861316434'),
|
||||
('sim_proxy','sim_proxy','1','191','191',X'025565333734613634362d386231332d343365392d393635392d653233326366653866626265'),
|
||||
('member_cache','member_cache','1 1','122 122','82 122',X'034b2d214d5071594e414a62576b72474f544a7461703a636164656e63652e6d6f6540726e6c3a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','5 1','126 130','85 130',X'034b43214e446249714e704a795076664b526e4e63723a636164656e63652e6d6f6540776f756e6465645f77617272696f723a6d61747269782e6f7267'),
|
||||
('member_cache','member_cache','4 1','136 137','90 137',X'034b3d214f485844457370624d485348716c4445614f3a636164656e63652e6d6f6540616d693a7468652d61706f746865636172792e636c7562'),
|
||||
('member_cache','member_cache','5 1','204 206','135 206',X'034b51215450616f6a5454444446444847776c7276743a636164656e63652e6d6f65406a61636b736f6e6368656e3636363a6a61636b736f6e6368656e3636362e636f6d'),
|
||||
('member_cache','member_cache','76 1','213 245','140 245',X'034b412154716c79516d69667847556767456d64424e3a636164656e63652e6d6f65406869726f616e7461676f6e6973743a6d61747269782e6f7267'),
|
||||
('member_cache','member_cache','4 1','301 303','150 303',X'034b352156624f77675559777146614e4c5345644e413a636164656e63652e6d6f6540636164656e63653a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','4 1','338 340','170 340',X'034b3321586f4c466b65786a45466c57447959544d453a636164656e63652e6d6f65406d65636879613a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','10 1','344 344','173 344',X'034b3d21594b46454e79716667696951686956496b533a636164656e63652e6d6f6540616d693a7468652d61706f746865636172792e636c7562'),
|
||||
('member_cache','member_cache','2 1','368 368','183 368',X'034b35215a51714f4757704f52676e544f7254474f583a636164656e63652e6d6f6540636164656e63653a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','152 1','396 491','203 491',X'034b412163427874565278446c5a765356684a58564b3a636164656e63652e6d6f65406d61727368616d616c6c6f773a616c74686165612e7a6f6e65'),
|
||||
('member_cache','member_cache','4 1','553 555','207 555',X'034b33216356514d45455158494d5047554b43467a763a636164656e63652e6d6f65406d65636879613a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','8 1','571 576','219 576',X'034b2b21654856655270706e6c6f57587177704a6e553a636164656e63652e6d6f6540656c6c69753a68617368692e7265'),
|
||||
('member_cache','member_cache','7 1','583 584','223 584',X'034b4b2165724f7079584e465a486a48724568784e583a636164656e63652e6d6f6540616d796973636f6f6c7a3a6d61747269782e6174697573616d792e636f6d'),
|
||||
('member_cache','member_cache','165 1','599 614','230 614',X'034b3321676865544b5a7451666c444e7070684c49673a636164656e63652e6d6f65406172636f6e79783a6d61747269782e6f7267'),
|
||||
('member_cache','member_cache','165 1','599 737','230 737',X'034b3921676865544b5a7451666c444e7070684c49673a636164656e63652e6d6f654073756368616372636b723a6d61747269782e6f7267'),
|
||||
('member_cache','member_cache','6 1','764 764','231 764',X'034b3d21676b6b686f756d42506643415055664554783a636164656e63652e6d6f6540616d693a7468652d61706f746865636172792e636c7562'),
|
||||
('member_cache','member_cache','10 1','772 775','234 775',X'034b412168424a766e654e4f63646b77694e464c67483a636164656e63652e6d6f65406265617264616e64726f7365733a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','13 1','795 800','244 800',X'03513d2169537958674e7851634575586f587073536e3a707573737468656361742e6f72674063726f6e793a63726f6e79616b617473756b692e78797a'),
|
||||
('member_cache','member_cache','12 1','851 860','274 860',X'034b35216c7570486a715444537a774f744d59476d493a636164656e63652e6d6f654068656c6c63703a6f70656e737573652e6f7267'),
|
||||
('member_cache','member_cache','4 1','872 874','280 874',X'034b39216d616767455367755a427147425a74536e723a636164656e63652e6d6f65406875636b6c65746f6e3a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','4 1','924 924','315 924',X'034b352172454f73706e5971644f414c4149466e69563a636164656e63652e6d6f6540636164656e63653a636164656e63652e6d6f65'),
|
||||
('member_cache','member_cache','4 1','966 966','342 966',X'034b3d21766e717a56767678534a586c5a504f5276533a636164656e63652e6d6f6540616d693a7468652d61706f746865636172792e636c7562'),
|
||||
('member_cache','member_cache','71 1','981 983','350 983',X'034b3d2177574f667376757356486f4e4e567242585a3a636164656e63652e6d6f6540616c65783a6d61747269782e7370656564626f792e6368'),
|
||||
('member_cache','member_cache','14 1','1056 1062','354 1062',X'034b3d21776c534544496a44676c486d42474b7254703a636164656e63652e6d6f65406b61746c796e3a69732d686172646c792e6f6e6c696e65'),
|
||||
('direct','direct','1','0','0',X'024d4070726f666573736f725f706f6f7469735f7068643a6d61747269782e6f7267'),
|
||||
('file','file','1','4034','4034',X'03821368747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3131323736303636393137383234313032342f313135303430343234303037393036393237362f636d64726e656f6e2d313632383534343535313536373635303831362d32303233303232325f3134353733322d766964312e6d7034'),
|
||||
('file','file','1','8069','8069',X'03814968747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3131393239333936393731353639313532322f313230393030323833373230383630343638322f636869702d77696c736f6e2e77656270'),
|
||||
('file','file','1','12104','12104',X'03813b68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3133343037373735333438353033333437322f313139383038373532313531393830303436312f696d6167652e706e67'),
|
||||
('file','file','1','16139','16139',X'03814168747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f313337363732343737393830353034383838322f313339323632373139373133383730323336362f707265766965772e706e67'),
|
||||
('file','file','1','20174','20174',X'03817568747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3135393136353731343139343735393638302f313236383537313138333330363131373230302f53637265656e73686f745f32303234303830315f3130303834315f446973636f72642e6a7067'),
|
||||
('file','file','1','24209','24209',X'03816568747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3238383838323935333331343839333832352f313135343539393530343936303537333533322f53637265656e73686f745f32303233303631302d3130333631332e706e67'),
|
||||
('file','file','1','28244','28244',X'03813b68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3635353231363137333639363238363734362f313330383839373634363434353938393930392f696d6167652e706e67'),
|
||||
('file','file','1','32279','32279',X'027f68747470733a2f2f63646e2e646973636f72646170702e636f6d2f656d6f6a69732f313034393232363234323836313332323238312e706e67'),
|
||||
('lottie','lottie','1','2','2',X'0231373439303532393434363832353832303336'),
|
||||
('lottie','lottie','1','5','5',X'0231373531363036333739333430333635383634'),
|
||||
('lottie','lottie','1','8','8',X'0231373534313038373731383532323232353634'),
|
||||
('lottie','lottie','1','11','11',X'0231373936313430363338303933343433303932'),
|
||||
('lottie','lottie','1','14','14',X'0231373936313431373032363935343835353030'),
|
||||
('lottie','lottie','1','17','17',X'0231383136303837373932323931323832393434'),
|
||||
('lottie','lottie','1','20','20',X'0231383233393736313032393736323930383636');
|
||||
|
||||
ANALYZE sqlite_schema;
|
||||
|
||||
COMMIT;
|
||||
12
src/db/orm-defs.d.ts
vendored
12
src/db/orm-defs.d.ts
vendored
@@ -60,6 +60,12 @@ export type Models = {
|
||||
autocreate: 0 | 1
|
||||
}
|
||||
|
||||
historical_channel_room: {
|
||||
historical_room_index: number
|
||||
reference_channel_id: string
|
||||
room_id: string
|
||||
}
|
||||
|
||||
invite: {
|
||||
mxid: string
|
||||
room_id: string
|
||||
@@ -91,15 +97,15 @@ export type Models = {
|
||||
power_level: number
|
||||
}
|
||||
|
||||
message_channel: {
|
||||
message_room: {
|
||||
message_id: string
|
||||
channel_id: string
|
||||
historical_room_index: number
|
||||
}
|
||||
|
||||
sim: {
|
||||
user_id: string
|
||||
username: string
|
||||
sim_name: string
|
||||
localpart: string
|
||||
mxid: string
|
||||
}
|
||||
|
||||
|
||||
@@ -104,6 +104,21 @@ class From {
|
||||
return r
|
||||
}
|
||||
|
||||
/**
|
||||
* @template {Col} Select
|
||||
* @param {string} what
|
||||
* @param {Select} col
|
||||
*/
|
||||
pluckAs(what, col) {
|
||||
/** @type {Pluck<Table, Select>} */
|
||||
// @ts-ignore
|
||||
const r = this
|
||||
r.cols = [`${what} AS ${col}`]
|
||||
this.makeColsSafe = false
|
||||
r.isPluck = true
|
||||
return r
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} sql
|
||||
*/
|
||||
|
||||
@@ -21,8 +21,8 @@ test("orm: select: get pluck works", t => {
|
||||
})
|
||||
|
||||
test("orm: select: get, where and pluck works", t => {
|
||||
const channelID = select("message_channel", "channel_id", {message_id: "1128118177155526666"}).pluck().get()
|
||||
t.equal(channelID, "112760669178241024")
|
||||
const emojiName = select("emoji", "name", {emoji_id: "230201364309868544"}).pluck().get()
|
||||
t.equal(emojiName, "hippo")
|
||||
})
|
||||
|
||||
test("orm: select: all, where and pluck works on multiple columns", t => {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// @ts-check
|
||||
|
||||
const DiscordTypes = require("discord-api-types/v10")
|
||||
const {discord, sync, from} = require("../../passthrough")
|
||||
const {discord, sync, select, from} = require("../../passthrough")
|
||||
const assert = require("assert").strict
|
||||
|
||||
/** @type {import("../../matrix/api")} */
|
||||
const api = sync.require("../../matrix/api")
|
||||
@@ -11,9 +12,9 @@ const api = sync.require("../../matrix/api")
|
||||
* @param {{api: typeof api}} di
|
||||
* @returns {Promise<DiscordTypes.APIInteractionResponse>}
|
||||
*/
|
||||
async function _interact({guild_id, data}, {api}) {
|
||||
const message = from("event_message").join("message_channel", "message_id").join("channel_room", "channel_id")
|
||||
.select("name", "nick", "source", "channel_id", "room_id", "event_id").where({message_id: data.target_id, part: 0}).get()
|
||||
async function _interact({guild_id, channel, data}, {api}) {
|
||||
const message = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("source", "reference_channel_id", "room_id", "event_id").where({message_id: data.target_id, part: 0}).get()
|
||||
|
||||
if (!message) {
|
||||
return {
|
||||
@@ -25,15 +26,19 @@ async function _interact({guild_id, data}, {api}) {
|
||||
}
|
||||
}
|
||||
|
||||
const channel_id = message.reference_channel_id
|
||||
const room = select("channel_room", ["name", "nick"], {channel_id}).get()
|
||||
assert(room)
|
||||
|
||||
const idInfo = `\n-# Room ID: \`${message.room_id}\`\n-# Event ID: \`${message.event_id}\``
|
||||
const roomName = message.nick || message.name
|
||||
const roomName = room.nick || room.name
|
||||
|
||||
if (message.source === 1) { // from Discord
|
||||
const userID = data.resolved.messages[data.target_id].author.id
|
||||
return {
|
||||
type: DiscordTypes.InteractionResponseType.ChannelMessageWithSource,
|
||||
data: {
|
||||
content: `Bridged <@${userID}> https://discord.com/channels/${guild_id}/${message.channel_id}/${data.target_id} on Discord to [${roomName}](<https://matrix.to/#/${message.room_id}/${message.event_id}>) on Matrix.`
|
||||
content: `Bridged <@${userID}> https://discord.com/channels/${guild_id}/${channel_id}/${data.target_id} on Discord to [${roomName}](<https://matrix.to/#/${message.room_id}/${message.event_id}>) on Matrix.`
|
||||
+ idInfo,
|
||||
flags: DiscordTypes.MessageFlags.Ephemeral
|
||||
}
|
||||
@@ -45,7 +50,7 @@ async function _interact({guild_id, data}, {api}) {
|
||||
return {
|
||||
type: DiscordTypes.InteractionResponseType.ChannelMessageWithSource,
|
||||
data: {
|
||||
content: `Bridged [${event.sender}](<https://matrix.to/#/${event.sender}>)'s message in [${roomName}](<https://matrix.to/#/${message.room_id}/${message.event_id}>) on Matrix to https://discord.com/channels/${guild_id}/${message.channel_id}/${data.target_id} on Discord.`
|
||||
content: `Bridged [${event.sender}](<https://matrix.to/#/${event.sender}>)'s message in [${roomName}](<https://matrix.to/#/${message.room_id}/${message.event_id}>) on Matrix to https://discord.com/channels/${guild_id}/${channel_id}/${data.target_id} on Discord.`
|
||||
+ idInfo,
|
||||
flags: DiscordTypes.MessageFlags.Ephemeral
|
||||
}
|
||||
|
||||
@@ -18,8 +18,8 @@ const api = sync.require("../../matrix/api")
|
||||
async function* _interact({data, guild_id}, {api}) {
|
||||
// Get message info
|
||||
const row = from("event_message")
|
||||
.join("message_channel", "message_id")
|
||||
.select("event_id", "source", "channel_id")
|
||||
.join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("event_id", "source", "room_id", "reference_channel_id")
|
||||
.where({message_id: data.target_id})
|
||||
.get()
|
||||
|
||||
@@ -35,10 +35,9 @@ async function* _interact({data, guild_id}, {api}) {
|
||||
}
|
||||
|
||||
// Get the message sender, the person that will be inspected/edited
|
||||
const eventID = row.event_id
|
||||
const roomID = select("channel_room", "room_id", {channel_id: row.channel_id}).pluck().get()
|
||||
const roomID = select("channel_room", "room_id", {channel_id: row.reference_channel_id}).pluck().get()
|
||||
assert(roomID)
|
||||
const event = await api.getEvent(roomID, eventID)
|
||||
const event = await api.getEvent(row.room_id, row.event_id)
|
||||
const sender = event.sender
|
||||
|
||||
// Get the space, where the power levels will be inspected/edited
|
||||
|
||||
@@ -16,7 +16,7 @@ const utils = sync.require("../../m2d/converters/utils")
|
||||
* @returns {AsyncGenerator<{[k in keyof InteractionMethods]?: Parameters<InteractionMethods[k]>[2]}>}
|
||||
*/
|
||||
async function* _interact({data}, {api}) {
|
||||
const row = from("event_message").join("message_channel", "message_id").join("channel_room", "channel_id")
|
||||
const row = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("event_id", "room_id").where({message_id: data.target_id}).get()
|
||||
if (!row) {
|
||||
return yield {createInteractionResponse: {
|
||||
|
||||
@@ -14,7 +14,7 @@ const emoji = sync.require("../converters/emoji")
|
||||
* @param {Ty.Event.Outer<Ty.Event.M_Reaction>} event
|
||||
*/
|
||||
async function addReaction(event) {
|
||||
const channelID = select("channel_room", "channel_id", {room_id: event.room_id}).pluck().get()
|
||||
const channelID = select("historical_channel_room", "reference_channel_id", {room_id: event.room_id}).pluck().get()
|
||||
if (!channelID) return // We just assume the bridge has already been created
|
||||
const messageID = select("event_message", "message_id", {event_id: event.content["m.relates_to"].event_id}, "ORDER BY reaction_part").pluck().get()
|
||||
if (!messageID) return // Nothing can be done if the parent message was never bridged.
|
||||
|
||||
@@ -12,13 +12,14 @@ const utils = sync.require("../converters/utils")
|
||||
* @param {Ty.Event.Outer_M_Room_Redaction} event
|
||||
*/
|
||||
async function deleteMessage(event) {
|
||||
const rows = from("event_message").join("message_channel", "message_id").select("channel_id", "message_id").where({event_id: event.redacts}).all()
|
||||
const rows = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("reference_channel_id", "message_id").where({event_id: event.redacts}).all()
|
||||
if (!rows.length) return
|
||||
for (const row of rows) {
|
||||
await discord.snow.channel.deleteMessage(row.channel_id, row.message_id, event.content.reason)
|
||||
await discord.snow.channel.deleteMessage(row.reference_channel_id, row.message_id, event.content.reason)
|
||||
db.prepare("DELETE FROM event_message WHERE message_id = ?").run(row.message_id)
|
||||
}
|
||||
db.prepare("DELETE FROM message_channel WHERE message_id = ?").run(rows[0].message_id)
|
||||
db.prepare("DELETE FROM message_room WHERE message_id = ?").run(rows[0].message_id)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -26,9 +27,10 @@ async function deleteMessage(event) {
|
||||
*/
|
||||
async function removeReaction(event) {
|
||||
const hash = utils.getEventIDHash(event.redacts)
|
||||
const row = from("reaction").join("message_channel", "message_id").select("channel_id", "message_id", "encoded_emoji").where({hashed_event_id: hash}).get()
|
||||
const row = from("reaction").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("reference_channel_id", "message_id", "encoded_emoji").where({hashed_event_id: hash}).get()
|
||||
if (!row) return
|
||||
await discord.snow.channel.deleteReactionSelf(row.channel_id, row.message_id, row.encoded_emoji)
|
||||
await discord.snow.channel.deleteReactionSelf(row.reference_channel_id, row.message_id, row.encoded_emoji)
|
||||
db.prepare("DELETE FROM reaction WHERE hashed_event_id = ?").run(hash)
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ const stream = require("stream")
|
||||
const assert = require("assert").strict
|
||||
const crypto = require("crypto")
|
||||
const passthrough = require("../../passthrough")
|
||||
const {sync, discord, db, select} = passthrough
|
||||
const {sync, discord, db, from, select} = passthrough
|
||||
|
||||
/** @type {import("./channel-webhook")} */
|
||||
const channelWebhook = sync.require("./channel-webhook")
|
||||
@@ -61,7 +61,7 @@ async function resolvePendingFiles(message) {
|
||||
|
||||
/** @param {Ty.Event.Outer_M_Room_Message | Ty.Event.Outer_M_Room_Message_File | Ty.Event.Outer_M_Sticker} event */
|
||||
async function sendEvent(event) {
|
||||
const row = select("channel_room", ["channel_id", "thread_parent"], {room_id: event.room_id}).get()
|
||||
const row = from("channel_room").where({room_id: event.room_id}).select("channel_id", "thread_parent").get()
|
||||
if (!row) return [] // allow the bot to exist in unbridged rooms, just don't do anything with it
|
||||
let channelID = row.channel_id
|
||||
let threadID = undefined
|
||||
@@ -73,6 +73,8 @@ async function sendEvent(event) {
|
||||
const guildID = discord.channels.get(channelID).guild_id
|
||||
const guild = discord.guilds.get(guildID)
|
||||
assert(guild)
|
||||
const historicalRoomIndex = select("historical_channel_room", "historical_room_index", {room_id: event.room_id}).pluck().get()
|
||||
assert(historicalRoomIndex)
|
||||
|
||||
// no need to sync the matrix member to the other side. but if I did need to, this is where I'd do it
|
||||
|
||||
@@ -98,15 +100,17 @@ async function sendEvent(event) {
|
||||
}
|
||||
|
||||
for (const id of messagesToDelete) {
|
||||
db.prepare("DELETE FROM message_channel WHERE message_id = ?").run(id)
|
||||
db.prepare("DELETE FROM message_room WHERE message_id = ?").run(id)
|
||||
await channelWebhook.deleteMessageWithWebhook(channelID, id, threadID)
|
||||
}
|
||||
|
||||
for (const message of messagesToSend) {
|
||||
const reactionPart = messagesToEdit.length === 0 && message === messagesToSend[messagesToSend.length - 1] ? 0 : 1
|
||||
const messageResponse = await channelWebhook.sendMessageWithWebhook(channelID, message, threadID)
|
||||
db.prepare("INSERT INTO message_channel (message_id, channel_id) VALUES (?, ?)").run(messageResponse.id, threadID || channelID)
|
||||
db.prepare("INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) VALUES (?, ?, ?, ?, ?, ?, 0)").run(event.event_id, event.type, event.content["msgtype"] || null, messageResponse.id, eventPart, reactionPart) // source 0 = matrix
|
||||
db.transaction(() => {
|
||||
db.prepare("INSERT INTO message_room (message_id, historical_room_index) VALUES (?, ?)").run(messageResponse.id, historicalRoomIndex)
|
||||
db.prepare("INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) VALUES (?, ?, ?, ?, ?, ?, 0)").run(event.event_id, event.type, event.content["msgtype"] || null, messageResponse.id, eventPart, reactionPart) // source 0 = matrix
|
||||
})()
|
||||
|
||||
eventPart = 1
|
||||
messageResponses.push(messageResponse)
|
||||
|
||||
@@ -12,12 +12,13 @@ const diffPins = sync.require("../converters/diff-pins")
|
||||
async function updatePins(pins, prev) {
|
||||
const diff = diffPins.diffPins(pins, prev)
|
||||
for (const [event_id, added] of diff) {
|
||||
const row = from("event_message").join("message_channel", "message_id").where({event_id, part: 0}).select("channel_id", "message_id").get()
|
||||
const row = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("reference_channel_id", "message_id").get()
|
||||
if (!row) continue
|
||||
if (added) {
|
||||
discord.snow.channel.addChannelPinnedMessage(row.channel_id, row.message_id, "Message pinned on Matrix")
|
||||
discord.snow.channel.addChannelPinnedMessage(row.reference_channel_id, row.message_id, "Message pinned on Matrix")
|
||||
} else {
|
||||
discord.snow.channel.removeChannelPinnedMessage(row.channel_id, row.message_id, "Message unpinned on Matrix")
|
||||
discord.snow.channel.removeChannelPinnedMessage(row.reference_channel_id, row.message_id, "Message unpinned on Matrix")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,8 @@ const file = sync.require("../../matrix/file")
|
||||
const emojiSheet = sync.require("./emoji-sheet")
|
||||
/** @type {import("../actions/setup-emojis")} */
|
||||
const setupEmojis = sync.require("../actions/setup-emojis")
|
||||
/** @type {import("../../d2m/converters/user-to-mxid")} */
|
||||
const userToMxid = sync.require("../../d2m/converters/user-to-mxid")
|
||||
|
||||
/** @type {[RegExp, string][]} */
|
||||
const markdownEscapes = [
|
||||
@@ -332,10 +334,11 @@ function splitDisplayName(displayName) {
|
||||
* Convert a Matrix user ID into a Discord user ID for mentioning, where if the user is a PK proxy, it will mention the proxy owner.
|
||||
* @param {string} mxid
|
||||
*/
|
||||
function getUserOrProxyOwnerID(mxid) {
|
||||
const row = from("sim").join("sim_proxy", "user_id", "left").select("user_id", "proxy_owner_id").where({mxid}).get()
|
||||
function getUserOrProxyOwnerMention(mxid) {
|
||||
const row = from("sim").join("sim_proxy", "user_id", "left").select("user_id", "username", "proxy_owner_id").where({mxid}).get()
|
||||
if (!row) return null
|
||||
return row.proxy_owner_id || row.user_id
|
||||
if (userToMxid.isWebhookUserID(row.user_id)) return `**@${row.username}**`
|
||||
return `<@${row.proxy_owner_id || row.user_id}>`
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -398,7 +401,7 @@ async function handleRoomOrMessageLinks(input, di) {
|
||||
}
|
||||
}
|
||||
|
||||
const channelID = select("channel_room", "channel_id", {room_id: roomID}).pluck().get()
|
||||
const channelID = select("historical_channel_room", "reference_channel_id", {room_id: roomID}).pluck().get()
|
||||
if (!channelID) continue
|
||||
if (!eventID) {
|
||||
// 1: It's a room link, so <#link> to the channel
|
||||
@@ -681,9 +684,10 @@ async function eventToMessage(event, guild, di) {
|
||||
}
|
||||
|
||||
replyLine = await getL1L2ReplyLine()
|
||||
const row = from("event_message").join("message_channel", "message_id").select("channel_id", "message_id").where({event_id: repliedToEventId}).and("ORDER BY part").get()
|
||||
const row = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index")
|
||||
.select("reference_channel_id", "message_id").where({event_id: repliedToEventId}).and("ORDER BY part").get()
|
||||
if (row) {
|
||||
replyLine += `https://discord.com/channels/${guild.id}/${row.channel_id}/${row.message_id} `
|
||||
replyLine += `https://discord.com/channels/${guild.id}/${row.reference_channel_id}/${row.message_id} `
|
||||
}
|
||||
// If the event has been edited, the homeserver will include the relation in `unsigned`.
|
||||
if (repliedToEvent.unsigned?.["m.relations"]?.["m.replace"]?.content?.["m.new_content"]) {
|
||||
@@ -727,9 +731,9 @@ async function eventToMessage(event, guild, di) {
|
||||
}
|
||||
}
|
||||
const sender = repliedToEvent.sender
|
||||
const authorID = getUserOrProxyOwnerID(sender)
|
||||
if (authorID) {
|
||||
replyLine += `<@${authorID}>`
|
||||
const authorMention = getUserOrProxyOwnerMention(sender)
|
||||
if (authorMention) {
|
||||
replyLine += authorMention
|
||||
} else {
|
||||
let senderName = select("member_cache", "displayname", {mxid: sender}).pluck().get()
|
||||
if (!senderName) senderName = sender.match(/@([^:]*)/)?.[1]
|
||||
|
||||
@@ -26,16 +26,28 @@ as.router.get("/api/message", defineEventHandler(async event => {
|
||||
const api = getAPI(event)
|
||||
|
||||
const {message_id} = await getValidatedQuery(event, schema.message.parse)
|
||||
const metadatas = from("event_message").join("message_channel", "message_id").join("channel_room", "channel_id").where({message_id})
|
||||
.select("event_id", "event_type", "event_subtype", "part", "reaction_part", "room_id", "source").and("ORDER BY part ASC, reaction_part DESC").all()
|
||||
const metadatas = from("event_message").join("message_room", "message_id").join("historical_channel_room", "historical_room_index").where({message_id})
|
||||
.select("event_id", "event_type", "event_subtype", "part", "reaction_part", "reference_channel_id", "room_id", "source").and("ORDER BY part ASC, reaction_part DESC").all()
|
||||
|
||||
if (metadatas.length === 0) {
|
||||
return new Response("Message not found", {status: 404, statusText: "Not Found"})
|
||||
}
|
||||
|
||||
const current_room_id = select("channel_room", "room_id", {channel_id: metadatas[0].reference_channel_id}).pluck().get()
|
||||
const events = await Promise.all(metadatas.map(metadata =>
|
||||
api.getEvent(metadata.room_id, metadata.event_id).then(raw => ({
|
||||
metadata: Object.assign({sender: raw.sender}, metadata),
|
||||
metadata: {
|
||||
event_id: metadata.event_id,
|
||||
event_type: metadata.event_type,
|
||||
event_subtype: metadata.event_subtype,
|
||||
part: metadata.part,
|
||||
reaction_part: metadata.reaction_part,
|
||||
channel_id: metadata.reference_channel_id,
|
||||
room_id: metadata.room_id,
|
||||
source: metadata.source,
|
||||
sender: raw.sender,
|
||||
current_room_id: current_room_id
|
||||
},
|
||||
raw
|
||||
}))
|
||||
))
|
||||
|
||||
@@ -57,14 +57,16 @@ test("web info: returns data for a matrix message and profile", async t => {
|
||||
},
|
||||
events: [{
|
||||
metadata: {
|
||||
event_id: "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk",
|
||||
event_subtype: "m.text",
|
||||
event_type: "m.room.message",
|
||||
part: 0,
|
||||
reaction_part: 0,
|
||||
room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe",
|
||||
sender: "@cadence:cadence.moe",
|
||||
source: 0
|
||||
event_id: "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk",
|
||||
event_subtype: "m.text",
|
||||
event_type: "m.room.message",
|
||||
part: 0,
|
||||
reaction_part: 0,
|
||||
room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe",
|
||||
channel_id: "176333891320283136",
|
||||
current_room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe",
|
||||
sender: "@cadence:cadence.moe",
|
||||
source: 0
|
||||
},
|
||||
raw
|
||||
}]
|
||||
@@ -113,14 +115,16 @@ test("web info: returns data for a matrix message without profile", async t => {
|
||||
},
|
||||
events: [{
|
||||
metadata: {
|
||||
event_id: "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk",
|
||||
event_subtype: "m.text",
|
||||
event_type: "m.room.message",
|
||||
part: 0,
|
||||
reaction_part: 0,
|
||||
room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe",
|
||||
sender: "@cadence:cadence.moe",
|
||||
source: 0
|
||||
event_id: "$51gH61p_eJc2RylOdE2lAr4-ogP7dS0WJI62lCFzBvk",
|
||||
event_subtype: "m.text",
|
||||
event_type: "m.room.message",
|
||||
part: 0,
|
||||
reaction_part: 0,
|
||||
room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe",
|
||||
channel_id: "176333891320283136",
|
||||
current_room_id: "!qzDBLKlildpzrrOnFZ:cadence.moe",
|
||||
sender: "@cadence:cadence.moe",
|
||||
source: 0
|
||||
},
|
||||
raw
|
||||
}]
|
||||
@@ -191,14 +195,16 @@ test("web info: returns data for a discord message", async t => {
|
||||
matrix_author: undefined,
|
||||
events: [{
|
||||
metadata: {
|
||||
event_id: "$AfrB8hzXkDMvuoWjSZkDdFYomjInWH7jMBPkwQMN8AI",
|
||||
event_subtype: "m.text",
|
||||
event_type: "m.room.message",
|
||||
part: 0,
|
||||
reaction_part: 1,
|
||||
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe",
|
||||
sender: "@_ooye_accavish:cadence.moe",
|
||||
source: 1
|
||||
event_id: "$AfrB8hzXkDMvuoWjSZkDdFYomjInWH7jMBPkwQMN8AI",
|
||||
event_subtype: "m.text",
|
||||
event_type: "m.room.message",
|
||||
part: 0,
|
||||
reaction_part: 1,
|
||||
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe",
|
||||
channel_id: "112760669178241024",
|
||||
current_room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe",
|
||||
sender: "@_ooye_accavish:cadence.moe",
|
||||
source: 1
|
||||
},
|
||||
raw: raw1
|
||||
}, {
|
||||
@@ -209,6 +215,8 @@ test("web info: returns data for a discord message", async t => {
|
||||
part: 1,
|
||||
reaction_part: 0,
|
||||
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe",
|
||||
channel_id: "112760669178241024",
|
||||
current_room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe",
|
||||
sender: "@_ooye_accavish:cadence.moe",
|
||||
source: 1
|
||||
},
|
||||
|
||||
@@ -23,6 +23,8 @@ INSERT INTO channel_room (channel_id, room_id, name, nick, thread_parent, custom
|
||||
('1161864271370666075', '!mHmhQQPwXNananMUqq:cadence.moe', 'updates', NULL, NULL, NULL),
|
||||
('1438284564815548418', '!MHxNpwtgVqWOrmyoTn:cadence.moe', 'sin-cave', NULL, NULL, NULL);
|
||||
|
||||
INSERT INTO historical_channel_room (reference_channel_id, room_id) SELECT channel_id, room_id FROM channel_room;
|
||||
|
||||
INSERT INTO sim (user_id, username, sim_name, mxid) VALUES
|
||||
('0', 'Matrix Bridge', 'bot', '@_ooye_bot:cadence.moe'),
|
||||
('820865262526005258', 'Crunch God', 'crunch_god', '@_ooye_crunch_god:cadence.moe'),
|
||||
@@ -42,7 +44,8 @@ INSERT INTO sim_member (mxid, room_id, hashed_profile_content) VALUES
|
||||
INSERT INTO sim_proxy (user_id, proxy_owner_id, displayname) VALUES
|
||||
('43d378d5-1183-47dc-ab3c-d14e21c3fe58', '196188877885538304', 'Azalea &flwr; 🌺');
|
||||
|
||||
INSERT INTO message_channel (message_id, channel_id) VALUES
|
||||
INSERT INTO message_room (message_id, historical_room_index)
|
||||
WITH a (message_id, channel_id) AS (VALUES
|
||||
('1106366167788044450', '122155380120748034'),
|
||||
('1106366167788044451', '122155380120748034'),
|
||||
('1106366167788044452', '122155380120748034'),
|
||||
@@ -75,7 +78,8 @@ INSERT INTO message_channel (message_id, channel_id) VALUES
|
||||
('1339000288144658482', '176333891320283136'),
|
||||
('1381212840957972480', '112760669178241024'),
|
||||
('1401760355339862066', '112760669178241024'),
|
||||
('1439351590262800565', '1438284564815548418');
|
||||
('1439351590262800565', '1438284564815548418'))
|
||||
SELECT message_id, max(historical_room_index) as historical_room_index FROM a INNER JOIN historical_channel_room ON historical_channel_room.reference_channel_id = a.channel_id GROUP BY message_id;
|
||||
|
||||
INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, reaction_part, source) VALUES
|
||||
('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', 0, 0, 1),
|
||||
|
||||
Reference in New Issue
Block a user