Add support for MSC-4144: Per-Message Profiles #82
2 changed files with 77 additions and 0 deletions
|
|
@ -803,6 +803,10 @@ async function eventToMessage(event, guild, channel, di) {
|
||||||
if (shouldProcessTextEvent) {
|
if (shouldProcessTextEvent) {
|
||||||
if (event.content.format === "org.matrix.custom.html" && event.content.formatted_body) {
|
if (event.content.format === "org.matrix.custom.html" && event.content.formatted_body) {
|
||||||
let input = event.content.formatted_body
|
let input = event.content.formatted_body
|
||||||
|
if (perMessageProfile?.has_fallback) {
|
||||||
|
// Strip fallback elements added for clients that don't support per-message profiles
|
||||||
|
input = input.replace(/<(\w+)[^>]*\bdata-mx-profile-fallback\b[^>]*>[^<]*<\/\1>/g, "")
|
||||||
|
}
|
||||||
if (event.content.msgtype === "m.emote") {
|
if (event.content.msgtype === "m.emote") {
|
||||||
input = `* ${displayName} ${input}`
|
input = `* ${displayName} ${input}`
|
||||||
}
|
}
|
||||||
|
|
@ -948,6 +952,10 @@ async function eventToMessage(event, guild, channel, di) {
|
||||||
} else {
|
} else {
|
||||||
// Looks like we're using the plaintext body!
|
// Looks like we're using the plaintext body!
|
||||||
content = event.content.body
|
content = event.content.body
|
||||||
|
if (perMessageProfile?.has_fallback && perMessageProfile.displayname && content.startsWith(perMessageProfile.displayname + ": ")) {
|
||||||
|
// Strip the display name prefix fallback added for clients that don't support per-message profiles
|
||||||
|
content = content.slice(perMessageProfile.displayname.length + 2)
|
||||||
|
}
|
||||||
|
|
||||||
if (event.content.msgtype === "m.emote") {
|
if (event.content.msgtype === "m.emote") {
|
||||||
content = `* ${displayName} ${content}`
|
content = `* ${displayName} ${content}`
|
||||||
|
|
|
||||||
|
|
@ -5628,6 +5628,75 @@ test("event2message: m.per_message_profile takes priority over com.beeper.per_me
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("event2message: data-mx-profile-fallback element is stripped from formatted_body when per-message profile is present", async t => {
|
||||||
|
t.deepEqual(
|
||||||
|
await eventToMessage({
|
||||||
|
type: "m.room.message",
|
||||||
|
sender: "@cadence:cadence.moe",
|
||||||
|
content: {
|
||||||
|
msgtype: "m.text",
|
||||||
|
body: "Tidus Herboren: one more test",
|
||||||
|
format: "org.matrix.custom.html",
|
||||||
|
formatted_body: "<strong data-mx-profile-fallback>Tidus Herboren: </strong>one more test",
|
||||||
|
"com.beeper.per_message_profile": {
|
||||||
|
id: "tidus",
|
||||||
|
displayname: "Tidus Herboren",
|
||||||
|
avatar_url: "mxc://maunium.net/hgXsKqlmRfpKvCZdUoWDkFQo",
|
||||||
|
has_fallback: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
event_id: "$g07oYSZFWBkxohNEfywldwgcWj1hbhDzQ1sBAKvqOOU",
|
||||||
|
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
ensureJoined: [],
|
||||||
|
messagesToDelete: [],
|
||||||
|
messagesToEdit: [],
|
||||||
|
messagesToSend: [{
|
||||||
|
username: "Tidus Herboren",
|
||||||
|
content: "one more test",
|
||||||
|
avatar_url: "https://bridge.example.org/download/matrix/maunium.net/hgXsKqlmRfpKvCZdUoWDkFQo",
|
||||||
|
allowed_mentions: {
|
||||||
|
parse: ["users", "roles"]
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("event2message: displayname prefix is stripped from plain body when per-message profile has_fallback", async t => {
|
||||||
|
t.deepEqual(
|
||||||
|
await eventToMessage({
|
||||||
|
type: "m.room.message",
|
||||||
|
sender: "@cadence:cadence.moe",
|
||||||
|
content: {
|
||||||
|
msgtype: "m.text",
|
||||||
|
body: "Tidus Herboren: one more test",
|
||||||
|
"com.beeper.per_message_profile": {
|
||||||
|
id: "tidus",
|
||||||
|
displayname: "Tidus Herboren",
|
||||||
|
has_fallback: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
event_id: "$g07oYSZFWBkxohNEfywldwgcWj1hbhDzQ1sBAKvqOOU",
|
||||||
|
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
ensureJoined: [],
|
||||||
|
messagesToDelete: [],
|
||||||
|
messagesToEdit: [],
|
||||||
|
messagesToSend: [{
|
||||||
|
username: "Tidus Herboren",
|
||||||
|
content: "one more test",
|
||||||
|
avatar_url: undefined,
|
||||||
|
allowed_mentions: {
|
||||||
|
parse: ["users", "roles"]
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
test("event2message: all unknown chess emojis are used for sprite sheet", async t => {
|
test("event2message: all unknown chess emojis are used for sprite sheet", async t => {
|
||||||
t.deepEqual(
|
t.deepEqual(
|
||||||
await eventToMessage({
|
await eventToMessage({
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue