diff --git a/src/d2m/converters/message-to-event.js b/src/d2m/converters/message-to-event.js
index 7f77b81..b1af2e3 100644
--- a/src/d2m/converters/message-to-event.js
+++ b/src/d2m/converters/message-to-event.js
@@ -582,7 +582,8 @@ async function messageToEvent(message, guild, options = {}, di) {
// check that condition 1 or 2 is met
if (repliedToEventInDifferentRoom || repliedToUnknownEvent) {
let referenced = message.referenced_message
- if (!referenced) { // backend couldn't be bothered to dereference the message, have to do it ourselves
+ /* c8 ignore next 4 - backend couldn't be bothered to dereference the message, have to do it ourselves */
+ if (!referenced) {
assert(message.message_reference?.message_id)
referenced = await discord.snow.channel.getChannelMessage(message.message_reference.channel_id, message.message_reference.message_id)
}
@@ -905,11 +906,8 @@ async function messageToEvent(message, guild, options = {}, di) {
else if (component.type === DiscordTypes.ComponentType.Button) {
// May only be a section accessory or in an action row (up to 5)
if (component.style === DiscordTypes.ButtonStyle.Link) {
- if (component.label) {
- stack.msb.add(`[${component.label} ${component.url}] `, tag`${component.label} `)
- } else {
- stack.msb.add(component.url)
- }
+ assert(component.label) // required for Discord to validate link buttons
+ stack.msb.add(`[${component.label} ${component.url}] `, tag`${component.label} `)
}
}
diff --git a/src/m2d/converters/event-to-message.test.js b/src/m2d/converters/event-to-message.test.js
index 629f2b8..aa426cd 100644
--- a/src/m2d/converters/event-to-message.test.js
+++ b/src/m2d/converters/event-to-message.test.js
@@ -4747,17 +4747,17 @@ test("event2message: stickers work", async t => {
messagesToEdit: [],
messagesToSend: [{
username: "cadence [they]",
- content: "",
+ content: "[get_real2](https://bridge.example.org/download/sticker/cadence.moe/NyMXQFAAdniImbHzsygScbmN/_.webp)",
avatar_url: "https://bridge.example.org/download/matrix/cadence.moe/azCAhThKTojXSZJRoWwZmhvU",
- attachments: [{id: "0", filename: "get_real2.gif"}],
- pendingFiles: [{name: "get_real2.gif", mxc: "mxc://cadence.moe/NyMXQFAAdniImbHzsygScbmN"}]
+ allowed_mentions: {
+ parse: ["users", "roles"]
+ }
}]
}
)
})
test("event2message: stickers fetch mimetype from server when mimetype not provided", async t => {
- let called = 0
t.deepEqual(
await eventToMessage({
type: "m.sticker",
@@ -4768,20 +4768,6 @@ test("event2message: stickers fetch mimetype from server when mimetype not provi
},
event_id: "$mL-eEVWCwOvFtoOiivDP7gepvf-fTYH6_ioK82bWDI0",
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
- }, {}, {}, {
- api: {
- async getMedia(mxc, options) {
- called++
- t.equal(mxc, "mxc://cadence.moe/ybOWQCaXysnyUGuUCaQlTGJf")
- t.equal(options.method, "HEAD")
- return {
- status: 200,
- headers: new Map([
- ["content-type", "image/gif"]
- ])
- }
- }
- }
}),
{
ensureJoined: [],
@@ -4789,48 +4775,14 @@ test("event2message: stickers fetch mimetype from server when mimetype not provi
messagesToEdit: [],
messagesToSend: [{
username: "cadence [they]",
- content: "",
+ content: "[YESYESYES](https://bridge.example.org/download/sticker/cadence.moe/ybOWQCaXysnyUGuUCaQlTGJf/_.webp)",
avatar_url: undefined,
- attachments: [{id: "0", filename: "YESYESYES.gif"}],
- pendingFiles: [{name: "YESYESYES.gif", mxc: "mxc://cadence.moe/ybOWQCaXysnyUGuUCaQlTGJf"}]
+ allowed_mentions: {
+ parse: ["users", "roles"]
+ }
}]
}
)
- t.equal(called, 1, "sticker headers should be fetched")
-})
-
-test("event2message: stickers with unknown mimetype are not allowed", async t => {
- let called = 0
- try {
- await eventToMessage({
- type: "m.sticker",
- sender: "@cadence:cadence.moe",
- content: {
- body: "something",
- url: "mxc://cadence.moe/ybOWQCaXysnyUGuUCaQlTGJe"
- },
- event_id: "$mL-eEVWCwOvFtoOiivDP7gepvf-fTYH6_ioK82bWDI0",
- room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
- }, {}, {}, {
- api: {
- async getMedia(mxc, options) {
- called++
- t.equal(mxc, "mxc://cadence.moe/ybOWQCaXysnyUGuUCaQlTGJe")
- t.equal(options.method, "HEAD")
- return {
- status: 404,
- headers: new Map([
- ["content-type", "application/json"]
- ])
- }
- }
- }
- })
- /* c8 ignore next */
- t.fail("should throw an error")
- } catch (e) {
- t.match(e.toString(), "mimetype")
- }
})
test("event2message: static emojis work", async t => {
diff --git a/src/matrix/utils.js b/src/matrix/utils.js
index 9f5cb0f..eee635b 100644
--- a/src/matrix/utils.js
+++ b/src/matrix/utils.js
@@ -225,19 +225,6 @@ async function getViaServersQuery(roomID, api) {
return qs
}
-function generatePermittedMediaHash(mxc) {
- assert(hasher, "xxhash is not ready yet")
- const mediaParts = mxc?.match(/^mxc:\/\/([^/]+)\/(\w+)$/)
- if (!mediaParts) return undefined
-
- const serverAndMediaID = `${mediaParts[1]}/${mediaParts[2]}`
- const unsignedHash = hasher.h64(serverAndMediaID)
- const signedHash = unsignedHash - 0x8000000000000000n // shifting down to signed 64-bit range
- db.prepare("INSERT OR IGNORE INTO media_proxy (permitted_hash) VALUES (?)").run(signedHash)
-
- return serverAndMediaID
-}
-
/**
* Since the introduction of authenticated media, this can no longer just be the /_matrix/media/r0/download URL
* because Discord and Discord users cannot use those URLs. Media now has to be proxied through the bridge.
diff --git a/src/web/routes/guild-settings.js b/src/web/routes/guild-settings.js
index 62a28a1..ae52825 100644
--- a/src/web/routes/guild-settings.js
+++ b/src/web/routes/guild-settings.js
@@ -134,6 +134,6 @@ as.router.post("/api/default-roles", defineEventHandler(async event => {
if (getRequestHeader(event, "HX-Request")) {
return pugSync.render(event, "fragments/default-roles-list.pug", {guild, guild_id: guildID})
} else {
- return sendRedirect(event, "", 302)
+ return sendRedirect(event, `/guild?guild_id=${guildID}`, 302)
}
}))