From 78144279c579f722d940c2fd2478bccb4ff35f89 Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Mon, 3 Jul 2023 01:06:05 +1200 Subject: [PATCH] preparing for m2d --- db/ooye.db | Bin 184320 -> 184320 bytes m2d/actions/send-message.js | 2 +- m2d/converters/event-to-message.js | 30 ++++++++++++++++++++++ m2d/converters/event-to-message.test.js | 32 ++++++++++++++++++++++++ m2d/event-dispatcher.js | 4 +++ test/test.js | 1 + types.d.ts | 12 +++++++++ 7 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 m2d/converters/event-to-message.js create mode 100644 m2d/converters/event-to-message.test.js diff --git a/db/ooye.db b/db/ooye.db index c91e41f261aca43181eb223f01ae6028a4dcefcd..e0b3a33f48a915e3e722489bdb7f33be174e7023 100644 GIT binary patch delta 1520 zcmb8vUuauZ90%~8n?E-ilUr92M(Y@^+pM;7?>+bA-V-RSy=l@kNt-`SNHQ@^(%Yo@ zpCwJwh-Nb&_#jpSy@GD6s9l{3t9`gS1@%Stq##UTOq|eB#=t)>K8O#dw;jGzv`^>d z{63uDkMH@Nzid2z*|^dVZoV-ff}5Lj?^2IAdT#en-%uB+oQCO`dtcdF?G*tyyLIc) z=KwQ;swq#}7YT+%M0+PCpOki1%cx4nlMF7V(}{+!kl>3JnNlOkM*>OPmI)n`mrO`R8aM1VVA?VM5-`OhsdqkR4` zm>dD4vhEI8GLTi{b>pkxJLTm&U_%2ua_I&kDJ$FH9>L7Ai*+FrspsR#V7eIzglb|g zmz&1o%L$s5E#Rs*8*p zWh!A84oJyF3`e6d%N3ILY9PJfZG^*_EMIX1!Bw@QnJ7cn9+7;xsKk1k;$$dQ%uhK3 zdB)@R=UKSioSzO?&Ov_zkAW*{NjdD|ePKzAPfm~7^7(+1_5~{oB1p9N>;q?f@g7x zkEO1`h!-42x(^zzFde3Q%AWBesWCvdj_A@GTh+OPHMqv5ws~DbxkQLictIGe$N^3tX`wZlp>BDLLbTc*$OIAWNcJsAFGg5sJ~eHyiWqDHfjT5;W#82YIpml&bto23iM& zV4tzj3_=XXw1AMfHS%_(5;aE;=pHh{77F_E;H{1gTK@M_Vie|9b zKB+Q?_$Ln(hJiE>S&S?eu|24jlzX2L{iJ!wVA%aV7pW|T4F;w6OX3f5FW`rmK6qcT J-XOjv{|5P{)^-2@ delta 353 zcmV-n0iOPVpbLPY3y>QD$dMdF0m!jnqz?*40Nel%&JUdrY?BZWh5`dIvz8D;0RfG( z+7VmhWC9Zl4m1Vn01wX(o)2sfIu8lA6mSBg z1(C2c1Th0;0+(UC0xY)~b^_}e5I_T%00*iEc?0|hM+X)L<+m1)0#E~yur#-rlLBlU z0~!eAmk00xHM0>gs0g>@xB?&t3@8XX01wX(oeygdIkytP0`>=yur#+i$O6U(%mj8* diff --git a/m2d/actions/send-message.js b/m2d/actions/send-message.js index 9c61107..3505b60 100644 --- a/m2d/actions/send-message.js +++ b/m2d/actions/send-message.js @@ -10,7 +10,7 @@ const registerWebhook = sync.require("./register-webhook") /** * @param {string} channelID - * @param {DiscordTypes.RESTPostAPIWebhookWithTokenJSONBody & {name: string, file: Buffer}[]} data + * @param {DiscordTypes.RESTPostAPIWebhookWithTokenJSONBody & {files?: {name: string, file: Buffer}[]}[]} data */ // param {DiscordTypes.RESTPostAPIWebhookWithTokenQuery & {wait: true, disableEveryone?: boolean}} options async function sendMessage(channelID, data) { diff --git a/m2d/converters/event-to-message.js b/m2d/converters/event-to-message.js new file mode 100644 index 0000000..f48b5da --- /dev/null +++ b/m2d/converters/event-to-message.js @@ -0,0 +1,30 @@ +// @ts-check + +const assert = require("assert").strict +const DiscordTypes = require("discord-api-types/v10") +const markdown = require("discord-markdown") + +const passthrough = require("../../passthrough") +const { sync, db, discord } = passthrough +/** @type {import("../../matrix/file")} */ +const file = sync.require("../../matrix/file") + +/** + * @param {import("../../types").Event.Outer} event + */ +function eventToMessage(event) { + /** @type {(DiscordTypes.RESTPostAPIWebhookWithTokenJSONBody & {files?: {name: string, file: Buffer}[]})[]} */ + const messages = [] + + if (event.content.msgtype === "m.text") { + messages.push({ + content: event.content.body, + username: event.sender.replace(/^@/, ""), + avatar_url: undefined, // TODO: provide the URL to the avatar from the homeserver's content repo + }) + } + + return messages +} + +module.exports.eventToMessage = eventToMessage diff --git a/m2d/converters/event-to-message.test.js b/m2d/converters/event-to-message.test.js new file mode 100644 index 0000000..a41beef --- /dev/null +++ b/m2d/converters/event-to-message.test.js @@ -0,0 +1,32 @@ +// @ts-check + +const {test} = require("supertape") +const assert = require("assert") +const {eventToMessage} = require("./event-to-message") +const data = require("../../test/data") + +test("event2message: janky test", t => { + t.deepEqual( + eventToMessage({ + age: 405299, + content: { + body: "test", + msgtype: "m.text" + }, + event_id: "$g07oYSZFWBkxohNEfywldwgcWj1hbhDzQ1sBAKvqOOU", + origin_server_ts: 1688301929913, + room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe", + sender: "@cadence:cadence.moe", + type: "m.room.message", + unsigned: { + age: 405299 + }, + user_id: "@cadence:cadence.moe" + }), + [{ + username: "cadence:cadence.moe", + content: "test", + avatar_url: undefined + }] + ) +}) diff --git a/m2d/event-dispatcher.js b/m2d/event-dispatcher.js index 136aae0..789d9ed 100644 --- a/m2d/event-dispatcher.js +++ b/m2d/event-dispatcher.js @@ -1,3 +1,5 @@ +// @ts-check + const assert = require("assert").strict const {sync, as} = require("../passthrough") @@ -5,4 +7,6 @@ const {sync, as} = require("../passthrough") sync.addTemporaryListener(as, "type:m.room.message", event => { console.log(event) + // TODO: filter out events that were bridged discord messages (i.e. sent by OOYE) + // TODO: call sendMessage }) diff --git a/test/test.js b/test/test.js index 5f06ae4..f2f0912 100644 --- a/test/test.js +++ b/test/test.js @@ -18,3 +18,4 @@ require("../d2m/converters/message-to-event.test") require("../d2m/actions/create-room.test") require("../d2m/converters/user-to-mxid.test") require("../d2m/actions/register-user.test") +require("../m2d/converters/event-to-message.test") diff --git a/types.d.ts b/types.d.ts index aaa8db1..2181793 100644 --- a/types.d.ts +++ b/types.d.ts @@ -15,6 +15,18 @@ export type WebhookCreds = { } namespace Event { + export type Outer = { + type: string + room_id: string + sender: string + content: T + origin_server_ts: number + unsigned: any + event_id: string + user_id: string + age: number + } + export type BaseStateEvent = { type: string room_id: string