diff --git a/db/data-for-test.sql b/db/data-for-test.sql new file mode 100644 index 0000000..fa04562 --- /dev/null +++ b/db/data-for-test.sql @@ -0,0 +1,94 @@ +BEGIN TRANSACTION; +CREATE TABLE IF NOT EXISTS "guild_space" ( + "guild_id" TEXT NOT NULL UNIQUE, + "space_id" TEXT NOT NULL UNIQUE, + PRIMARY KEY("guild_id") +); +CREATE TABLE IF NOT EXISTS "file" ( + "discord_url" TEXT NOT NULL UNIQUE, + "mxc_url" TEXT NOT NULL UNIQUE, + PRIMARY KEY("discord_url") +); +CREATE TABLE IF NOT EXISTS "sim" ( + "discord_id" TEXT NOT NULL UNIQUE, + "sim_name" TEXT NOT NULL UNIQUE, + "localpart" TEXT NOT NULL UNIQUE, + "mxid" TEXT NOT NULL UNIQUE, + PRIMARY KEY("discord_id") +); +CREATE TABLE IF NOT EXISTS "sim_member" ( + "mxid" TEXT NOT NULL, + "room_id" TEXT NOT NULL, + "profile_event_content_hash" BLOB, + PRIMARY KEY("mxid","room_id") +); +CREATE TABLE IF NOT EXISTS "webhook" ( + "channel_id" TEXT NOT NULL UNIQUE, + "webhook_id" TEXT NOT NULL UNIQUE, + "webhook_token" TEXT NOT NULL, + PRIMARY KEY("channel_id") +); +CREATE TABLE IF NOT EXISTS "channel_room" ( + "channel_id" TEXT NOT NULL UNIQUE, + "room_id" TEXT NOT NULL UNIQUE, + "name" TEXT, + "nick" TEXT, + PRIMARY KEY("channel_id") +); +CREATE TABLE IF NOT EXISTS "event_message" ( + "event_id" TEXT NOT NULL, + "event_type" TEXT, + "event_subtype" TEXT, + "message_id" TEXT NOT NULL, + "channel_id" TEXT, + "part" INTEGER NOT NULL, + "source" INTEGER NOT NULL, + PRIMARY KEY("event_id","message_id") +); +COMMIT; + + + +BEGIN TRANSACTION; + +INSERT INTO guild_space (guild_id, space_id) VALUES +('112760669178241024', '!jjWAGMeQdNrVZSSfvz:cadence.moe'); + +INSERT INTO channel_room (channel_id, room_id, name, nick) VALUES +('112760669178241024', '!kLRqKKUQXcibIMtOpl:cadence.moe', 'heave', 'main'), +('497161350934560778', '!edUxjVdzgUvXDUIQCK:cadence.moe', 'amanda-spam', NULL), +('160197704226439168', '!uCtjHhfGlYbVnPVlkG:cadence.moe', 'the-stanley-parable-channel', 'bots'); + +INSERT INTO sim (discord_id, sim_name, localpart, mxid) VALUES +('0', 'bot', '_ooye_bot', '@_ooye_bot:cadence.moe'), +('820865262526005258', 'crunch_god', '_ooye_crunch_god', '@_ooye_crunch_god:cadence.moe'), +('771520384671416320', 'bojack_horseman', '_ooye_bojack_horseman', '@_ooye_bojack_horseman:cadence.moe'), +('112890272819507200', '.wing.', '_ooye_.wing.', '@_ooye_.wing.:cadence.moe'), +('114147806469554185', 'extremity', '_ooye_extremity', '@_ooye_extremity:cadence.moe'); + +INSERT INTO sim_member (mxid, room_id, profile_event_content_hash) VALUES +('@_ooye_bojack_horseman:cadence.moe', '!uCtjHhfGlYbVnPVlkG:cadence.moe', NULL); + +INSERT INTO event_message (event_id, event_type, event_subtype, message_id, channel_id, part, source) VALUES +('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', '112760669178241024', 0, 1), +('$Ij3qo7NxMA4VPexlAiIx2CB9JbsiGhJeyt-2OvkAUe4', 'm.room.message', 'm.text', '1128118177155526666', '112760669178241024', 0, 0), +('$zXSlyI78DQqQwwfPUSzZ1b-nXzbUrCDljJgnGDdoI10', 'm.room.message', 'm.text', '1141619794500649020', '497161350934560778', 0, 1), +('$fdD9OZ55xg3EAsfvLZza5tMhtjUO91Wg3Otuo96TplY', 'm.room.message', 'm.text', '1141206225632112650', '160197704226439168', 0, 1), +('$mtR8cJqM4fKno1bVsm8F4wUVqSntt2sq6jav1lyavuA', 'm.room.message', 'm.text', '1141501302736695316', '112760669178241024', 0, 1), +('$51f4yqHinwnSbPEQ9dCgoyy4qiIJSX0QYYVUnvwyTCI', 'm.room.message', 'm.image', '1141501302736695316', '112760669178241024', 1, 1), +('$51f4yqHinwnSbPEQ9dCgoyy4qiIJSX0QYYVUnvwyTCJ', 'm.room.message', 'm.image', '1141501302736695317', '112760669178241024', 0, 1), +('$vgTKOR5ZTYNMKaS7XvgEIDaOWZtVCEyzLLi5Pc5Gz4M', 'm.room.message', 'm.text', '1128084851279536279', '112760669178241024', 0, 1), +('$YUJFa5j0ZJe7PUvD2DykRt9g51RoadUEYmuJLdSEbJ0', 'm.room.message', 'm.image', '1128084851279536279', '112760669178241024', 1, 1), +('$oLyUTyZ_7e_SUzGNWZKz880ll9amLZvXGbArJCKai2Q', 'm.room.message', 'm.text', '1128084748338741392', '112760669178241024', 0, 1); + +INSERT INTO file (discord_url, mxc_url) VALUES +('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'), +('https://cdn.discordapp.com/attachments/122155380120748034/1106366167486038016/image.png', 'mxc://cadence.moe/ZDCNYnkPszxGKgObUIFmvjus'), +('https://cdn.discordapp.com/stickers/1106323941183717586.png', 'mxc://cadence.moe/UuUaLwXhkxFRwwWCXipDlBHn'), +('https://cdn.discordapp.com/attachments/112760669178241024/1128084747910918195/skull.webp', 'mxc://cadence.moe/sDxWmDErBhYBxtDcJQgBETes'), +('https://cdn.discordapp.com/attachments/112760669178241024/1141501302497615912/piper_2.png', 'mxc://cadence.moe/KQYdXKRcHWjDYDLPkTOOWOjA'), +('https://cdn.discordapp.com/attachments/112760669178241024/1128084851023675515/RDT_20230704_0936184915846675925224905.jpg', 'mxc://cadence.moe/WlAbFSiNRIHPDEwKdyPeGywa'), +('https://cdn.discordapp.com/guilds/112760669178241024/users/134826546694193153/avatars/38dd359aa12bcd52dd3164126c587f8c.png?size=1024', 'mxc://cadence.moe/rfemHmAtcprjLEiPiEuzPhpl'), +('https://cdn.discordapp.com/icons/112760669178241024/a_f83622e09ead74f0c5c527fe241f8f8c.png?size=1024', 'mxc://cadence.moe/zKXGZhmImMHuGQZWJEFKJbsF'); + +COMMIT; diff --git a/db/ooye.sql b/db/ooye.sql deleted file mode 100644 index 23c5aee..0000000 --- a/db/ooye.sql +++ /dev/null @@ -1,120 +0,0 @@ -PRAGMA foreign_keys=OFF; -BEGIN TRANSACTION; -CREATE TABLE IF NOT EXISTS "guild_space" ( - "guild_id" TEXT NOT NULL UNIQUE, - "space_id" TEXT NOT NULL UNIQUE, - PRIMARY KEY("guild_id") -); -INSERT INTO guild_space VALUES('112760669178241024','!jjWAGMeQdNrVZSSfvz:cadence.moe'); -CREATE TABLE IF NOT EXISTS "channel_room" ( - "channel_id" TEXT NOT NULL UNIQUE, - "room_id" TEXT NOT NULL UNIQUE, - PRIMARY KEY("channel_id") -); -INSERT INTO channel_room VALUES('395073525641117699','!HfUDHZheYriEncfKpJ:cadence.moe'); -INSERT INTO channel_room VALUES('808564048294838284','!uMHZzVXeXPrVehmPIm:cadence.moe'); -INSERT INTO channel_room VALUES('694935757160185907','!qAAlGzsrXrLKqAEHas:cadence.moe'); -INSERT INTO channel_room VALUES('739017679796436992','!cGIULAxjVJReFZosbK:cadence.moe'); -INSERT INTO channel_room VALUES('441910023501774858','!JrwSgmaBchooVnCqcF:cadence.moe'); -INSERT INTO channel_room VALUES('841417575120371722','!mwzCPYqPHAHOdeKPMi:cadence.moe'); -INSERT INTO channel_room VALUES('488516474735034389','!dqvFUrlHREgNEWmkua:cadence.moe'); -INSERT INTO channel_room VALUES('920170211330650152','!sTfMRJPdoqTNzMXvbn:cadence.moe'); -INSERT INTO channel_room VALUES('203751294157062145','!repkBsIWwFyOOvudGt:cadence.moe'); -INSERT INTO channel_room VALUES('134477188899536898','!uUzBXdWQblkxNmThLz:cadence.moe'); -INSERT INTO channel_room VALUES('266767590641238027','!IzOgQiDnusFQiwymaL:cadence.moe'); -INSERT INTO channel_room VALUES('834530844743434289','!kczmYjDXhhTVvCRHGE:cadence.moe'); -INSERT INTO channel_room VALUES('265998010092093441','!zGfmedYghbfnFQJXjU:cadence.moe'); -INSERT INTO channel_room VALUES('339294043274215424','!fNDEjktDGIWAPlMWYy:cadence.moe'); -INSERT INTO channel_room VALUES('398661111869865985','!gAnxDqVCDfudmiuwnU:cadence.moe'); -INSERT INTO channel_room VALUES('814300638237163550','!GTkemJlzNRPcbXIjHh:cadence.moe'); -INSERT INTO channel_room VALUES('112760669178241024','!kLRqKKUQXcibIMtOpl:cadence.moe'); -INSERT INTO channel_room VALUES('604901695255740426','!gsMllRhFEUVaVAiJQR:cadence.moe'); -INSERT INTO channel_room VALUES('176333891320283136','!pzHnyQchkiIJzfjYlR:cadence.moe'); -INSERT INTO channel_room VALUES('350076239257796620','!MkOZEeLWrKJLpYjCig:cadence.moe'); -INSERT INTO channel_room VALUES('160197704226439168','!uCtjHhfGlYbVnPVlkG:cadence.moe'); -INSERT INTO channel_room VALUES('204427407539568640','!aaBHsbHThhtFBjJnjs:cadence.moe'); -INSERT INTO channel_room VALUES('288058913985789953','!TBwEJEXTvbvDSYzyJq:cadence.moe'); -INSERT INTO channel_room VALUES('622903842282930198','!RCRvXmNpFSjoFNEmvh:cadence.moe'); -INSERT INTO channel_room VALUES('421368191567265794','!cKgTdFmarjJnGDipUE:cadence.moe'); -INSERT INTO channel_room VALUES('334553412698112002','!EacGxEcLvxmrSPZoOA:cadence.moe'); -INSERT INTO channel_room VALUES('395750520435769347','!btmhtSzFqMYqTzNGmq:cadence.moe'); -INSERT INTO channel_room VALUES('196455508146651136','!QGSDlxmJjIGzqmhngS:cadence.moe'); -INSERT INTO channel_room VALUES('1089120827926134854','!QlsPSkhOsplXOgvKzG:cadence.moe'); -INSERT INTO channel_room VALUES('655216173696286746','!prNIHWeXgudqChdvTJ:cadence.moe'); -INSERT INTO channel_room VALUES('171083630985216001','!kEWSvtyEhPFCviOHnA:cadence.moe'); -INSERT INTO channel_room VALUES('530220226109898752','!bdNsNYyBQyEdFmeoZd:cadence.moe'); -INSERT INTO channel_room VALUES('1075095715396735056','!gPfVCpFUnmoEDVAPph:cadence.moe'); -INSERT INTO channel_room VALUES('392141322863116319','!ErHIqXEnsVdvHbFAUO:cadence.moe'); -INSERT INTO channel_room VALUES('189898393705906177','!UAXXOjEgIYtexsvzZC:cadence.moe'); -INSERT INTO channel_room VALUES('134077753485033472','!qGpHzEREMSFEKDjzdB:cadence.moe'); -INSERT INTO channel_room VALUES('696180458417029170','!thbRkzupoPmsxCiWyv:cadence.moe'); -INSERT INTO channel_room VALUES('191487489943404544','!nOfpEIzWgaLnRHFoAF:cadence.moe'); -INSERT INTO channel_room VALUES('121380024812044288','!QKqjAQJmXwnevnKsGh:cadence.moe'); -INSERT INTO channel_room VALUES('687028734322147344','!fGgIymcYWOqjbSRUdV:cadence.moe'); -INSERT INTO channel_room VALUES('330164254969823233','!vYZSKYOSArwqWyaJZB:cadence.moe'); -INSERT INTO channel_room VALUES('872258827846832139','!INBHUKdIiCMxpizitC:cadence.moe'); -INSERT INTO channel_room VALUES('112767097234305024','!bXgJfZZqdFlmmAeYSj:cadence.moe'); -INSERT INTO channel_room VALUES('249968792346558465','!CRoJhPJAarFkoOVfUg:cadence.moe'); -INSERT INTO channel_room VALUES('130176644093575168','!tgQCmRkBndtQcbhqPX:cadence.moe'); -INSERT INTO channel_room VALUES('312054608535224320','!oDNMTEymekxHTizhEC:cadence.moe'); -INSERT INTO channel_room VALUES('1099031887500034088','!bexkxPoPBmSuUkvACP:cadence.moe'); -INSERT INTO channel_room VALUES('412754166885122048','!ASqMFolSWJsJWAIJqB:cadence.moe'); -INSERT INTO channel_room VALUES('700941324810977333','!gLvyxfpmPetCqtOCka:cadence.moe'); -INSERT INTO channel_room VALUES('361364140448808960','!yyzLRrLSmYGuNGkbup:cadence.moe'); -INSERT INTO channel_room VALUES('132423337019310081','!QcGgaDKBEDvSnFpDUT:cadence.moe'); -INSERT INTO channel_room VALUES('698892233398812742','!ASiHdjKOmjyQCmhWEJ:cadence.moe'); -INSERT INTO channel_room VALUES('591183598166736908','!NMmIckmkngIVeTLmWM:cadence.moe'); -INSERT INTO channel_room VALUES('288882953314893825','!hNBIHkfRMrryuWfPrb:cadence.moe'); -INSERT INTO channel_room VALUES('265617582126661642','!YaJsBSpCOtaccZShBy:cadence.moe'); -INSERT INTO channel_room VALUES('113414562417496064','!UHfjZYvdnkjqwvOylF:cadence.moe'); -INSERT INTO channel_room VALUES('373335332436967424','!cFjDyGrtFmHymyLfRE:cadence.moe'); -INSERT INTO channel_room VALUES('331390333810376704','!kdALuKGeNSkYDgRhIZ:cadence.moe'); -INSERT INTO channel_room VALUES('768264034327724132','!FEhofHtvWOSNCuvUxW:cadence.moe'); -INSERT INTO channel_room VALUES('359903425074561024','!IGixYyKLdvmnAzzOGB:cadence.moe'); -INSERT INTO channel_room VALUES('122155380120748034','!iMLtMMlHpWNyAnadZu:cadence.moe'); -INSERT INTO channel_room VALUES('325891921463738369','!IsJKZmawitkFurcjwY:cadence.moe'); -INSERT INTO channel_room VALUES('805261291908104252','!PAGMqppQIkLaNRwkpN:cadence.moe'); -INSERT INTO channel_room VALUES('360567146243293194','!RbrindSuOlbAHAJRFq:cadence.moe'); -INSERT INTO channel_room VALUES('295789411856154624','!RbLRKOjmaEafDtOAAJ:cadence.moe'); -INSERT INTO channel_room VALUES('279985883560804353','!WuYmXisuwEgrxpSkdW:cadence.moe'); -INSERT INTO channel_room VALUES('778183052521111592','!hsALhxajLcTddkKcUE:cadence.moe'); -INSERT INTO channel_room VALUES('360564656265232395','!EZmeznyjKwAcBHbUfX:cadence.moe'); -INSERT INTO channel_room VALUES('802612899990339645','!NVsoZfMPBtLCzlUQAb:cadence.moe'); -INSERT INTO channel_room VALUES('360564868224647168','!YnNokCprKPHliWjKTy:cadence.moe'); -INSERT INTO channel_room VALUES('920171008047079425','!IgtetQZJffJcCQjMqG:cadence.moe'); -INSERT INTO channel_room VALUES('494913643448631296','!WZdAlxVcydGBNdTuoL:cadence.moe'); -INSERT INTO channel_room VALUES('360565596133523459','!OPkSbsYXFqZkRVCIZM:cadence.moe'); -INSERT INTO channel_room VALUES('360567400254537729','!BoXSlmwqtovnOCybXt:cadence.moe'); -INSERT INTO channel_room VALUES('1036840786093953084','!SMEmWBWGgRXeVyiwHN:cadence.moe'); -INSERT INTO channel_room VALUES('360565147854438412','!vwVOQfBJDkaHdiVLUF:cadence.moe'); -INSERT INTO channel_room VALUES('802420775860568074','!QsljgtSqHOtGwMYuIc:cadence.moe'); -CREATE TABLE IF NOT EXISTS "file" ( - "discord_url" TEXT NOT NULL UNIQUE, - "mxc_url" TEXT NOT NULL UNIQUE, - PRIMARY KEY("discord_url") -); -INSERT INTO file VALUES('https://cdn.discordapp.com/icons/112760669178241024/a_f83622e09ead74f0c5c527fe241f8f8c?size=1024','mxc://cadence.moe/sZtPwbfOIsvfSoWCWPrGnzql'); -INSERT INTO file VALUES('https://cdn.discordapp.com/icons/112760669178241024/a_f83622e09ead74f0c5c527fe241f8f8c.png?size=1024','mxc://cadence.moe/zKXGZhmImMHuGQZWJEFKJbsF'); -CREATE TABLE IF NOT EXISTS "sim_member" ( - "mxid" TEXT NOT NULL, - "room_id" TEXT NOT NULL, - PRIMARY KEY("mxid","room_id") -); -INSERT INTO sim_member VALUES('@_ooye_huck:cadence.moe','!VwVlIAjOjejUpDhlbA:cadence.moe'); -INSERT INTO sim_member VALUES('@_ooye_bojack_horseman:cadence.moe','!VwVlIAjOjejUpDhlbA:cadence.moe'); -INSERT INTO sim_member VALUES('@_ooye_botrac4r:cadence.moe','!VwVlIAjOjejUpDhlbA:cadence.moe'); -INSERT INTO sim_member VALUES('@_ooye_crunch_god:cadence.moe','!VwVlIAjOjejUpDhlbA:cadence.moe'); -CREATE TABLE IF NOT EXISTS "sim" ( - "discord_id" TEXT NOT NULL UNIQUE, - "sim_name" TEXT NOT NULL UNIQUE, - "localpart" TEXT NOT NULL UNIQUE, - "mxid" TEXT NOT NULL UNIQUE, - PRIMARY KEY("discord_id") -); -INSERT INTO sim VALUES('0','bot','_ooye_bot','@_ooye_bot:cadence.moe'); -INSERT INTO sim VALUES('113340068197859328','cookie','_ooye_cookie','@_ooye_cookie:cadence.moe'); -INSERT INTO sim VALUES('820865262526005258','crunch_god','_ooye_crunch_god','@_ooye_crunch_god:cadence.moe'); -INSERT INTO sim VALUES('142843483923677184','huck','_ooye_huck','@_ooye_huck:cadence.moe'); -INSERT INTO sim VALUES('771520384671416320','bojack_horseman','_ooye_bojack_horseman','@_ooye_bojack_horseman:cadence.moe'); -INSERT INTO sim VALUES('353703396483661824','botrac4r','_ooye_botrac4r','@_ooye_botrac4r:cadence.moe'); -COMMIT; diff --git a/matrix/file.js b/matrix/file.js index 64cd492..965ec1c 100644 --- a/matrix/file.js +++ b/matrix/file.js @@ -40,15 +40,8 @@ async function uploadDiscordFileToMxc(path) { // Download from Discord const promise = fetch(url, {}).then(/** @param {import("node-fetch").Response} res */ async res => { - const body = res.body - // Upload to Matrix - /** @type {import("../types").R.FileUploaded} */ - const root = await mreq.mreq("POST", "/media/v3/upload", body, { - headers: { - "Content-Type": res.headers.get("content-type") - } - }) + const root = await module.exports._actuallyUploadDiscordFileToMxc(url, res) // Store relationship in database db.prepare("INSERT INTO file (discord_url, mxc_url) VALUES (?, ?)").run(url, root.content_uri) @@ -61,6 +54,17 @@ async function uploadDiscordFileToMxc(path) { return promise } +async function _actuallyUploadDiscordFileToMxc(url, res) { + const body = res.body + /** @type {import("../types").R.FileUploaded} */ + const root = await mreq.mreq("POST", "/media/v3/upload", body, { + headers: { + "Content-Type": res.headers.get("content-type") + } + }) + return root +} + function guildIcon(guild) { return `/icons/${guild.id}/${guild.icon}.png?size=${IMAGE_SIZE}` } @@ -102,3 +106,4 @@ module.exports.emoji = emoji module.exports.stickerFormat = stickerFormat module.exports.sticker = sticker module.exports.uploadDiscordFileToMxc = uploadDiscordFileToMxc +module.exports._actuallyUploadDiscordFileToMxc = _actuallyUploadDiscordFileToMxc diff --git a/scripts/events.db b/scripts/events.db index 045e147..86957d8 100644 Binary files a/scripts/events.db and b/scripts/events.db differ diff --git a/test/test.js b/test/test.js index c6ee064..31ab099 100644 --- a/test/test.js +++ b/test/test.js @@ -1,16 +1,22 @@ // @ts-check +const fs = require("fs") const sqlite = require("better-sqlite3") const HeatSync = require("heatsync") const config = require("../config") const passthrough = require("../passthrough") -const db = new sqlite("db/ooye.db") +const db = new sqlite(":memory:") + +db.exec(fs.readFileSync("db/data-for-test.sql", "utf8")) const sync = new HeatSync({watchFS: false}) Object.assign(passthrough, { config, sync, db }) +const file = sync.require("../matrix/file") +file._actuallyUploadDiscordFileToMxc = function(url, res) { throw new Error(`Not allowed to upload files during testing.\nURL: ${url}`) } + require("../matrix/kstate.test") require("../matrix/api.test") require("../matrix/read-registration.test")