From 8a50959064a0f319355289b082091882dae39c22 Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Thu, 13 Jul 2023 17:11:24 +1200 Subject: [PATCH 1/2] move namespace_prefix into a sub-object --- d2m/actions/register-user.js | 2 +- matrix/read-registration.test.js | 2 +- types.d.ts | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/d2m/actions/register-user.js b/d2m/actions/register-user.js index 1d1eb3d..ef6045a 100644 --- a/d2m/actions/register-user.js +++ b/d2m/actions/register-user.js @@ -20,7 +20,7 @@ const userToMxid = sync.require("../converters/user-to-mxid") async function createSim(user) { // Choose sim name const simName = userToMxid.userToSimName(user) - const localpart = reg.namespace_prefix + simName + const localpart = reg.ooye.namespace_prefix + simName const mxid = "@" + localpart + ":cadence.moe" // Save chosen name in the database forever diff --git a/matrix/read-registration.test.js b/matrix/read-registration.test.js index c5b3ac8..d402cfb 100644 --- a/matrix/read-registration.test.js +++ b/matrix/read-registration.test.js @@ -2,7 +2,7 @@ const {test} = require("supertape") const reg = require("./read-registration") test("reg: has necessary parameters", t => { - const propertiesToCheck = ["sender_localpart", "id", "as_token", "namespace_prefix"] + const propertiesToCheck = ["sender_localpart", "id", "as_token", "ooye"] t.deepEqual( propertiesToCheck.filter(p => p in reg), propertiesToCheck diff --git a/types.d.ts b/types.d.ts index 3ed3975..32aa21f 100644 --- a/types.d.ts +++ b/types.d.ts @@ -4,7 +4,6 @@ export type AppServiceRegistrationConfig = { hs_token: string url: string sender_localpart: string - namespace_prefix: string namespaces: { users: { exclusive: boolean @@ -17,6 +16,9 @@ export type AppServiceRegistrationConfig = { } protocols: [string] rate_limited: boolean + ooye: { + namespace_prefix: string + } } export type WebhookCreds = { From 24bafaf41fe5472d7900bc54f1027bc82d48d64b Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Thu, 13 Jul 2023 17:36:20 +1200 Subject: [PATCH 2/2] large files are now linked instead of uploaded --- d2m/converters/message-to-event.js | 23 +++++++++++++++++++--- d2m/converters/message-to-event.test.js | 25 ++++++++++++++++++++++++ db/ooye.db | Bin 303104 -> 303104 bytes matrix/api.js | 2 +- package-lock.json | 12 +++++++++--- package.json | 1 + types.d.ts | 1 + 7 files changed, 57 insertions(+), 7 deletions(-) diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js index 300d154..49a387a 100644 --- a/d2m/converters/message-to-event.js +++ b/d2m/converters/message-to-event.js @@ -2,6 +2,7 @@ const assert = require("assert").strict const markdown = require("discord-markdown") +const pb = require("prettier-bytes") const DiscordTypes = require("discord-api-types/v10") const passthrough = require("../../passthrough") @@ -184,8 +185,24 @@ async function messageToEvent(message, guild, api) { // Then attachments const attachmentEvents = await Promise.all(message.attachments.map(async attachment => { - // TODO: handle large files differently - link them instead of uploading - if (attachment.content_type?.startsWith("image/") && attachment.width && attachment.height) { + const emoji = + attachment.content_type?.startsWith("image/jp") ? "📸" + : attachment.content_type?.startsWith("image/") ? "🖼️" + : attachment.content_type?.startsWith("video/") ? "🎞️" + : attachment.content_type?.startsWith("text/") ? "📝" + : attachment.content_type?.startsWith("audio/") ? "🎶" + : "📄" + // for large files, always link them instead of uploading so I don't use up all the space in the content repo + if (attachment.size > reg.ooye.max_file_size) { + return { + $type: "m.room.message", + "m.mentions": mentions, + msgtype: "m.text", + body: `${emoji} Uploaded file: ${attachment.url} (${pb(attachment.size)})`, + format: "org.matrix.custom.html", + formatted_body: `${emoji} Uploaded file: ${attachment.filename} (${pb(attachment.size)})` + } + } else if (attachment.content_type?.startsWith("image/") && attachment.width && attachment.height) { return { $type: "m.room.message", "m.mentions": mentions, @@ -206,7 +223,7 @@ async function messageToEvent(message, guild, api) { $type: "m.room.message", "m.mentions": mentions, msgtype: "m.text", - body: "Unsupported attachment:\n" + JSON.stringify(attachment, null, 2) + body: `Unsupported attachment:\n${JSON.stringify(attachment, null, 2)}\n${attachment.url}` } } })) diff --git a/d2m/converters/message-to-event.test.js b/d2m/converters/message-to-event.test.js index 58093ca..17079e5 100644 --- a/d2m/converters/message-to-event.test.js +++ b/d2m/converters/message-to-event.test.js @@ -258,4 +258,29 @@ test("message2event: simple written @mention for matrix user", async t => { }]) }) +test("message2event: very large attachment is linked instead of being uploaded", async t => { + const events = await messageToEvent({ + content: "hey", + attachments: [{ + filename: "hey.jpg", + url: "https://discord.com/404/hey.jpg", + content_type: "application/i-made-it-up", + size: 100e6 + }] + }) + t.deepEqual(events, [{ + $type: "m.room.message", + "m.mentions": {}, + msgtype: "m.text", + body: "hey" + }, { + $type: "m.room.message", + "m.mentions": {}, + msgtype: "m.text", + body: "📄 Uploaded file: https://discord.com/404/hey.jpg (100 MB)", + format: "org.matrix.custom.html", + formatted_body: '📄 Uploaded file: hey.jpg (100 MB)' + }]) +}) + // TODO: read "edits of replies" in the spec diff --git a/db/ooye.db b/db/ooye.db index 8856af2938f5c59d796cdae940a01b59bbfe66d9..a22816bad5426477af017e68fc08af75a4b99f42 100644 GIT binary patch delta 3111 zcmbuBYiwKP8OP6g&#@ibiJgQ9wsz}MK?j@a=Dg>AB-+Hc6FYW%iJdq$D2@|5PHZQ> zBz9uA#qDTdjJC8h@S;f|Qqh9c58IRv9=$;LFirb{%&KZ-g)(V_ZgiSDP17b#+IDE1 z5vftRejb0>sKzi%#4gq}?GNhk ze*HIeztJ7X@fzL!-Cg(z)mc?k^-b~$h>|Bs2MLHvLwlf(aGR1fED$q!mNcd|*L+Gs&y zD1oL~o&`^=Ug>an2%F*B>aKChfZn)4^wmzz1<}m~qED;nMcw%i>fp%U)l~K;K0?6W ztZCLB2FkH-O;(Q6E9P}^xafjyXmV*(6^iChO$zpnKRq z5D(d#;?R(Wf+UJGC2-)_>VMZ%#vKs5fa5axENR!DF&2$IhEH`rGQ4IO(=}>48Whmq zUmIxbTunC~Z6WZF0qPi20{io|6}%~{RQ9osXgn039Z3g<2jt3-EYD}eqP@UI`g3mI zOuvOOd50^p3Gx3yP#nkeB29A?cye7bJ2L!nkHUqJFz>xQ+i* zt=doax^VQ~d3*;N`xm|o_oAa|d=L8BOW@n}-hbl1e2M5(KZZ1?z=J^j*lGvWqt+bu zs(M{V+dlsY{rEN93_3iul|SyP|NBLt4XauFT@1X6T5f|~?fAQ(%Xq=KVBBZ;li>{b z1W~uaBkdrfvugjN{e`xm-P`g>%d7R=Z7{Z>|A>z+I^2^nX(~J8nG4uL6O275nTBlg zw0&{ZopYAMQ-gD*oNQa%(4S>#ju9ZwQ#5#bUAU1%JQzs2LfLehE@$H5N$4KQz@lX4 zUCD&U>Kv8L!D2o>N(cQLlq%#{P7)a?K?yvyjtPh4(dd+Gjw{G>KGW#JOmcoGmd(zT z%Ztf;G#2Nk;+)UIMatq}GmQ)s6gx@+1t9~Du2X`Q1q%n+z)~gXuIsGUkgf}_q@ zI_r0vX8S;dLoSB*rn!E!ZziGfyR9v5qO70nG zbA@7a6~XP0ro)n{)btc12`tOdj3_{g0f*~*{|>HQdZbf(9y6Xbx(t6aAjAH)KeRp5 z*3){m^Y_T8_Pmnus zK+K=Bdov+d){+|vu<>S6IT|YEDT;zb^C11zO4ixn&f-6v+5W3v#rpe ziT)ZrZc~e6B)SS&$k57EVjxr=DYT3?(c7y#1$`G8Ymzrl&FWVln_HldRh#H9SLU0l zyvlAa^R3WNG|^vUN^cs{Tagbd-0dK*lFyM&k{~VE3HWR*=>({R){0eX?+cfM#yOAb>g?k^C4kJ zmI8SI^?X2_K<_jNH`07a^r62d2z%{=IazgQfS_MLkN4IeXdyq;+rsK2E@rytkv)Lqp*r*kfZogv=o99o=qmYiX<)F8Zl z+iG1bSVor*5psR-J>p}Hs_hE?06;56<(A6T-+ytLIDpbc;!3@?o4koPFVJy->_u&P zq6O8I>!}Q9uxD_TeOi(0{u{(`(s%)r>*sC|T{x*^Kt^wUL|9+P+sSqfUczW@LL delta 750 zcmW-eOGs2<6vw~EnS1BnnfdOFln=~FvNz(4snN!n(aBM%OsGv^CZrn+i_%alP+COf zlban0qO=BUl`)IY%w$a5REx>cv=aKm6c-&f)NDizc;2lX}vrw|7m@ z;w3qI&)uuNW+;@C0`kyQomo~}sy?lEBp~0pah)Y>Ic!OTI6DkoPzH>T@zXq)h1mk_ zrsb5Yug&XIL6f>d7D7mjnM=!l^Zir>{vKhzNZeIc!RN)!h`YusFv$l#M)#Rr4g1lY z;{h!(;Vpr>Jch0U@JH&8U#;ZZ$%?5)H<{jO2-J(@e(yjL)-bA=%9~KcGO;3(bI2&A zA-Du3wn3xG@Q82XmZ&z}F|Sz}OSi=JPQ5fzA1kzSCKH>h!7smB`6+h3>Xoc|MQ^Xt z*DHUBl^ao`O*$9pU8Q$8fbB==1|05Z8PfloPW5w_@)Fe^mKAY%hZWxLsxSvWxaHCn zrX2te&nBoZGPiDw8jVJd_#y^z$0FODst2`YZA3e%Wm`X4Z?Mm7kX5l1`b?f!WYttQ zzTk<>{>kRY>>!XBVPlv0Auw^|f{-}Q>s=m4oa`WHh<(gK$%Os1J=eD2D7A%cHMVqp zRwV1)dbtk9s5Y)OYum(NpA|Cuw!)Ua7O22S&v^(Z&+>rWL*b)}kB%g`S%W#8jPovu zGki70;7KS%&vV|1-|Kh@cFu7XZ~o$ijB*Um^4(}UAn?y-kmB(R%!kPWI?S?$5PlIb z4gZAUxB=10" } }, + "node_modules/prettier-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prettier-bytes/-/prettier-bytes-1.0.4.tgz", + "integrity": "sha512-dLbWOa4xBn+qeWeIF60qRoB6Pk2jX5P3DIVgOQyMyvBpu931Q+8dXz8X0snJiFkQdohDDLnZQECjzsAj75hgZQ==" + }, "node_modules/pretty-format": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", @@ -2318,9 +2324,9 @@ } }, "node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, diff --git a/package.json b/package.json index 8604330..951089b 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "matrix-js-sdk": "^24.1.0", "mixin-deep": "^2.0.1", "node-fetch": "^2.6.7", + "prettier-bytes": "^1.0.4", "snowtransfer": "^0.8.0", "try-to-catch": "^3.0.1" }, diff --git a/types.d.ts b/types.d.ts index 32aa21f..eeb4b75 100644 --- a/types.d.ts +++ b/types.d.ts @@ -18,6 +18,7 @@ export type AppServiceRegistrationConfig = { rate_limited: boolean ooye: { namespace_prefix: string + max_file_size: number } }