diff --git a/src/matrixeventprocessor.ts b/src/matrixeventprocessor.ts index 3d6aeea9e00d3ef2cb632309bec77269283e96d2..01f796392b6802c87b5169897141c286f196aa8d 100644 --- a/src/matrixeventprocessor.ts +++ b/src/matrixeventprocessor.ts @@ -99,19 +99,17 @@ export class MatrixEventProcessor { } public ReplaceDiscordEmoji(content: string, guild: Discord.Guild): string { - console.log("Gonna replace") let results = DISCORD_EMOJI_REGEX.exec(content); while (results !== null) { const emojiName = results[1]; const emojiNameWithColons = results[0]; // Check if this emoji exists in the guild - if(guild.emojis[emojiName] !== null) { + const emoji = guild.emojis.find((e) => e.name === emojiName); + if (emoji) { // Replace :a: with <:a:123ID123> - const emojiID = guild.emojis.find((emoji) => { return emoji.name === emojiName }).id; - content = content.replace(emojiNameWithColons, `<${emojiNameWithColons}${emojiID}>`); + content = content.replace(emojiNameWithColons, `<${emojiNameWithColons}${emoji.id}>`); } - results = DISCORD_EMOJI_REGEX.exec(content); } return content; diff --git a/test/mocks/collection.ts b/test/mocks/collection.ts index b72484108081c3e017e18fa5abee680d707e8214..c02d9c8055a072ae436ea974c57c8b81168c8d08 100644 --- a/test/mocks/collection.ts +++ b/test/mocks/collection.ts @@ -1,4 +1,6 @@ -export class MockCollection<T1, T2> extends Map { +import { Collection } from "discord.js"; + +export class MockCollection<T1, T2> extends Collection<T1, T2> { public array(): T2[] { return [...this.values()]; } diff --git a/test/mocks/emoji.ts b/test/mocks/emoji.ts new file mode 100644 index 0000000000000000000000000000000000000000..06c65350b86cd05a35754a25244c8382cc705970 --- /dev/null +++ b/test/mocks/emoji.ts @@ -0,0 +1,3 @@ +export class MockEmoji { + constructor (public id: string = "", public name = "") { } +} diff --git a/test/mocks/guild.ts b/test/mocks/guild.ts index 670d298392d9bfc0c105a39059a84f76a917083b..2c6a5657cd5477efc476c95a71ecac343b772599 100644 --- a/test/mocks/guild.ts +++ b/test/mocks/guild.ts @@ -1,10 +1,12 @@ import {MockCollection} from "./collection"; import {MockMember} from "./member"; +import {MockEmoji} from "./emoji"; import {Channel} from "discord.js"; export class MockGuild { public channels = new MockCollection<string, Channel>(); public members = new MockCollection<string, MockMember>(); + public emojis = new MockCollection<string, MockEmoji>(); public id: string; public name: string; constructor(id: string, channels: any[] = [], name: string = null) { diff --git a/test/test_matrixeventprocessor.ts b/test/test_matrixeventprocessor.ts index f4e032e164d9c1257f035a8d62e8ba15bcc01d96..d2ca112d634a8cc975ca3da74dbfc54bffd8e058 100644 --- a/test/test_matrixeventprocessor.ts +++ b/test/test_matrixeventprocessor.ts @@ -7,7 +7,9 @@ import * as Proxyquire from "proxyquire"; import { PresenceHandler } from "../src/presencehandler"; import { DiscordBot } from "../src/bot"; import { MockGuild } from "./mocks/guild"; +import { MockCollection } from "./mocks/collection"; import { MockMember } from "./mocks/member"; +import { MockEmoji } from "./mocks/emoji"; import {MatrixEventProcessor, MatrixEventProcessorOpts} from "../src/matrixeventprocessor"; import {DiscordBridgeConfig} from "../src/config"; import {MessageProcessor, MessageProcessorOpts} from "../src/messageprocessor"; @@ -204,7 +206,42 @@ describe("MatrixEventProcessor", () => { }, {avatar_url: "test"}, mockChannel as any); Chai.assert.equal(evt.description, "@ here Hello!"); }); - // TODO: Add a test for replaceDiscordEmoji + + it("Should process custom discord emojis.", () => { + const processor = createMatrixEventProcessor(false, false, true); + const mockEmoji = new MockEmoji("123", "supercake"); + const mockCollectionEmojis = new MockCollection<string, MockEmoji>(); + mockCollectionEmojis.set("123", mockEmoji); + + const mockChannelEmojis = new MockChannel("test", { + emojis: mockCollectionEmojis, + }); + const evt = processor.EventToEmbed({ + sender: "@test:localhost", + content: { + body: "I like :supercake:", + }, + }, {avatar_url: "test"}, mockChannelEmojis as any); + Chai.assert.equal(evt.description, "I like <:supercake:123>"); + }); + + it("Should not process invalid custom discord emojis.", () => { + const processor = createMatrixEventProcessor(false, false, true); + const mockEmoji = new MockEmoji("123", "supercake"); + const mockCollectionEmojis = new MockCollection<string, MockEmoji>(); + mockCollectionEmojis.set("123", mockEmoji); + + const mockChannelEmojis = new MockChannel("test", { + emojis: mockCollectionEmojis, + }); + const evt = processor.EventToEmbed({ + sender: "@test:localhost", + content: { + body: "I like :lamecake:", + }, + }, {avatar_url: "test"}, mockChannelEmojis as any); + Chai.assert.equal(evt.description, "I like :lamecake:"); + }); }); describe("FindMentionsInPlainBody", () => { it("processes mentioned username correctly", async () => {