test that edits by webhook work
This commit is contained in:
parent
b9de84e586
commit
e3737997ec
5 changed files with 158 additions and 90 deletions
|
@ -22,7 +22,14 @@ async function editToChanges(message, guild, api) {
|
||||||
// Figure out what events we will be replacing
|
// Figure out what events we will be replacing
|
||||||
|
|
||||||
const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(message.channel_id)
|
const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(message.channel_id)
|
||||||
const senderMxid = await registerUser.ensureSimJoined(message.author, roomID)
|
/** @type {string?} */
|
||||||
|
let senderMxid = db.prepare("SELECT mxid FROM sim WHERE discord_id = ?").pluck().get(message.author.id) ?? null
|
||||||
|
if (senderMxid) {
|
||||||
|
const senderIsInRoom = db.prepare("SELECT * FROM sim_member WHERE room_id = ? and mxid = ?").get(roomID, senderMxid)
|
||||||
|
if (!senderIsInRoom) {
|
||||||
|
senderMxid = null // just send as ooye bot
|
||||||
|
}
|
||||||
|
}
|
||||||
/** @type {{event_id: string, event_type: string, event_subtype: string?, part: number}[]} */
|
/** @type {{event_id: string, event_type: string, event_subtype: string?, part: number}[]} */
|
||||||
const oldEventRows = db.prepare("SELECT event_id, event_type, event_subtype, part FROM event_message WHERE message_id = ?").all(message.id)
|
const oldEventRows = db.prepare("SELECT event_id, event_type, event_subtype, part FROM event_message WHERE message_id = ?").all(message.id)
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,34 @@ const {editToChanges} = require("./edit-to-changes")
|
||||||
const data = require("../../test/data")
|
const data = require("../../test/data")
|
||||||
const Ty = require("../../types")
|
const Ty = require("../../types")
|
||||||
|
|
||||||
|
test("edit2changes: edit by webhook", async t => {
|
||||||
|
const {senderMxid, eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.edit_by_webhook, data.guild.general, {})
|
||||||
|
t.deepEqual(eventsToRedact, [])
|
||||||
|
t.deepEqual(eventsToSend, [])
|
||||||
|
t.deepEqual(eventsToReplace, [{
|
||||||
|
oldID: "$zXSlyI78DQqQwwfPUSzZ1b-nXzbUrCDljJgnGDdoI10",
|
||||||
|
newContent: {
|
||||||
|
$type: "m.room.message",
|
||||||
|
msgtype: "m.text",
|
||||||
|
body: "* test 2",
|
||||||
|
"m.mentions": {},
|
||||||
|
"m.new_content": {
|
||||||
|
// *** Replaced With: ***
|
||||||
|
msgtype: "m.text",
|
||||||
|
body: "test 2",
|
||||||
|
"m.mentions": {}
|
||||||
|
},
|
||||||
|
"m.relates_to": {
|
||||||
|
rel_type: "m.replace",
|
||||||
|
event_id: "$zXSlyI78DQqQwwfPUSzZ1b-nXzbUrCDljJgnGDdoI10"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}])
|
||||||
|
t.equal(senderMxid, null)
|
||||||
|
})
|
||||||
|
|
||||||
test("edit2changes: bot response", async t => {
|
test("edit2changes: bot response", async t => {
|
||||||
const {eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.bot_response, data.guild.general, {
|
const {senderMxid, eventsToRedact, eventsToReplace, eventsToSend} = await editToChanges(data.message_update.bot_response, data.guild.general, {
|
||||||
async getJoinedMembers(roomID) {
|
async getJoinedMembers(roomID) {
|
||||||
t.equal(roomID, "!uCtjHhfGlYbVnPVlkG:cadence.moe")
|
t.equal(roomID, "!uCtjHhfGlYbVnPVlkG:cadence.moe")
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
|
@ -55,6 +81,7 @@ test("edit2changes: bot response", async t => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}])
|
}])
|
||||||
|
t.equal(senderMxid, "@_ooye_bojack_horseman:cadence.moe")
|
||||||
})
|
})
|
||||||
|
|
||||||
test("edit2changes: remove caption from image", async t => {
|
test("edit2changes: remove caption from image", async t => {
|
||||||
|
|
|
@ -37,6 +37,13 @@ module.exports = {
|
||||||
* @param {import("discord-api-types/v10").GatewayMessageUpdateDispatchData} message
|
* @param {import("discord-api-types/v10").GatewayMessageUpdateDispatchData} message
|
||||||
*/
|
*/
|
||||||
onMessageUpdate(client, data) {
|
onMessageUpdate(client, data) {
|
||||||
|
if (data.webhook_id) {
|
||||||
|
const row = db.prepare("SELECT webhook_id FROM webhook WHERE webhook_id = ?").pluck().get(message.webhook_id)
|
||||||
|
if (row) {
|
||||||
|
// The update was sent by the bridge's own webhook on discord. We don't want to reflect this back, so just drop it.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
// Based on looking at data they've sent me over the gateway, this is the best way to check for meaningful changes.
|
// Based on looking at data they've sent me over the gateway, this is the best way to check for meaningful changes.
|
||||||
// If the message content is a string then it includes all interesting fields and is meaningful.
|
// If the message content is a string then it includes all interesting fields and is meaningful.
|
||||||
if (typeof data.content === "string") {
|
if (typeof data.content === "string") {
|
||||||
|
|
Binary file not shown.
27
test/data.js
27
test/data.js
|
@ -788,6 +788,33 @@ module.exports = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
message_update: {
|
message_update: {
|
||||||
|
edit_by_webhook: {
|
||||||
|
application_id: "684280192553844747",
|
||||||
|
attachments: [],
|
||||||
|
author: {
|
||||||
|
avatar: null,
|
||||||
|
bot: true,
|
||||||
|
discriminator: "0000",
|
||||||
|
id: "700285844094845050",
|
||||||
|
username: "cadence [they]"
|
||||||
|
},
|
||||||
|
channel_id: "497161350934560778",
|
||||||
|
components: [],
|
||||||
|
content: "test 2",
|
||||||
|
edited_timestamp: "2023-08-17T06:29:34.167314+00:00",
|
||||||
|
embeds: [],
|
||||||
|
flags: 0,
|
||||||
|
guild_id: "497159726455455754",
|
||||||
|
id: "1141619794500649020",
|
||||||
|
mention_everyone: false,
|
||||||
|
mention_roles: [],
|
||||||
|
mentions: [],
|
||||||
|
pinned: false,
|
||||||
|
timestamp: "2023-08-17T06:29:29.279000+00:00",
|
||||||
|
tts: false,
|
||||||
|
type: 0,
|
||||||
|
webhook_id: "700285844094845050"
|
||||||
|
},
|
||||||
bot_response: {
|
bot_response: {
|
||||||
attachments: [],
|
attachments: [],
|
||||||
author: {
|
author: {
|
||||||
|
|
Loading…
Reference in a new issue