Fallback text for Matrix poll end events
Right now this doesn't seem to show up on any clients because extensible events is a total mess, but if you did want to code a client that shows this fallback without bothering to code real support for polls, you are easily able to do that. Just pretend the poll end event is a m.room.message and render it like usual.
This commit is contained in:
@@ -113,7 +113,8 @@ async function endPoll(closeMessage) {
|
|||||||
return {
|
return {
|
||||||
username: "Total results including Matrix votes",
|
username: "Total results including Matrix votes",
|
||||||
avatar_url: `${reg.ooye.bridge_origin}/discord/poll-star-avatar.png`,
|
avatar_url: `${reg.ooye.bridge_origin}/discord/poll-star-avatar.png`,
|
||||||
content: messageString
|
content: messageString,
|
||||||
|
flags: DiscordTypes.MessageFlags.SuppressEmbeds
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,12 @@ function eventCanBeEdited(ev) {
|
|||||||
if (ev.old.event_type === "m.room.message" && ev.old.event_subtype !== "m.text" && ev.old.event_subtype !== "m.emote" && ev.old.event_subtype !== "m.notice") {
|
if (ev.old.event_type === "m.room.message" && ev.old.event_subtype !== "m.text" && ev.old.event_subtype !== "m.emote" && ev.old.event_subtype !== "m.notice") {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// Discord does not allow stickers to be edited. Poll closures are sent as "edits", but not in a way we care about.
|
// Discord does not allow stickers to be edited.
|
||||||
if (ev.old.event_type === "m.sticker" || ev.old.event_type === "org.matrix.msc3381.poll.start") {
|
if (ev.old.event_type === "m.sticker") {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// Discord does not allow the data of polls to be edited, they may only be responded to.
|
||||||
|
if (ev.old.event_type === "org.matrix.msc3381.poll.start" || ev.old.event_type === "org.matrix.msc3381.poll.end") {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// Anything else is fair game.
|
// Anything else is fair game.
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ const mxUtils = sync.require("../../matrix/utils")
|
|||||||
const dUtils = sync.require("../../discord/utils")
|
const dUtils = sync.require("../../discord/utils")
|
||||||
/** @type {import("./find-mentions")} */
|
/** @type {import("./find-mentions")} */
|
||||||
const findMentions = sync.require("./find-mentions")
|
const findMentions = sync.require("./find-mentions")
|
||||||
|
/** @type {import("../../discord/interactions/poll-responses")} */
|
||||||
|
const pollResponses = sync.require("../../discord/interactions/poll-responses")
|
||||||
const {reg} = require("../../matrix/read-registration")
|
const {reg} = require("../../matrix/read-registration")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -269,7 +271,21 @@ async function messageToEvent(message, guild, options = {}, di) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (message.type === DiscordTypes.MessageType.PollResult) {
|
if (message.type === DiscordTypes.MessageType.PollResult) {
|
||||||
const event_id = select("event_message", "event_id", {message_id: message.message_reference?.message_id}).pluck().get()
|
const pollMessageID = message.message_reference?.message_id
|
||||||
|
if (!pollMessageID) return []
|
||||||
|
const event_id = select("event_message", "event_id", {message_id: pollMessageID}).pluck().get()
|
||||||
|
const roomID = select("channel_room", "room_id", {channel_id: message.channel_id}).pluck().get()
|
||||||
|
const pollQuestionText = select("poll", "question_text", {message_id: pollMessageID}).pluck().get()
|
||||||
|
if (!event_id || !roomID || !pollQuestionText) return [] // drop it if the corresponding poll start was not bridged
|
||||||
|
|
||||||
|
const rep = new mxUtils.MatrixStringBuilder()
|
||||||
|
rep.addLine(`The poll ${pollQuestionText} has closed.`, tag`The poll <a href="https://matrix.to/#/${roomID}/${event_id}">${pollQuestionText}</a> has closed.`)
|
||||||
|
|
||||||
|
const {messageString} = pollResponses.getCombinedResults(pollMessageID, true) // poll results have already been double-checked before this point, so these totals will be accurate
|
||||||
|
rep.addLine(markdown.toHTML(messageString, {discordOnly: true, escapeHTML: false}), markdown.toHTML(messageString, {}))
|
||||||
|
|
||||||
|
const {body, formatted_body} = rep.get()
|
||||||
|
|
||||||
return [{
|
return [{
|
||||||
$type: "org.matrix.msc3381.poll.end",
|
$type: "org.matrix.msc3381.poll.end",
|
||||||
"m.relates_to": {
|
"m.relates_to": {
|
||||||
@@ -277,7 +293,11 @@ async function messageToEvent(message, guild, options = {}, di) {
|
|||||||
event_id
|
event_id
|
||||||
},
|
},
|
||||||
"org.matrix.msc3381.poll.end": {},
|
"org.matrix.msc3381.poll.end": {},
|
||||||
body: "This poll has ended.",
|
"org.matrix.msc1767.text": body,
|
||||||
|
"org.matrix.msc1767.html": formatted_body,
|
||||||
|
body: body,
|
||||||
|
format: "org.matrix.custom.html",
|
||||||
|
formatted_body: formatted_body,
|
||||||
msgtype: "m.text"
|
msgtype: "m.text"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user