diff --git a/d2m/converters/message-to-event.js b/d2m/converters/message-to-event.js index 054b12c..3ede0a4 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 ce694fd..edcb44c 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 b4f95b3..61ee5d0 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",