don't send "" for attachments without content
This commit is contained in:
parent
1591bfc578
commit
d592a3c82e
5 changed files with 104 additions and 42 deletions
|
@ -16,48 +16,50 @@ async function messageToEvent(message, guild) {
|
||||||
const events = []
|
const events = []
|
||||||
|
|
||||||
// Text content appears first
|
// Text content appears first
|
||||||
const body = message.content
|
if (message.content) {
|
||||||
const html = markdown.toHTML(body, {
|
const body = message.content
|
||||||
discordCallback: {
|
const html = markdown.toHTML(body, {
|
||||||
user: node => {
|
discordCallback: {
|
||||||
const mxid = db.prepare("SELECT mxid FROM sim WHERE discord_id = ?").pluck().get(node.id)
|
user: node => {
|
||||||
if (mxid) {
|
const mxid = db.prepare("SELECT mxid FROM sim WHERE discord_id = ?").pluck().get(node.id)
|
||||||
return "https://matrix.to/#/" + mxid
|
if (mxid) {
|
||||||
} else {
|
return "https://matrix.to/#/" + mxid
|
||||||
return "@" + node.id
|
} else {
|
||||||
}
|
return "@" + node.id
|
||||||
},
|
}
|
||||||
channel: node => {
|
},
|
||||||
const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(node.id)
|
channel: node => {
|
||||||
if (roomID) {
|
const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(node.id)
|
||||||
return "https://matrix.to/#/" + roomID
|
if (roomID) {
|
||||||
} else {
|
return "https://matrix.to/#/" + roomID
|
||||||
return "#" + node.id
|
} else {
|
||||||
}
|
return "#" + node.id
|
||||||
},
|
}
|
||||||
role: node =>
|
},
|
||||||
"@&" + node.id,
|
role: node =>
|
||||||
everyone: node =>
|
"@&" + node.id,
|
||||||
"@room",
|
everyone: node =>
|
||||||
here: node =>
|
"@room",
|
||||||
"@here"
|
here: node =>
|
||||||
|
"@here"
|
||||||
|
}
|
||||||
|
}, null, null)
|
||||||
|
const isPlaintext = body === html
|
||||||
|
if (isPlaintext) {
|
||||||
|
events.push({
|
||||||
|
$type: "m.room.message",
|
||||||
|
msgtype: "m.text",
|
||||||
|
body: body
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
events.push({
|
||||||
|
$type: "m.room.message",
|
||||||
|
msgtype: "m.text",
|
||||||
|
body: body,
|
||||||
|
format: "org.matrix.custom.html",
|
||||||
|
formatted_body: html
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}, null, null)
|
|
||||||
const isPlaintext = body === html
|
|
||||||
if (isPlaintext) {
|
|
||||||
events.push({
|
|
||||||
$type: "m.room.message",
|
|
||||||
msgtype: "m.text",
|
|
||||||
body: body
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
events.push({
|
|
||||||
$type: "m.room.message",
|
|
||||||
msgtype: "m.text",
|
|
||||||
body: body,
|
|
||||||
format: "org.matrix.custom.html",
|
|
||||||
formatted_body: html
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then attachments
|
// Then attachments
|
||||||
|
|
|
@ -3,6 +3,23 @@ const assert = require("assert")
|
||||||
const {messageToEvent} = require("./message-to-event")
|
const {messageToEvent} = require("./message-to-event")
|
||||||
const data = require("../../test/data")
|
const data = require("../../test/data")
|
||||||
|
|
||||||
|
test("message2event: attachment with no content", async t => {
|
||||||
|
const events = await messageToEvent(data.message.attachment_no_content, data.guild.general)
|
||||||
|
t.deepEqual(events, [{
|
||||||
|
$type: "m.room.message",
|
||||||
|
msgtype: "m.image",
|
||||||
|
url: "mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM",
|
||||||
|
body: "image.png",
|
||||||
|
external_url: "https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png",
|
||||||
|
info: {
|
||||||
|
mimetype: "image/png",
|
||||||
|
w: 466,
|
||||||
|
h: 85,
|
||||||
|
size: 12919,
|
||||||
|
},
|
||||||
|
}])
|
||||||
|
})
|
||||||
|
|
||||||
test("message2event: stickers", async t => {
|
test("message2event: stickers", async t => {
|
||||||
const events = await messageToEvent(data.message.sticker, data.guild.general)
|
const events = await messageToEvent(data.message.sticker, data.guild.general)
|
||||||
t.deepEqual(events, [{
|
t.deepEqual(events, [{
|
||||||
|
|
|
@ -60,6 +60,10 @@ async function inviteToRoom(roomID, mxidToInvite, mxid) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function leaveRoom(roomID, mxid) {
|
||||||
|
await mreq.mreq("POST", path(`/client/v3/rooms/${roomID}/leave`, mxid), {})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} roomID
|
* @param {string} roomID
|
||||||
* @returns {Promise<import("../types").Event.BaseStateEvent[]>}
|
* @returns {Promise<import("../types").Event.BaseStateEvent[]>}
|
||||||
|
@ -108,6 +112,7 @@ module.exports.register = register
|
||||||
module.exports.createRoom = createRoom
|
module.exports.createRoom = createRoom
|
||||||
module.exports.joinRoom = joinRoom
|
module.exports.joinRoom = joinRoom
|
||||||
module.exports.inviteToRoom = inviteToRoom
|
module.exports.inviteToRoom = inviteToRoom
|
||||||
|
module.exports.leaveRoom = leaveRoom
|
||||||
module.exports.getAllState = getAllState
|
module.exports.getAllState = getAllState
|
||||||
module.exports.sendState = sendState
|
module.exports.sendState = sendState
|
||||||
module.exports.sendEvent = sendEvent
|
module.exports.sendEvent = sendEvent
|
||||||
|
|
1
stdin.js
1
stdin.js
|
@ -11,6 +11,7 @@ const createRoom = sync.require("./d2m/actions/create-room")
|
||||||
const registerUser = sync.require("./d2m/actions/register-user")
|
const registerUser = sync.require("./d2m/actions/register-user")
|
||||||
const mreq = sync.require("./matrix/mreq")
|
const mreq = sync.require("./matrix/mreq")
|
||||||
const api = sync.require("./matrix/api")
|
const api = sync.require("./matrix/api")
|
||||||
|
const sendMessage = sync.require("./m2d/actions/send-message")
|
||||||
const guildID = "112760669178241024"
|
const guildID = "112760669178241024"
|
||||||
|
|
||||||
const extraContext = {}
|
const extraContext = {}
|
||||||
|
|
39
test/data.js
39
test/data.js
|
@ -140,6 +140,43 @@ module.exports = {
|
||||||
},
|
},
|
||||||
message: {
|
message: {
|
||||||
// Display order is text content, attachments, then stickers
|
// Display order is text content, attachments, then stickers
|
||||||
|
attachment_no_content: {
|
||||||
|
id: "1124628646670389348",
|
||||||
|
type: 0,
|
||||||
|
content: "",
|
||||||
|
channel_id: "497161332244742154",
|
||||||
|
author: {
|
||||||
|
id: "320067006521147393",
|
||||||
|
username: "papiophidian",
|
||||||
|
global_name: "PapiOphidian",
|
||||||
|
avatar: "fb2b4535f7a108619e3edae12fcb16c5",
|
||||||
|
discriminator: "0",
|
||||||
|
public_flags: 4194880,
|
||||||
|
avatar_decoration: null
|
||||||
|
},
|
||||||
|
attachments: [
|
||||||
|
{
|
||||||
|
id: "1124628646431297546",
|
||||||
|
filename: "image.png",
|
||||||
|
size: 12919,
|
||||||
|
url: "https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png",
|
||||||
|
proxy_url: "https://media.discordapp.net/attachments/497161332244742154/1124628646431297546/image.png",
|
||||||
|
width: 466,
|
||||||
|
height: 85,
|
||||||
|
content_type: "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
embeds: [],
|
||||||
|
mentions: [],
|
||||||
|
mention_roles: [],
|
||||||
|
pinned: false,
|
||||||
|
mention_everyone: false,
|
||||||
|
tts: false,
|
||||||
|
timestamp: "2023-07-01T09:12:43.956000+00:00",
|
||||||
|
edited_timestamp: null,
|
||||||
|
flags: 0,
|
||||||
|
components: []
|
||||||
|
},
|
||||||
sticker: {
|
sticker: {
|
||||||
id: "1106366167788044450",
|
id: "1106366167788044450",
|
||||||
type: 0,
|
type: 0,
|
||||||
|
@ -180,6 +217,6 @@ module.exports = {
|
||||||
format_type: 1,
|
format_type: 1,
|
||||||
name: "pomu puff"
|
name: "pomu puff"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue