From b52570a87eef76eb9f8f9f6df99ca4f6cd3da5c3 Mon Sep 17 00:00:00 2001
From: Will Hunt <will@half-shot.uk>
Date: Thu, 18 Jul 2019 23:46:11 +0100
Subject: [PATCH] Further tweaks

---
 package-lock.json             | 40 +++++++++++++++++------------------
 package.json                  |  2 +-
 src/channelsyncroniser.ts     | 27 +++++++++++------------
 src/matrixeventprocessor.ts   | 14 ++++++------
 src/matrixmessageprocessor.ts |  3 +--
 src/util.ts                   | 10 ++++-----
 6 files changed, 48 insertions(+), 48 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index dee36c5..636de9f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -236,9 +236,9 @@
       }
     },
     "ajv": {
-      "version": "6.10.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
-      "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
       "requires": {
         "fast-deep-equal": "^2.0.1",
         "fast-json-stable-stringify": "^2.0.0",
@@ -2385,9 +2385,9 @@
       "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
     },
     "lodash.mergewith": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
-      "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ=="
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+      "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="
     },
     "lodash.padend": {
       "version": "4.6.1",
@@ -2494,8 +2494,8 @@
       }
     },
     "matrix-bot-sdk": {
-      "version": "0.4.0-beta.3",
-      "resolved": "github:turt2live/matrix-js-bot-sdk#0c3d9bcde0157a638fa4c3573d6201e4d56d2a1e",
+      "version": "github:half-shot/matrix-js-bot-sdk#7517cbbb7ae6405d271bf6d3da702dab5161ecfa",
+      "from": "github:half-shot/matrix-js-bot-sdk#hs/roomMembers",
       "requires": {
         "@types/node": "^10.14.9",
         "bluebird": "^3.5.5",
@@ -2513,9 +2513,9 @@
       },
       "dependencies": {
         "@types/node": {
-          "version": "10.14.9",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.9.tgz",
-          "integrity": "sha512-NelG/dSahlXYtSoVPErrp06tYFrvzj8XLWmKA+X8x0W//4MqbUyZu++giUG/v0bjAT6/Qxa8IjodrfdACyb0Fg=="
+          "version": "10.14.13",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz",
+          "integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ=="
         },
         "lru-cache": {
           "version": "5.1.1",
@@ -2526,9 +2526,9 @@
           }
         },
         "tslint": {
-          "version": "5.17.0",
-          "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.17.0.tgz",
-          "integrity": "sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w==",
+          "version": "5.18.0",
+          "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz",
+          "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==",
           "requires": {
             "@babel/code-frame": "^7.0.0",
             "builtin-modules": "^1.1.1",
@@ -2546,9 +2546,9 @@
           }
         },
         "typescript": {
-          "version": "3.5.2",
-          "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
-          "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
+          "version": "3.5.3",
+          "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
+          "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
         }
       }
     },
@@ -3355,9 +3355,9 @@
       "dev": true
     },
     "psl": {
-      "version": "1.1.32",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz",
-      "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g=="
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
+      "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA=="
     },
     "pump": {
       "version": "3.0.0",
diff --git a/package.json b/package.json
index 0401f60..4f21295 100644
--- a/package.json
+++ b/package.json
@@ -45,7 +45,7 @@
     "escape-html": "^1.0.3",
     "escape-string-regexp": "^1.0.5",
     "js-yaml": "^3.13.1",
-    "matrix-bot-sdk": "0.4.0-beta.3",
+    "matrix-bot-sdk": "half-shot/matrix-js-bot-sdk#hs/roomMembers",
     "mime": "^1.6.0",
     "node-html-parser": "^1.1.15",
     "pg-promise": "^8.5.1",
diff --git a/src/channelsyncroniser.ts b/src/channelsyncroniser.ts
index ee1cb85..136b9ce 100644
--- a/src/channelsyncroniser.ts
+++ b/src/channelsyncroniser.ts
@@ -335,6 +335,7 @@ export class ChannelSyncroniser {
         overrideOptions?: DiscordBridgeConfigChannelDeleteOptions): Promise<void> {
         log.info(`Deleting ${channel.id} from ${roomId}.`);
         const intent = this.bridge.botIntent;
+        const client = this.bridge.botClient;
         const options = overrideOptions || this.config.channel.deleteOptions;
         const plumbed = entry.remote!.get("plumbed");
 
@@ -343,7 +344,7 @@ export class ChannelSyncroniser {
             for (const member of channel.members.array()) {
                 try {
                     const mIntent = this.bot.GetIntentFromDiscordMember(member);
-                    await mIntent.underlyingClient.leaveRoom(roomId);
+                    await client.leaveRoom(roomId);
                     log.verbose(`${member.id} left ${roomId}.`);
                 } catch (e) {
                     log.warn(`Failed to make ${member.id} leave `);
@@ -352,9 +353,9 @@ export class ChannelSyncroniser {
         }
         if (options.namePrefix) {
             try {
-                const name = await intent.underlyingClient.getRoomStateEvent(roomId, "m.room.name", "");
+                const name = await client.getRoomStateEvent(roomId, "m.room.name", "");
                 name.name = options.namePrefix + name.name;
-                await intent.underlyingClient.sendStateEvent(
+                await client.sendStateEvent(
                     roomId,
                     "m.room.name",
                     "",
@@ -366,9 +367,9 @@ export class ChannelSyncroniser {
         }
         if (options.topicPrefix) {
             try {
-                const topic = await intent.underlyingClient.getRoomStateEvent(roomId, "m.room.topic", "");
+                const topic = await client.getRoomStateEvent(roomId, "m.room.topic", "");
                 topic.topic = options.topicPrefix + topic.topic;
-                await intent.underlyingClient.sendStateEvent(
+                await client.sendStateEvent(
                     roomId,
                     "m.room.topic",
                     "",
@@ -383,15 +384,15 @@ export class ChannelSyncroniser {
             if (options.unsetRoomAlias) {
                 try {
                     const alias = `#_${entry.remote!.roomId}:${this.config.bridge.domain}`;
-                    const canonicalAlias = await intent.underlyingClient.getRoomStateEvent(
+                    const canonicalAlias = await client.getRoomStateEvent(
                         roomId,
                         "m.room.canonical_alias",
-                        ""
+                        "",
                     );
                     if (canonicalAlias.alias === alias) {
-                        await intent.underlyingClient.sendStateEvent(roomId, "m.room.canonical_alias", "", {});
+                        await client.sendStateEvent(roomId, "m.room.canonical_alias", "", {});
                     }
-                    await intent.underlyingClient.deleteRoomAlias(alias);
+                    await client.deleteRoomAlias(alias);
                 } catch (e) {
                     log.error(`Couldn't remove alias of ${roomId} ${e}`);
                 }
@@ -399,7 +400,7 @@ export class ChannelSyncroniser {
 
             if (options.unlistFromDirectory) {
                 try {
-                    await intent.underlyingClient.setDirectoryVisibility(roomId, "private");
+                    await client.setDirectoryVisibility(roomId, "private");
                 } catch (e) {
                     log.error(`Couldn't remove ${roomId} from room directory ${e}`);
                 }
@@ -408,7 +409,7 @@ export class ChannelSyncroniser {
 
             if (options.setInviteOnly) {
                 try {
-                    await intent.underlyingClient.sendStateEvent(
+                    await client.sendStateEvent(
                         roomId,
                         "m.room.join_rules",
                         "",
@@ -421,9 +422,9 @@ export class ChannelSyncroniser {
 
             if (options.disableMessaging) {
                 try {
-                    const state = await intent.underlyingClient.getRoomStateEvent(roomId, "m.room.power_levels", "");
+                    const state = await client.getRoomStateEvent(roomId, "m.room.power_levels", "");
                     state.events_default = POWER_LEVEL_MESSAGE_TALK;
-                    await intent.underlyingClient.sendStateEvent(roomId, "m.room.power_levels", "", state);
+                    await client.sendStateEvent(roomId, "m.room.power_levels", "", state);
                 } catch (e) {
                     log.error(`Couldn't disable messaging for ${roomId} ${e}`);
                 }
diff --git a/src/matrixeventprocessor.ts b/src/matrixeventprocessor.ts
index cdc6b5a..4cbc721 100644
--- a/src/matrixeventprocessor.ts
+++ b/src/matrixeventprocessor.ts
@@ -322,13 +322,13 @@ export class MatrixEventProcessor {
 
         let size = event.content.info.size || 0;
         const name = this.GetFilenameForMediaEvent(event.content);
-        const url = Util.GetUrlFromMxc(event.content.url, this.config.bridge.homeserverUrl);
+        const url = this.bridge.botClient.mxcToHttp(event.content.url);
         if (size < MaxFileSize) {
-            const attachment = await this.bridge.botIntent.underlyingClient.downloadContent(event.content.url);
-            size = attachment.data.byteLength;
+            const attachment = await Util.DownloadFile(url);
+            size = attachment.byteLength;
             if (size < MaxFileSize) {
                 return {
-                    attachment: attachment.data,
+                    attachment,
                     name,
                 } as Discord.FileOptions;
             }
@@ -372,7 +372,7 @@ export class MatrixEventProcessor {
             replyEmbed.setTimestamp(new Date(sourceEvent.origin_server_ts!));
 
             if (this.HasAttachment(sourceEvent)) {
-                const url = Util.GetUrlFromMxc(sourceEvent.content!.url!, this.config.bridge.homeserverUrl);
+                const url = this.bridge.botClient.mxcToHttp(sourceEvent.content!.url!);
                 if (["m.image", "m.sticker"].includes(sourceEvent.content!.msgtype as string)
                     || sourceEvent.type === "m.sticker") {
                     // we have an image reply
@@ -492,11 +492,11 @@ export class MatrixEventProcessor {
             }
 
             if (profile.avatar_url) {
-                avatarUrl = Util.GetUrlFromMxc(
+                avatarUrl = this.bridge.botClient.mxcToHttpThumbnail(
                     profile.avatar_url,
-                    this.config.bridge.homeserverUrl,
                     DISCORD_AVATAR_WIDTH,
                     DISCORD_AVATAR_HEIGHT,
+                    "scale",
                 );
             }
         }
diff --git a/src/matrixmessageprocessor.ts b/src/matrixmessageprocessor.ts
index 3f32ba8..f2a1320 100644
--- a/src/matrixmessageprocessor.ts
+++ b/src/matrixmessageprocessor.ts
@@ -227,9 +227,8 @@ export class MatrixMessageProcessor {
 
         if (!emoji) {
             const content = await this.escapeDiscord(name);
-            const url = this.params && this.params.mxClient ? Util.GetUrlFromMxc(
+            const url = this.params && this.params.mxClient ? this.params.mxClient.mxcToHttp(
                 attrs.src,
-                this.homeserverUrl,
             ) : attrs.src;
             return attrs.src ? `[${content}](${url})` : content;
         }
diff --git a/src/util.ts b/src/util.ts
index ed05fcf..7bab8d6 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -128,8 +128,8 @@ export class Util {
         const matrixUsers = {};
         let matches = 0;
         await Promise.all(channelMxids.map( async (chan) => {
-            (await client.getRoomMembers(chan)).forEach((member) => {
-                if (member.membership !== "join" && member.membership !== "ban") {
+            (await client.getRoomMembers(chan, undefined, "leave")).forEach((member) => {
+                if (member.content.membership !== "invite") {
                     return;
                 }
                 const mxid = member.state_key;
@@ -360,7 +360,7 @@ export class Util {
         return `${homeserverUrl}/_matrix/media/r0/download/${part}`;
     }
 
-    public static ParseMxid(unescapedMxid: string, escape: boolean = true){
+    public static ParseMxid(unescapedMxid: string, escape: boolean = true) {
         const RADIX = 16;
         const parts = unescapedMxid.substr(1).split(":");
         const domain = parts[1];
@@ -379,6 +379,6 @@ export class Util {
             domain,
             localpart,
             mxid: `@${localpart}:${domain}`,
-        }
+        };
     }
-}
\ No newline at end of file
+}
-- 
GitLab