forked from cadence/out-of-your-element
Emergency sync #11
3 changed files with 51 additions and 20 deletions
|
|
@ -770,7 +770,18 @@ async function messageToEvent(message, guild, options = {}, di) {
|
||||||
// Then scheduled events
|
// Then scheduled events
|
||||||
if (message.content && di?.snow) {
|
if (message.content && di?.snow) {
|
||||||
for (const match of [...message.content.matchAll(/discord\.gg\/([A-Za-z0-9]+)\?event=([0-9]{18,})/g)]) { // snowflake has minimum 18 because the events feature is at least that old
|
for (const match of [...message.content.matchAll(/discord\.gg\/([A-Za-z0-9]+)\?event=([0-9]{18,})/g)]) { // snowflake has minimum 18 because the events feature is at least that old
|
||||||
const invite = await di.snow.invite.getInvite(match[1], {guild_scheduled_event_id: match[2]})
|
let invite
|
||||||
|
try {
|
||||||
|
invite = await di.snow.invite.getInvite(match[1], {guild_scheduled_event_id: match[2]})
|
||||||
|
} catch (e) {
|
||||||
|
// Skip expired/invalid invites and events
|
||||||
|
if (e.message === `{"message": "Unknown Invite", "code": 10006}`) {
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const event = invite.guild_scheduled_event
|
const event = invite.guild_scheduled_event
|
||||||
if (!event) continue // the event ID provided was not valid
|
if (!event) continue // the event ID provided was not valid
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1538,6 +1538,28 @@ test("message2event: vc invite event renders embed with room link", async t => {
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("message2event: expired/invalid invites are sent as-is", async t => {
|
||||||
|
const events = await messageToEvent({content: "https://discord.gg/placeholder?event=1381190945646710824"}, {}, {}, {
|
||||||
|
snow: {
|
||||||
|
invite: {
|
||||||
|
async getInvite() {
|
||||||
|
throw new Error(`{"message": "Unknown Invite", "code": 10006}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.deepEqual(events, [
|
||||||
|
{
|
||||||
|
$type: "m.room.message",
|
||||||
|
body: "https://discord.gg/placeholder?event=1381190945646710824",
|
||||||
|
format: "org.matrix.custom.html",
|
||||||
|
formatted_body: "<a href=\"https://discord.gg/placeholder?event=1381190945646710824\">https://discord.gg/placeholder?event=1381190945646710824</a>",
|
||||||
|
"m.mentions": {},
|
||||||
|
msgtype: "m.text",
|
||||||
|
}
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
test("message2event: channel links are converted even inside lists (parser post-processer descends into list items)", async t => {
|
test("message2event: channel links are converted even inside lists (parser post-processer descends into list items)", async t => {
|
||||||
let called = 0
|
let called = 0
|
||||||
const events = await messageToEvent({
|
const events = await messageToEvent({
|
||||||
|
|
|
||||||
34
test/test.js
34
test/test.js
|
|
@ -6,31 +6,29 @@ const sqlite = require("better-sqlite3")
|
||||||
const {Writable} = require("stream")
|
const {Writable} = require("stream")
|
||||||
const migrate = require("../src/db/migrate")
|
const migrate = require("../src/db/migrate")
|
||||||
const HeatSync = require("heatsync")
|
const HeatSync = require("heatsync")
|
||||||
const {test, extend} = require("supertape")
|
const {test} = require("supertape")
|
||||||
const data = require("./data")
|
const data = require("./data")
|
||||||
const {green} = require("ansi-colors")
|
const {green} = require("ansi-colors")
|
||||||
|
const mixin = require("@cloudrac3r/mixin-deep")
|
||||||
|
|
||||||
const passthrough = require("../src/passthrough")
|
const passthrough = require("../src/passthrough")
|
||||||
const db = new sqlite(":memory:")
|
const db = new sqlite(":memory:")
|
||||||
|
|
||||||
const {reg} = require("../src/matrix/read-registration")
|
const registration = require("../src/matrix/read-registration")
|
||||||
reg.ooye.discord_token = "Njg0MjgwMTkyNTUzODQ0NzQ3.Xl3zlw.baby"
|
registration.reg = mixin(registration.getTemplateRegistration("cadence.moe"), {
|
||||||
reg.ooye.server_origin = "https://matrix.cadence.moe" // so that tests will pass even when hard-coded
|
id: "baby",
|
||||||
reg.ooye.server_name = "cadence.moe"
|
url: "http://localhost:6693",
|
||||||
reg.ooye.namespace_prefix = "_ooye_"
|
as_token: "don't actually take authenticated actions on the server",
|
||||||
reg.sender_localpart = "_ooye_bot"
|
hs_token: "don't actually take authenticated actions on the server",
|
||||||
reg.id = "baby"
|
ooye: {
|
||||||
reg.as_token = "don't actually take authenticated actions on the server"
|
server_origin: "https://matrix.cadence.moe",
|
||||||
reg.hs_token = "don't actually take authenticated actions on the server"
|
bridge_origin: "https://bridge.example.org",
|
||||||
reg.namespaces = {
|
discord_token: "Njg0MjgwMTkyNTUzODQ0NzQ3.Xl3zlw.baby",
|
||||||
users: [{regex: "@_ooye_.*:cadence.moe", exclusive: true}],
|
discord_client_secret: "baby",
|
||||||
aliases: [{regex: "#_ooye_.*:cadence.moe", exclusive: true}]
|
web_password: "password123",
|
||||||
|
time_zone: "Pacific/Auckland",
|
||||||
}
|
}
|
||||||
reg.ooye.bridge_origin = "https://bridge.example.org"
|
})
|
||||||
reg.ooye.time_zone = "Pacific/Auckland"
|
|
||||||
reg.ooye.max_file_size = 5000000
|
|
||||||
reg.ooye.web_password = "password123"
|
|
||||||
reg.ooye.include_user_id_in_mxid = false
|
|
||||||
|
|
||||||
const sync = new HeatSync({watchFS: false})
|
const sync = new HeatSync({watchFS: false})
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue