support up to 1 space in written mentions

This commit is contained in:
Cadence Ember 2023-08-17 18:17:53 +12:00
parent f5ef881cd0
commit e00eb15f35
3 changed files with 6 additions and 3 deletions

View file

@ -131,8 +131,8 @@ async function messageToEvent(message, guild, options = {}, di) {
escapeHTML: false, escapeHTML: false,
}, null, null) }, null, null)
// Mentions scenario 3: scan the message content for written @mentions of matrix users // Mentions scenario 3: scan the message content for written @mentions of matrix users. Allows for up to one space between @ and mention.
const matches = [...content.matchAll(/@([a-z0-9._]+)\b/gi)] const matches = [...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))) {
const writtenMentionsText = matches.map(m => m[1].toLowerCase()) const writtenMentionsText = matches.map(m => m[1].toLowerCase())
const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(message.channel_id) const roomID = db.prepare("SELECT room_id FROM channel_room WHERE channel_id = ?").pluck().get(message.channel_id)

View file

@ -247,10 +247,12 @@ test("message2event: simple reply to matrix user, reply fallbacks disabled", asy
}]) }])
}) })
test("message2event: simple written @mention for matrix user", async t => { test("message2event: simple written @mentions for matrix users", async t => {
let called = 0
const events = await messageToEvent(data.message.simple_written_at_mention_for_matrix, data.guild.general, {}, { const events = await messageToEvent(data.message.simple_written_at_mention_for_matrix, data.guild.general, {}, {
api: { api: {
async getJoinedMembers(roomID) { async getJoinedMembers(roomID) {
called++
t.equal(roomID, "!kLRqKKUQXcibIMtOpl:cadence.moe") t.equal(roomID, "!kLRqKKUQXcibIMtOpl:cadence.moe")
return new Promise(resolve => { return new Promise(resolve => {
setTimeout(() => { setTimeout(() => {
@ -290,6 +292,7 @@ test("message2event: simple written @mention for matrix user", async t => {
msgtype: "m.text", msgtype: "m.text",
body: "@Cadence, tell me about @Phil, the creator of the Chin Trick, who has become ever more powerful under the mentorship of @botrac4r and @huck" body: "@Cadence, tell me about @Phil, the creator of the Chin Trick, who has become ever more powerful under the mentorship of @botrac4r and @huck"
}]) }])
t.equal(called, 1, "should only look up the member list once")
}) })
test("message2event: very large attachment is linked instead of being uploaded", async t => { test("message2event: very large attachment is linked instead of being uploaded", async t => {

Binary file not shown.