diff --git a/m2d/converters/event-to-message.js b/m2d/converters/event-to-message.js
index 92e5ca4..9c221a5 100644
--- a/m2d/converters/event-to-message.js
+++ b/m2d/converters/event-to-message.js
@@ -57,6 +57,16 @@ turndownService.addRule("blockquote", {
}
})
+turndownService.addRule("spoiler", {
+ filter: function (node, options) {
+ return node.hasAttribute("data-mx-spoiler")
+ },
+
+ replacement: function (content, node) {
+ return "||" + content + "||"
+ }
+})
+
turndownService.addRule("inlineLink", {
filter: function (node, options) {
return (
diff --git a/m2d/converters/event-to-message.test.js b/m2d/converters/event-to-message.test.js
index d071f8d..41bb2e7 100644
--- a/m2d/converters/event-to-message.test.js
+++ b/m2d/converters/event-to-message.test.js
@@ -120,6 +120,36 @@ test("event2message: basic html is converted to markdown", async t => {
)
})
+test("event2message: spoilers work", async t => {
+ t.deepEqual(
+ await eventToMessage({
+ content: {
+ msgtype: "m.text",
+ body: "wrong body",
+ format: "org.matrix.custom.html",
+ formatted_body: `this is a test of spoilers`
+ },
+ event_id: "$g07oYSZFWBkxohNEfywldwgcWj1hbhDzQ1sBAKvqOOU",
+ origin_server_ts: 1688301929913,
+ room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe",
+ sender: "@cadence:cadence.moe",
+ type: "m.room.message",
+ unsigned: {
+ age: 405299
+ }
+ }),
+ {
+ messagesToDelete: [],
+ messagesToEdit: [],
+ messagesToSend: [{
+ username: "cadence [they]",
+ content: "this **is** a ||_test_|| of ||spoilers||",
+ avatar_url: undefined
+ }]
+ }
+ )
+})
+
test("event2message: markdown syntax is escaped", async t => {
t.deepEqual(
await eventToMessage({
diff --git a/notes.md b/notes.md
index aa9066d..e701760 100644
--- a/notes.md
+++ b/notes.md
@@ -3,13 +3,12 @@
## Known issues
- m->d attachments do not work
-- m->d edits do not work
-- m->d spoilers do not work
- d->m support the rest of the attachments by reading the matrix spec instead of the current approach of whitelisting mime types
- d->m emojis do not work at all (inline chat, single emoji size, reactions, bridged state)
- m->d code blocks have slightly too much spacing
- m->d some reactions don't work because of the variation selector
-- <--> check whether I implemented deletions
+- d->m check whether I implemented deletions
+- m->d deletions
- rooms will be set up even if the bridge does not have permission for them, then break when it restarts and tries to reach messages
- test private threads as part of this
- solution part 1: calculate the permissions to see if the bot should be able to do stuff