From 797ceec7873df24210bbb92e5cf79ea50a3aa3b6 Mon Sep 17 00:00:00 2001 From: chayleaf Date: Tue, 11 Jun 2024 22:17:11 +0700 Subject: [PATCH] matrix-appservice-discord: +2 patches --- pkgs/matrix-appservice-discord/default.nix | 23 ++++ .../reactions-as-mxc-urls.patch | 100 ++++++++++++++++++ .../reduce-spamminess.patch | 28 +++++ 3 files changed, 151 insertions(+) create mode 100644 pkgs/matrix-appservice-discord/reactions-as-mxc-urls.patch create mode 100644 pkgs/matrix-appservice-discord/reduce-spamminess.patch diff --git a/pkgs/matrix-appservice-discord/default.nix b/pkgs/matrix-appservice-discord/default.nix index 0298681..b1c1096 100644 --- a/pkgs/matrix-appservice-discord/default.nix +++ b/pkgs/matrix-appservice-discord/default.nix @@ -42,6 +42,29 @@ matrix-appservice-discord.overrideAttrs (old: { hash = "sha256-1qb4Zah1XKzxTpVJqOOqz+TiXMFmnsIMZeuqJQdqSIA="; name = "bridge-matrix-edits-2.patch"; }) + # https://github.com/matrix-org/matrix-appservice-discord/pull/862 + (fetchpatch { + url = "https://github.com/matrix-org/matrix-appservice-discord/commit/3106957ebd857bc88ba3f62182a61dd00275f2fc.patch"; + hash = "sha256-Xf+TuWXNVqi+0YRwBbCkLcMfsYNxq1ZlsgLWpwjqPww="; + name = "discord-to-matrix-reactions-1.patch"; + }) + (fetchpatch { + url = "https://github.com/matrix-org/matrix-appservice-discord/commit/a8186874b03c545a8728892b299a4367776fc538.patch"; + hash = "sha256-Hq2HY44hPeGPXI3MglyN7Am+NCNAHAbr2hYhXvDYtGk="; + name = "discord-to-matrix-reactions-2.patch"; + }) + (fetchpatch { + url = "https://github.com/matrix-org/matrix-appservice-discord/commit/da2c3b88c7dd4f3a679890c58f934e9b2ed775df.patch"; + hash = "sha256-4NMAr+Ni+7pI/I007YH5Y+4ZwAhwg91/BXGvLVcO0BQ="; + name = "discord-to-matrix-reactions-3.patch"; + }) + (fetchpatch { + url = "https://github.com/matrix-org/matrix-appservice-discord/commit/a33f269c88c432c532d7816f180e5262d73ebf02.patch"; + hash = "sha256-0WkfDkQsDoxfKH3MgPb893UPDPxeWueQwVSaxD2RKAw="; + name = "discord-to-matrix-reactions-4.patch"; + }) + ./reactions-as-mxc-urls.patch ./disable-attachment-forwarding-to-matrix.patch + ./reduce-spamminess.patch ]; }) diff --git a/pkgs/matrix-appservice-discord/reactions-as-mxc-urls.patch b/pkgs/matrix-appservice-discord/reactions-as-mxc-urls.patch new file mode 100644 index 0000000..aeac8d9 --- /dev/null +++ b/pkgs/matrix-appservice-discord/reactions-as-mxc-urls.patch @@ -0,0 +1,100 @@ +diff --git a/src/bot.ts b/src/bot.ts +index 4445aa6..8613b5a 100644 +--- a/src/bot.ts ++++ b/src/bot.ts +@@ -1199,7 +1199,9 @@ export class DiscordBot { + + public async OnMessageReactionAdd(reaction: Discord.MessageReaction, user: Discord.User | Discord.PartialUser) { + const message = reaction.message; +- const reactionName = reaction.emoji.name; ++ const reactionName = (reaction.emoji.id ++ ? await this.GetEmoji(reaction.emoji.name, reaction.emoji.animated, reaction.emoji.id) + "#" + reaction.emoji.name ++ : reaction.emoji.name); + log.verbose(`Got message reaction add event for ${message.id} with ${reactionName}`); + + const storeEvent = await this.store.Get(DbEvent, { +@@ -1229,7 +1231,7 @@ export class DiscordBot { + const reactionEventId = await intent.underlyingClient.unstableApis.addReactionToEvent( + roomId, + eventId, +- reaction.emoji.id ? `:${reactionName}:` : reactionName ++ reactionName, + ); + + const event = new DbEvent(); +@@ -1246,7 +1248,10 @@ export class DiscordBot { + + public async OnMessageReactionRemove(reaction: Discord.MessageReaction, user: Discord.User | Discord.PartialUser) { + const message = reaction.message; +- log.verbose(`Got message reaction remove event for ${message.id} with ${reaction.emoji.name}`); ++ const reactionName = (reaction.emoji.id ++ ? await this.GetEmoji(reaction.emoji.name, reaction.emoji.animated, reaction.emoji.id) + "#" + reaction.emoji.name ++ : reaction.emoji.name); ++ log.verbose(`Got message reaction remove event for ${message.id} with ${reactionName}`); + + const storeEvent = await this.store.Get(DbEvent, { + discord_id: message.id, +@@ -1274,7 +1279,7 @@ export class DiscordBot { + + const underlyingClient = intent.underlyingClient; + +- const { chunk } = await underlyingClient.unstableApis.getRelationsForEvent( ++ const { chunk } = await underlyingClient.getRelationsForEvent( + roomId, + eventId, + "m.annotation" +@@ -1285,7 +1290,7 @@ export class DiscordBot { + return false; + } + +- return event.content["m.relates_to"].key === reaction.emoji.name; ++ return event.content["m.relates_to"].key === reactionName; + }); + + if (!event) { +@@ -1324,7 +1329,7 @@ export class DiscordBot { + const [ eventId, roomId ] = storeEvent.MatrixId.split(";"); + const underlyingClient = this.bridge.botIntent.underlyingClient; + +- const { chunk } = await underlyingClient.unstableApis.getRelationsForEvent( ++ const { chunk } = await underlyingClient.getRelationsForEvent( + roomId, + eventId, + "m.annotation" +diff --git a/test/mocks/appservicemock.ts b/test/mocks/appservicemock.ts +index 06cc3ce..f6ef585 100644 +--- a/test/mocks/appservicemock.ts ++++ b/test/mocks/appservicemock.ts +@@ -281,6 +281,10 @@ class MatrixClientMock extends AppserviceMockBase { + public async redactEvent(roomId: string, eventId: string, reason?: string | null) { + this.funcCalled("redactEvent", roomId, eventId, reason); + } ++ ++ public async getRelationsForEvent(roomId: string, eventId: string, relationType?: string, eventType?: string): Promise { ++ this.funcCalled("getRelationsForEvent", roomId, eventId, relationType, eventType); ++ } + } + + class UnstableApis extends AppserviceMockBase { +@@ -288,8 +292,4 @@ class UnstableApis extends AppserviceMockBase { + public async addReactionToEvent(roomId: string, eventId: string, emoji: string) { + this.funcCalled("addReactionToEvent", roomId, eventId, emoji); + } +- +- public async getRelationsForEvent(roomId: string, eventId: string, relationType?: string, eventType?: string): Promise { +- this.funcCalled("getRelationsForEvent", roomId, eventId, relationType, eventType); +- } + } +diff --git a/test/test_discordbot.ts b/test/test_discordbot.ts +index 9c9e469..2109bb7 100644 +--- a/test/test_discordbot.ts ++++ b/test/test_discordbot.ts +@@ -501,7 +501,7 @@ describe("DiscordBot", () => { + discordBot = getDiscordBot(); + const intent = mockBridge.getIntent(author.id); + +- intent.underlyingClient.unstableApis.getRelationsForEvent = async () => { ++ intent.underlyingClient.getRelationsForEvent = async () => { + return { + chunk: [ + { diff --git a/pkgs/matrix-appservice-discord/reduce-spamminess.patch b/pkgs/matrix-appservice-discord/reduce-spamminess.patch new file mode 100644 index 0000000..56b67c7 --- /dev/null +++ b/pkgs/matrix-appservice-discord/reduce-spamminess.patch @@ -0,0 +1,28 @@ +diff --git a/src/config.ts b/src/config.ts +index 1e2f862..fd6e411 100644 +--- a/src/config.ts ++++ b/src/config.ts +@@ -163,7 +163,7 @@ export class LoggingFile { + + class DiscordBridgeConfigGhosts { + public nickPattern: string = ":nick"; +- public usernamePattern: string = ":username#:tag"; ++ public usernamePattern: string = ":username"; + } + + export class DiscordBridgeConfigMetrics { +diff --git a/src/usersyncroniser.ts b/src/usersyncroniser.ts +index b82722d..fb534c6 100644 +--- a/src/usersyncroniser.ts ++++ b/src/usersyncroniser.ts +@@ -207,6 +207,10 @@ export class UserSyncroniser { + log.warn("Remote user wasn't found, using blank avatar"); + } + const intent = this.bridge.getIntentForUserId(memberState.mxUserId); ++ const oldState = await intent.underlyingClient.getRoomStateEvent(roomId, "m.room.member", memberState.mxUserId); ++ if (oldState && (oldState.avatar_url || "") == avatar && (oldState.displayname || "") == memberState.displayName) { ++ return; ++ } + /* The intent class tries to be smart and deny a state update for