diff --git a/src/d2m/converters/message-to-event.js b/src/d2m/converters/message-to-event.js
index 3f598f2..33d8696 100644
--- a/src/d2m/converters/message-to-event.js
+++ b/src/d2m/converters/message-to-event.js
@@ -357,6 +357,17 @@ async function messageToEvent(message, guild, options = {}, di) {
}]
}
+ if (message.type === DiscordTypes.MessageType.ChannelFollowAdd) {
+ return [{
+ $type: "m.room.message",
+ msgtype: "m.emote",
+ body: `set this room to receive announcements from ${message.content}`,
+ format: "org.matrix.custom.html",
+ formatted_body: tag`set this room to receive announcements from ${message.content}`,
+ "m.mentions": {}
+ }]
+ }
+
let isInteraction = (message.type === DiscordTypes.MessageType.ChatInputCommand || message.type === DiscordTypes.MessageType.ContextMenuCommand) && message.interaction && "name" in message.interaction
let isThinkingInteraction = isInteraction && !!((message.flags || 0) & DiscordTypes.MessageFlags.Loading)
diff --git a/src/d2m/converters/message-to-event.test.js b/src/d2m/converters/message-to-event.test.js
index c4b812d..97fc25d 100644
--- a/src/d2m/converters/message-to-event.test.js
+++ b/src/d2m/converters/message-to-event.test.js
@@ -1142,6 +1142,19 @@ test("message2event: type 4 channel name change", async t => {
}])
})
+test("message2event: type 12 channel follow add", async t => {
+ const events = await messageToEvent(data.special_message.channel_follow_add, data.guild.general)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ "m.mentions": {},
+ msgtype: "m.emote",
+ body: "set this room to receive announcements from PluralKit #downtime",
+ format: "org.matrix.custom.html",
+ formatted_body: "set this room to receive announcements from PluralKit #downtime",
+ "m.mentions": {}
+ }])
+})
+
test("message2event: thread start message reference", async t => {
const events = await messageToEvent(data.special_message.thread_start_context, data.guild.general, {}, {
api: {
diff --git a/test/data.js b/test/data.js
index 45e0388..f5e8313 100644
--- a/test/data.js
+++ b/test/data.js
@@ -6170,6 +6170,37 @@ module.exports = {
components: [],
position: 12
},
+ channel_follow_add: {
+ type: 12,
+ content: "PluralKit #downtime",
+ attachments: [],
+ embeds: [],
+ timestamp: "2026-03-24T23:16:04.097Z",
+ edited_timestamp: null,
+ flags: 0,
+ components: [],
+ id: "1486141581047369888",
+ channel_id: "1451125453082591314",
+ author: {
+ id: "154058479798059009",
+ username: "exaptations",
+ discriminator: "0",
+ avatar: "57b5cfe09a48a5902f2eb8fa65bb1b80",
+ bot: false,
+ flags: 0,
+ globalName: "Exa",
+ },
+ pinned: false,
+ mentions: [],
+ mention_roles: [],
+ mention_everyone: false,
+ tts: false,
+ message_reference: {
+ type: 0,
+ channel_id: "1015204661701124206",
+ guild_id: "466707357099884544"
+ }
+ },
updated_to_start_thread_from_here: {
t: "MESSAGE_UPDATE",
s: 19,