diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js
index 054b12cd..3ede0a4d 100644
--- a/d2m/converters/message-to-event.js
+++ b/d2m/converters/message-to-event.js
@@ -249,6 +249,8 @@ async function messageToEvent(message, guild, options = {}, di) {
let repliedToEventRow = null
let repliedToEventSenderMxid = null
+ if (message.mention_everyone) mentions.room = true
+
function addMention(mxid) {
if (!mentions.user_ids) mentions.user_ids = []
if (!mentions.user_ids.includes(mxid)) mentions.user_ids.push(mxid)
@@ -480,7 +482,7 @@ async function messageToEvent(message, guild, options = {}, di) {
// Mentions scenario 3: scan the message content for written @mentions of matrix users. Allows for up to one space between @ and mention.
const matches = [...message.content.matchAll(/@ ?([a-z0-9._]+)\b/gi)]
- if (matches.length && matches.some(m => m[1].match(/[a-z]/i))) {
+ if (matches.length && matches.some(m => m[1].match(/[a-z]/i) && m[1] !== "everyone" && m[1] !== "here")) {
const writtenMentionsText = matches.map(m => m[1].toLowerCase())
const roomID = select("channel_room", "room_id", {channel_id: message.channel_id}).pluck().get()
assert(roomID)
diff --git a/d2m/converters/message-to-event.test.js b/d2m/converters/message-to-event.test.js
index ce694fdc..edcb44ce 100644
--- a/d2m/converters/message-to-event.test.js
+++ b/d2m/converters/message-to-event.test.js
@@ -789,3 +789,63 @@ test("message2event: crossposted announcements say where they are crossposted fr
formatted_body: "🔀 Chewey Bot Official Server #announcements
All text based commands are now inactive on Chewey Bot
To continue using commands you'll need to use them as slash commands"
}])
})
+
+test("message2event: @everyone", async t => {
+ const events = await messageToEvent(data.message_mention_everyone.at_everyone)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ msgtype: "m.text",
+ body: "@room",
+ "m.mentions": {
+ room: true
+ }
+ }])
+})
+
+test("message2event: @here", async t => {
+ const events = await messageToEvent(data.message_mention_everyone.at_here)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ msgtype: "m.text",
+ body: "@room",
+ "m.mentions": {
+ room: true
+ }
+ }])
+})
+
+test("message2event: @everyone without permission", async t => {
+ const events = await messageToEvent(data.message_mention_everyone.at_everyone_without_permission)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ msgtype: "m.text",
+ body: "@everyone <-- this is testing that it DOESN'T mention. if this mentions everyone then my apologies.",
+ format: "org.matrix.custom.html",
+ formatted_body: "@everyone <-- this is testing that it DOESN'T mention. if this mentions everyone then my apologies.",
+ "m.mentions": {}
+ }])
+})
+
+test("message2event: @here without permission", async t => {
+ const events = await messageToEvent(data.message_mention_everyone.at_here_without_permission)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ msgtype: "m.text",
+ body: "@here <-- this is testing that it DOESN'T mention. if this mentions people then my apologies.",
+ format: "org.matrix.custom.html",
+ formatted_body: "@here <-- this is testing that it DOESN'T mention. if this mentions people then my apologies.",
+ "m.mentions": {}
+ }])
+})
+
+test("message2event: @everyone within a link", async t => {
+ const events = await messageToEvent(data.message_mention_everyone.at_everyone_within_link)
+ t.deepEqual(events, [{
+ $type: "m.room.message",
+ msgtype: "m.text",
+ body: "https://github.com/@everyone",
+ format: "org.matrix.custom.html",
+ formatted_body: `https://github.com/@everyone`,
+ "m.mentions": {}
+ }])
+})
diff --git a/test/data.js b/test/data.js
index b4f95b38..61ee5d0e 100644
--- a/test/data.js
+++ b/test/data.js
@@ -1925,6 +1925,163 @@ module.exports = {
webhook_id: "1195662438662680720"
}
},
+ message_mention_everyone: {
+ at_everyone: {
+ id: "1214510099058655252",
+ type: 0,
+ content: "@everyone",
+ channel_id: "1100319550446252084",
+ author: {
+ id: "772659086046658620",
+ username: "cadence.worm",
+ avatar: "4b5c4b28051144e4c111f0113a0f1cf1",
+ discriminator: "0",
+ public_flags: 0,
+ premium_type: 0,
+ flags: 0,
+ banner: null,
+ accent_color: null,
+ global_name: "cadence",
+ avatar_decoration_data: null,
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: true,
+ tts: false,
+ timestamp: "2024-03-05T09:49:32.122000+00:00",
+ edited_timestamp: null,
+ flags: 0,
+ components: []
+ },
+ at_here: {
+ id: "1214510192230797332",
+ type: 0,
+ content: "@here",
+ channel_id: "1100319550446252084",
+ author: {
+ id: "772659086046658620",
+ username: "cadence.worm",
+ avatar: "4b5c4b28051144e4c111f0113a0f1cf1",
+ discriminator: "0",
+ public_flags: 0,
+ premium_type: 0,
+ flags: 0,
+ banner: null,
+ accent_color: null,
+ global_name: "cadence",
+ avatar_decoration_data: null,
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: true,
+ tts: false,
+ timestamp: "2024-03-05T09:49:54.336000+00:00",
+ edited_timestamp: null,
+ flags: 0,
+ components: []
+ },
+ at_everyone_without_permission: {
+ id: "1214510346623258654",
+ type: 0,
+ content: "@everyone <-- this is testing that it DOESN'T mention. if this mentions everyone then my apologies.",
+ channel_id: "112760669178241024",
+ author: {
+ id: "772659086046658620",
+ username: "cadence.worm",
+ avatar: "4b5c4b28051144e4c111f0113a0f1cf1",
+ discriminator: "0",
+ public_flags: 0,
+ premium_type: 0,
+ flags: 0,
+ banner: null,
+ accent_color: null,
+ global_name: "cadence",
+ avatar_decoration_data: null,
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: false,
+ tts: false,
+ timestamp: "2024-03-05T09:50:31.146000+00:00",
+ edited_timestamp: null,
+ flags: 0,
+ components: []
+ },
+ at_here_without_permission: {
+ id: "1214510346623258654",
+ type: 0,
+ content: "@here <-- this is testing that it DOESN'T mention. if this mentions people then my apologies.",
+ channel_id: "112760669178241024",
+ author: {
+ id: "772659086046658620",
+ username: "cadence.worm",
+ avatar: "4b5c4b28051144e4c111f0113a0f1cf1",
+ discriminator: "0",
+ public_flags: 0,
+ premium_type: 0,
+ flags: 0,
+ banner: null,
+ accent_color: null,
+ global_name: "cadence",
+ avatar_decoration_data: null,
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: false,
+ tts: false,
+ timestamp: "2024-03-05T09:50:31.146000+00:00",
+ edited_timestamp: null,
+ flags: 0,
+ components: []
+ },
+ at_everyone_within_link: {
+ id: "1214510225885888563",
+ type: 0,
+ content: "https://github.com/@everyone",
+ channel_id: "1100319550446252084",
+ author: {
+ id: "772659086046658620",
+ username: "cadence.worm",
+ avatar: "4b5c4b28051144e4c111f0113a0f1cf1",
+ discriminator: "0",
+ public_flags: 0,
+ premium_type: 0,
+ flags: 0,
+ banner: null,
+ accent_color: null,
+ global_name: "cadence",
+ avatar_decoration_data: null,
+ banner_color: null
+ },
+ attachments: [],
+ embeds: [],
+ mentions: [],
+ mention_roles: [],
+ pinned: false,
+ mention_everyone: false,
+ tts: false,
+ timestamp: "2024-03-05T09:50:02.360000+00:00",
+ edited_timestamp: null,
+ flags: 0,
+ components: []
+ }
+ },
message_with_embeds: {
nothing_but_a_field: {
guild_id: "497159726455455754",