Compare commits

...

2 commits

Author SHA1 Message Date
7e6548eb90 Ack bridged Matrix events
May provide reassurance that the bridge is currently working.
Half-Shot's bridge has always done this.
2025-01-08 01:31:31 +13:00
93cacba283 Make sure client hint change applies
Will eventually remove it fully in v4.
2025-01-08 01:25:17 +13:00
4 changed files with 28 additions and 0 deletions

View file

@ -162,6 +162,8 @@ async function channelToKState(channel, guild, di) {
}, },
users: {...spacePower, ...globalAdminPower} users: {...spacePower, ...globalAdminPower}
}, },
"chat.schildi.hide_ui/read_receipts": {
},
[`uk.half-shot.bridge/moe.cadence.ooye://discord/${guild.id}/${channel.id}`]: { [`uk.half-shot.bridge/moe.cadence.ooye://discord/${guild.id}/${channel.id}`]: {
bridgebot: `@${reg.sender_localpart}:${reg.ooye.server_name}`, bridgebot: `@${reg.sender_localpart}:${reg.ooye.server_name}`,
protocol: { protocol: {

View file

@ -104,6 +104,7 @@ async event => {
// @ts-ignore // @ts-ignore
await matrixCommandHandler.execute(event) await matrixCommandHandler.execute(event)
} }
await api.ackEvent(event)
})) }))
sync.addTemporaryListener(as, "type:m.sticker", guard("m.sticker", sync.addTemporaryListener(as, "type:m.sticker", guard("m.sticker",
@ -113,6 +114,7 @@ sync.addTemporaryListener(as, "type:m.sticker", guard("m.sticker",
async event => { async event => {
if (utils.eventSenderIsFromDiscord(event.sender)) return if (utils.eventSenderIsFromDiscord(event.sender)) return
const messageResponses = await sendEvent.sendEvent(event) const messageResponses = await sendEvent.sendEvent(event)
await api.ackEvent(event)
})) }))
sync.addTemporaryListener(as, "type:m.reaction", guard("m.reaction", sync.addTemporaryListener(as, "type:m.reaction", guard("m.reaction",
@ -137,6 +139,7 @@ sync.addTemporaryListener(as, "type:m.room.redaction", guard("m.room.redaction",
async event => { async event => {
if (utils.eventSenderIsFromDiscord(event.sender)) return if (utils.eventSenderIsFromDiscord(event.sender)) return
await redact.handle(event) await redact.handle(event)
await api.ackEvent(event)
})) }))
sync.addTemporaryListener(as, "type:m.room.avatar", guard("m.room.avatar", sync.addTemporaryListener(as, "type:m.room.avatar", guard("m.room.avatar",

View file

@ -347,6 +347,26 @@ function getMedia(mxc, init = {}) {
}) })
} }
/**
* Updates the m.read receipt in roomID to point to eventID.
* This doesn't modify m.fully_read, which matches [the behaviour of matrix-bot-sdk.](https://github.com/element-hq/matrix-bot-sdk/blob/e72a4c498e00c6c339a791630c45d00a351f56a8/src/MatrixClient.ts#L1227)
* @param {string} roomID
* @param {string} eventID
* @param {string?} [mxid]
*/
async function sendReadReceipt(roomID, eventID, mxid) {
await mreq.mreq("POST", path(`/client/v3/rooms/${roomID}/receipt/m.read/${eventID}`, mxid), {})
}
/**
* Acknowledge an event as read by calling api.sendReadReceipt on it.
* @param {Ty.Event.Outer<any>} event
* @param {string?} [mxid]
*/
async function ackEvent(event, mxid) {
await sendReadReceipt(event.room_id, event.event_id, mxid)
}
module.exports.path = path module.exports.path = path
module.exports.register = register module.exports.register = register
module.exports.createRoom = createRoom module.exports.createRoom = createRoom
@ -373,3 +393,5 @@ module.exports.setUserPower = setUserPower
module.exports.setUserPowerCascade = setUserPowerCascade module.exports.setUserPowerCascade = setUserPowerCascade
module.exports.ping = ping module.exports.ping = ping
module.exports.getMedia = getMedia module.exports.getMedia = getMedia
module.exports.sendReadReceipt = sendReadReceipt
module.exports.ackEvent = ackEvent

View file

@ -48,6 +48,7 @@ module.exports = {
room: 0 room: 0
} }
}, },
"chat.schildi.hide_ui/read_receipts": {},
"uk.half-shot.bridge/moe.cadence.ooye://discord/112760669178241024/112760669178241024": { "uk.half-shot.bridge/moe.cadence.ooye://discord/112760669178241024/112760669178241024": {
bridgebot: "@_ooye_bot:cadence.moe", bridgebot: "@_ooye_bot:cadence.moe",
protocol: { protocol: {