From 348dcb27bf25f0a46918b0f62eb3f5e1a2754387 Mon Sep 17 00:00:00 2001
From: Will Hunt <half-shot@molrams.com>
Date: Mon, 18 Sep 2017 00:45:10 +0100
Subject: [PATCH] Fix more mention match cases for issue 46

---
 src/messageprocessor.ts       |  7 +++++--
 test/mocks/user.ts            |  1 +
 test/test_messageprocessor.ts | 13 ++++++++++---
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/messageprocessor.ts b/src/messageprocessor.ts
index 1cccba6..283b401 100644
--- a/src/messageprocessor.ts
+++ b/src/messageprocessor.ts
@@ -106,9 +106,12 @@ export class MessageProcessor {
 
     public FindMentionsInPlainBody(body: string, members: Discord.GuildMember[]): string {
       for (const member of members) {
-        const regex = new RegExp(`\\b(${escapeStringRegexp(member.displayName)})(?=\\b)` , "mg");
+        const matcher = escapeStringRegexp(member.user.username + "#" + member.user.discriminator) + "|" +
+                        escapeStringRegexp(member.displayName);
         body = body.replace(
-            regex, `<@!${member.id}>`,
+            new RegExp(
+                `\\b(${matcher})(?=\\b)`
+                , "mig"), `<@!${member.id}>`,
         );
       }
       return body;
diff --git a/test/mocks/user.ts b/test/mocks/user.ts
index d66db47..a2d7574 100644
--- a/test/mocks/user.ts
+++ b/test/mocks/user.ts
@@ -1,6 +1,7 @@
 export class MockUser {
   public id = "";
   public username: string;
+  public discriminator: string;
   constructor(id: string, username: string = "") {
     this.id = id;
     this.username = username;
diff --git a/test/test_messageprocessor.ts b/test/test_messageprocessor.ts
index de0f6be..bc75679 100644
--- a/test/test_messageprocessor.ts
+++ b/test/test_messageprocessor.ts
@@ -122,11 +122,17 @@ describe("MessageProcessor", () => {
                 user: {
                     username: "TestUsername",
                     id: "12345",
+                    discriminator: "54321",
                 },
             })];
-            const msg = "Hello TestUsername";
-            const content = processor.FindMentionsInPlainBody(msg, members);
-            Chai.assert.equal(content, "Hello <@!12345>");
+            Chai.assert.equal(
+                processor.FindMentionsInPlainBody("Hello TestUsername", members),
+                "Hello <@!12345>",
+            );
+            Chai.assert.equal(
+                processor.FindMentionsInPlainBody("Hello TestUsername#54321", members),
+                "Hello <@!12345>",
+            );
         });
         it("processes mentioned nickname correctly", async () => {
             const processor = new MessageProcessor(new MessageProcessorOpts("localhost"), <DiscordBot> bot);
@@ -148,6 +154,7 @@ describe("MessageProcessor", () => {
             Chai.assert.equal(processor.FindMentionsInPlainBody("TestNickname: Hello", members), "<@!12345>: Hello");
             Chai.assert.equal(processor.FindMentionsInPlainBody("TestNickname, Hello", members), "<@!12345>, Hello");
             Chai.assert.equal(processor.FindMentionsInPlainBody("TestNickname Hello", members), "<@!12345> Hello");
+            Chai.assert.equal(processor.FindMentionsInPlainBody("testNicKName Hello", members), "<@!12345> Hello");
             Chai.assert.equal(
                 processor.FindMentionsInPlainBody("I wish TestNickname was here", members),
                 "I wish <@!12345> was here",
-- 
GitLab