diff --git a/d2m/actions/create-room.js b/d2m/actions/create-room.js
index 0fd0646..98333b2 100644
--- a/d2m/actions/create-room.js
+++ b/d2m/actions/create-room.js
@@ -37,17 +37,25 @@ function applyKStateDiffToRoom(roomID, kstate) {
* @param {string?} customName
*/
function convertNameAndTopic(channel, guild, customName) {
- const convertedName = customName || channel.name;
- const maybeTopicWithPipe = channel.topic ? ` | ${channel.topic}` : '';
- const maybeTopicWithNewlines = channel.topic ? `${channel.topic}\n\n` : '';
- const channelIDPart = `Channel ID: ${channel.id}`;
- const guildIDPart = `Guild ID: ${guild.id}`;
+ // TODO: Improve nasty nested ifs
+ let convertedName, convertedTopic
+ if (customName) {
+ convertedName = customName
+ if (channel.topic) {
+ convertedTopic = `#${channel.name} | ${channel.topic}\n\nChannel ID: ${channel.id}\nGuild ID: ${guild.id}`
+ } else {
+ convertedTopic = `#${channel.name}\n\nChannel ID: ${channel.id}\nGuild ID: ${guild.id}`
+ }
+ } else {
+ convertedName = channel.name
+ if (channel.topic) {
+ convertedTopic = `${channel.topic}\n\nChannel ID: ${channel.id}\nGuild ID: ${guild.id}`
+ } else {
+ convertedTopic = `Channel ID: ${channel.id}\nGuild ID: ${guild.id}`
+ }
+ }
- const convertedTopic = customName
- ? `#${channel.name}${maybeTopicWithPipe}\n\n${channelIDPart}\n${guildIDPart}`
- : `${maybeTopicWithNewlines}${channelIDPart}\n${guildIDPart}`;
-
- return [convertedName, convertedTopic];
+ return [convertedName, convertedTopic]
}
/**
diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js
index 90023ee..382e970 100644
--- a/d2m/converters/message-to-event.js
+++ b/d2m/converters/message-to-event.js
@@ -8,34 +8,6 @@ const { sync, db, discord } = passthrough
/** @type {import("../../matrix/file")} */
const file = sync.require("../../matrix/file")
-function getDiscordParseCallbacks(message, useHTML) {
- return {
- user: node => {
- const mxid = db.prepare("SELECT mxid FROM sim WHERE discord_id = ?").pluck().get(node.id)
- const username = message.mentions.find(ment => ment.id === node.id)?.username || node.id
- if (mxid && useHTML) {
- return `@${username}`
- } else {
- return `@${username}:`
- }
- },
- channel: node => {
- const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(node.id)
- if (roomID && useHTML) {
- return "https://matrix.to/#/" + roomID
- } else {
- return "#" + node.id
- }
- },
- role: node =>
- "@&" + node.id,
- everyone: node =>
- "@room",
- here: node =>
- "@here"
- }
-}
-
/**
* @param {import("discord-api-types/v10").APIMessage} message
* @param {import("discord-api-types/v10").APIGuild} guild
@@ -45,18 +17,34 @@ async function messageToEvent(message, guild) {
// Text content appears first
if (message.content) {
- const html = markdown.toHTML(message.content, {
- discordCallback: getDiscordParseCallbacks(message, true)
+ 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 body = markdown.toHTML(message.content, {
- discordCallback: getDiscordParseCallbacks(message, false), //TODO: library bug!!
- discordOnly: true,
- escapeHTML: false,
- }, null, null)
-
const isPlaintext = body === html
-
if (isPlaintext) {
events.push({
$type: "m.room.message",
diff --git a/d2m/converters/message-to-event.test.js b/d2m/converters/message-to-event.test.js
index 1f3a844..26cf1f1 100644
--- a/d2m/converters/message-to-event.test.js
+++ b/d2m/converters/message-to-event.test.js
@@ -2,26 +2,6 @@ const {test} = require("supertape")
const {messageToEvent} = require("./message-to-event")
const data = require("../../test/data")
-test("message2event: simple plaintext", async t => {
- const events = await messageToEvent(data.message.simple_plaintext, data.guild.general)
- t.deepEqual(events, [{
- $type: "m.room.message",
- msgtype: "m.text",
- body: "ayy lmao"
- }])
-})
-
-test("message2event: simple user mention", async t => {
- const events = await messageToEvent(data.message.simple_user_mention, data.guild.general)
- t.deepEqual(events, [{
- $type: "m.room.message",
- msgtype: "m.text",
- body: "@crunch god: Tell me about Phil, renowned martial arts master and creator of the Chin Trick",
- format: "org.matrix.custom.html",
- formatted_body: '@crunch god Tell me about Phil, renowned martial arts master and creator of the Chin Trick'
- }])
-})
-
test("message2event: attachment with no content", async t => {
const events = await messageToEvent(data.message.attachment_no_content, data.guild.general)
t.deepEqual(events, [{
diff --git a/db/ooye.db b/db/ooye.db
index 7df165b..8400cf0 100644
Binary files a/db/ooye.db and b/db/ooye.db differ
diff --git a/stdin.js b/stdin.js
index 7e0db89..cd504f2 100644
--- a/stdin.js
+++ b/stdin.js
@@ -6,7 +6,6 @@ const util = require("util")
const passthrough = require("./passthrough")
const { discord, config, sync, db } = passthrough
-const data = sync.require("./test/data")
const createSpace = sync.require("./d2m/actions/create-space")
const createRoom = sync.require("./d2m/actions/create-room")
const registerUser = sync.require("./d2m/actions/register-user")
diff --git a/test/data.js b/test/data.js
index f4326a6..49bbeaf 100644
--- a/test/data.js
+++ b/test/data.js
@@ -138,84 +138,6 @@ module.exports = {
},
message: {
// Display order is text content, attachments, then stickers
- simple_plaintext: {
- id: "1126733830494093453",
- type: 0,
- content: "ayy lmao",
- channel_id: "112760669178241024",
- author: {
- id: "111604486476181504",
- username: "kyuugryphon",
- avatar: "e4ce31267ca524d19be80e684d4cafa1",
- discriminator: "0",
- public_flags: 0,
- flags: 0,
- banner: null,
- accent_color: null,
- global_name: "KyuuGryphon",
- avatar_decoration: null,
- display_name: "KyuuGryphon",
- banner_color: null
- },
- attachments: [],
- embeds: [],
- mentions: [],
- mention_roles: [],
- pinned: false,
- mention_everyone: false,
- tts: false,
- timestamp: "2023-07-07T04:37:58.892000+00:00",
- edited_timestamp: null,
- flags: 0,
- components: []
- },
- simple_user_mention: {
- id: "1126739682080858234",
- type: 0,
- content: "<@820865262526005258> Tell me about Phil, renowned martial arts master and creator of the Chin Trick",
- channel_id: "112760669178241024",
- author: {
- id: "114147806469554185",
- username: "extremity",
- avatar: "6628aaf6b27219c36e2d3b5cfd6d0ee6",
- discriminator: "0",
- public_flags: 768,
- flags: 768,
- banner: null,
- accent_color: null,
- global_name: "Extremity",
- avatar_decoration: null,
- display_name: "Extremity",
- banner_color: null
- },
- attachments: [],
- embeds: [],
- mentions: [
- {
- id: "820865262526005258",
- username: "crunch god",
- avatar: "f7a75ca031c1d2326e0f3ca5213eea47",
- discriminator: "8889",
- public_flags: 0,
- flags: 0,
- bot: true,
- banner: null,
- accent_color: null,
- global_name: null,
- avatar_decoration: null,
- display_name: null,
- banner_color: null
- }
- ],
- mention_roles: [],
- pinned: false,
- mention_everyone: false,
- tts: false,
- timestamp: "2023-07-07T05:01:14.019000+00:00",
- edited_timestamp: null,
- flags: 0,
- components: []
- },
attachment_no_content: {
id: "1124628646670389348",
type: 0,