From 883a05303c6010c78a2700078a63726dbc52b223 Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Sun, 2 Jul 2023 01:41:31 +1200 Subject: [PATCH] don't send "" for attachments without content --- d2m/converters/message-to-event.js | 84 ++++++++++++------------ d2m/converters/message-to-event.test.js | 17 +++++ db/ooye.db | Bin 143360 -> 184320 bytes matrix/api.js | 5 ++ stdin.js | 1 + test/data.js | 39 ++++++++++- 6 files changed, 104 insertions(+), 42 deletions(-) diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js index 549d104..382e970 100644 --- a/d2m/converters/message-to-event.js +++ b/d2m/converters/message-to-event.js @@ -16,48 +16,50 @@ async function messageToEvent(message, guild) { const events = [] // Text content appears first - const body = message.content - const html = markdown.toHTML(body, { - discordCallback: { - user: node => { - const mxid = db.prepare("SELECT mxid FROM sim WHERE discord_id = ?").pluck().get(node.id) - if (mxid) { - return "https://matrix.to/#/" + mxid - } else { - return "@" + node.id - } - }, - channel: node => { - const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(node.id) - if (roomID) { - return "https://matrix.to/#/" + roomID - } else { - return "#" + node.id - } - }, - role: node => - "@&" + node.id, - everyone: node => - "@room", - here: node => - "@here" + if (message.content) { + const body = message.content + const html = markdown.toHTML(body, { + discordCallback: { + user: node => { + const mxid = db.prepare("SELECT mxid FROM sim WHERE discord_id = ?").pluck().get(node.id) + if (mxid) { + return "https://matrix.to/#/" + mxid + } else { + return "@" + node.id + } + }, + channel: node => { + const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(node.id) + if (roomID) { + return "https://matrix.to/#/" + roomID + } else { + return "#" + node.id + } + }, + role: node => + "@&" + node.id, + everyone: node => + "@room", + here: node => + "@here" + } + }, null, null) + const isPlaintext = body === html + if (isPlaintext) { + events.push({ + $type: "m.room.message", + msgtype: "m.text", + body: body + }) + } else { + events.push({ + $type: "m.room.message", + msgtype: "m.text", + body: body, + format: "org.matrix.custom.html", + formatted_body: html + }) } - }, null, null) - const isPlaintext = body === html - if (isPlaintext) { - events.push({ - $type: "m.room.message", - msgtype: "m.text", - body: body - }) - } else { - events.push({ - $type: "m.room.message", - msgtype: "m.text", - body: body, - format: "org.matrix.custom.html", - formatted_body: html - }) } // Then attachments diff --git a/d2m/converters/message-to-event.test.js b/d2m/converters/message-to-event.test.js index c92cd85..c318389 100644 --- a/d2m/converters/message-to-event.test.js +++ b/d2m/converters/message-to-event.test.js @@ -3,6 +3,23 @@ const assert = require("assert") const {messageToEvent} = require("./message-to-event") const data = require("../../test/data") +test("message2event: attachment with no content", async t => { + const events = await messageToEvent(data.message.attachment_no_content, data.guild.general) + t.deepEqual(events, [{ + $type: "m.room.message", + msgtype: "m.image", + url: "mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM", + body: "image.png", + external_url: "https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png", + info: { + mimetype: "image/png", + w: 466, + h: 85, + size: 12919, + }, + }]) +}) + test("message2event: stickers", async t => { const events = await messageToEvent(data.message.sticker, data.guild.general) t.deepEqual(events, [{ diff --git a/db/ooye.db b/db/ooye.db index be5650515d1dd449ecdae32f120a2e170559af4d..c91e41f261aca43181eb223f01ae6028a4dcefcd 100644 GIT binary patch delta 36750 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 NkMGn^m&eaS{{WZ09TWfn delta 2186 zcmaJ?dsr3M5#KrcenS!w@BxSc%H50X)$Wa;KpL&p^fSiTrfNuxpn_t6G^P>1h*)cD z6NBUwj!1ZEQx#GR-s;*K3#3+4OuPy)DZb*f8mx-;D@nvh&qe*C|MZWYZ)VQSo|)O- zZ)a75y6TLyAzFZThGF6>VlzTo%EI2(+*-2~^)pkMBa9g|>)^Jz)SO_d#&Ki2@rE(Q z7@}X`C+Y!xwf-zD)MK^l+F!KwTsYsT&DFkxQn;;Xp8Ab?kXO|zb%8ogWtA?aQ7KX~ z`EI_DTc+spN$8ZD1s*oaB`{8&Do0BHly*sL(0=JTX_RJgiS>K6^+ScLofKr;jh4l-)-{Z!bm^WkPcyVx>k7F1ZM&3Szym-wihb%vgEb_%+G@k^6D1i$lk(UR+ z5}3V%`cVA@5##Wbp%|xh zJ6MUb?pM&Z$AV$_P?U}5Mf>sXCCP{>!*{wI{P^$(5m_Hvc<2ZpKHKBqDI+bs?5KlB zC3^6CF}|I#T$li6Cu4R7!n4{<+?ko?a$%^~#MhpQpeLso^OPGNhPutbsh8qo4Ta(= zfw{T4eaoUq|aYbVVsh@`43KW%%GDylaB$Jv==8rHClrCn*19xLajE|$$wRL$fEWm zv&*=oer#?Dgr^21ysRpMym%ZU1K+LwL@1SJGf#n^hkW={MQl0yB5R=mbs;*)#dDXq z-P|wu5}{DY5Oc+`B2ov`PIVkV)eH){StlO2PXo5&ArX`#Mg$+JUlhL<8k9OEO*qOo z>wknAbtB4=lK7KirT%kdD+O>*pQ*=zU+YWI+O&62C3};brDbatn=Ox!{zWgpB<&S4 zq+dfmUn0#G3M(4DByBnJk(EoSIJOb_@Szhn|K1>!Pv=sI)sX)4U_&*rH=!qR#zOib ztH@h5$WMw(X^MUwEOx!klHhf)N%c93(;FvkGVeV2$kj?@6StZT>%Hb5bxph2JzbvZ^0r`@G*J_&s`QIh4}Ko{&utl^GQ@K zvj2xt4!)7-f#=C`@-VP1$%0vAP7Spw3(u0KJmjSsyBVMMTDZMiApBxV$Mz*?KCbC< z$gZWd#?~V?nOKNslWDcI&Ad&t%|I;`o9k)vAV*gWvhM>@-bvlH*J-c&YN*!HN&5-E zLzz>d0db$*4xzHsZ1yv>6pGBV9HVfclNqM9d2Lv%p9F$?odu zu$ubyVj|86`DcJg-!sWA&IXLwaqMU!&V$SdZL%h+`_(cvgWE2=z+DzLDxC5IH+LR< z2(2v|@M+xmr-8JNfCx7;2mYq9(|MVQMG!-hiXg+yD}vcvMavIec^P~Y%_*NViG<$( z&$c#x%e&81!7n+aP9m%7D1?m~a5#N4lS0>l`)UoOB4mUO9^sGr9XG5FZa`>m350Ke zM5N3nDGe}G4|3`3UN#;59X$`{+?fp!27%f$`y>+61Zg<<)g-sJ2^R63AsuE&WD5+Z zKa?iPJ-i2;q0y?`!I*CteMX*sMt@qX(hPO2a#wj>?x0ayWVfRSvV@oErCxE?;1;Dn zk91QpdW>zx&y4Sjd*~KDukX~$^ci}Lc8zY(x3#&_bZNMjOn2u2wNlMdeJUtHu~(^8 z3Y2t3mj5BHmAA^T%ai3t#aYrhsa0AQ(hw@2QJ_XcP@mEj+&=4L!*JI<4#(2p1 zc{x7d*!A<}G diff --git a/matrix/api.js b/matrix/api.js index 3ec014d..ec85795 100644 --- a/matrix/api.js +++ b/matrix/api.js @@ -60,6 +60,10 @@ async function inviteToRoom(roomID, mxidToInvite, mxid) { }) } +async function leaveRoom(roomID, mxid) { + await mreq.mreq("POST", path(`/client/v3/rooms/${roomID}/leave`, mxid), {}) +} + /** * @param {string} roomID * @returns {Promise} @@ -108,6 +112,7 @@ module.exports.register = register module.exports.createRoom = createRoom module.exports.joinRoom = joinRoom module.exports.inviteToRoom = inviteToRoom +module.exports.leaveRoom = leaveRoom module.exports.getAllState = getAllState module.exports.sendState = sendState module.exports.sendEvent = sendEvent diff --git a/stdin.js b/stdin.js index 99345ab..1a5b8d1 100644 --- a/stdin.js +++ b/stdin.js @@ -11,6 +11,7 @@ const createRoom = sync.require("./d2m/actions/create-room") const registerUser = sync.require("./d2m/actions/register-user") const mreq = sync.require("./matrix/mreq") const api = sync.require("./matrix/api") +const sendMessage = sync.require("./m2d/actions/send-message") const guildID = "112760669178241024" const extraContext = {} diff --git a/test/data.js b/test/data.js index 85b3cd4..5efea36 100644 --- a/test/data.js +++ b/test/data.js @@ -140,6 +140,43 @@ module.exports = { }, message: { // Display order is text content, attachments, then stickers + attachment_no_content: { + id: "1124628646670389348", + type: 0, + content: "", + channel_id: "497161332244742154", + author: { + id: "320067006521147393", + username: "papiophidian", + global_name: "PapiOphidian", + avatar: "fb2b4535f7a108619e3edae12fcb16c5", + discriminator: "0", + public_flags: 4194880, + avatar_decoration: null + }, + attachments: [ + { + id: "1124628646431297546", + filename: "image.png", + size: 12919, + url: "https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png", + proxy_url: "https://media.discordapp.net/attachments/497161332244742154/1124628646431297546/image.png", + width: 466, + height: 85, + content_type: "image/png" + } + ], + embeds: [], + mentions: [], + mention_roles: [], + pinned: false, + mention_everyone: false, + tts: false, + timestamp: "2023-07-01T09:12:43.956000+00:00", + edited_timestamp: null, + flags: 0, + components: [] + }, sticker: { id: "1106366167788044450", type: 0, @@ -180,6 +217,6 @@ module.exports = { format_type: 1, name: "pomu puff" }] - } + } } }