From 6d33138950d68843af1d9a756a3fd1df98cb71f6 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Sat, 11 Apr 2020 16:41:07 +0100
Subject: [PATCH] op/deop return error if trying to affect an unknown user

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
 src/SlashCommands.tsx       | 8 +++++---
 src/i18n/strings/en_EN.json | 3 +++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx
index aac42b6740..71815dde8c 100644
--- a/src/SlashCommands.tsx
+++ b/src/SlashCommands.tsx
@@ -350,7 +350,7 @@ export const Commands = [
                 return success(cli.setRoomTopic(roomId, args));
             }
             const room = cli.getRoom(roomId);
-            if (!room) return reject('Bad room ID: ' + roomId);
+            if (!room) return reject(_t("Failed to set topic"));
 
             const topicEvents = room.currentState.getStateEvents('m.room.topic', '');
             const topic = topicEvents && topicEvents.getContent().topic;
@@ -721,9 +721,10 @@ export const Commands = [
                     if (!isNaN(powerLevel)) {
                         const cli = MatrixClientPeg.get();
                         const room = cli.getRoom(roomId);
-                        if (!room) return reject('Bad room ID: ' + roomId);
+                        if (!room) return reject(_t("Command failed"));
 
                         const powerLevelEvent = room.currentState.getStateEvents('m.room.power_levels', '');
+                        if (!powerLevelEvent.getContent().users[args]) return reject(_t("Could not find user in room"));
                         return success(cli.setPowerLevel(roomId, userId, powerLevel, powerLevelEvent));
                     }
                 }
@@ -742,9 +743,10 @@ export const Commands = [
                 if (matches) {
                     const cli = MatrixClientPeg.get();
                     const room = cli.getRoom(roomId);
-                    if (!room) return reject('Bad room ID: ' + roomId);
+                    if (!room) return reject(_t("Command failed"));
 
                     const powerLevelEvent = room.currentState.getStateEvents('m.room.power_levels', '');
+                    if (!powerLevelEvent.getContent().users[args]) return reject(_t("Could not find user in room"));
                     return success(cli.setPowerLevel(roomId, args, undefined, powerLevelEvent));
                 }
             }
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index ae8ed90402..51a2a59672 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -177,6 +177,7 @@
     "Changes your avatar in this current room only": "Changes your avatar in this current room only",
     "Changes your avatar in all rooms": "Changes your avatar in all rooms",
     "Gets or sets the room topic": "Gets or sets the room topic",
+    "Failed to set topic": "Failed to set topic",
     "This room has no topic.": "This room has no topic.",
     "Sets the room name": "Sets the room name",
     "Invites user with given id to current room": "Invites user with given id to current room",
@@ -196,6 +197,8 @@
     "Unignored user": "Unignored user",
     "You are no longer ignoring %(userId)s": "You are no longer ignoring %(userId)s",
     "Define the power level of a user": "Define the power level of a user",
+    "Command failed": "Command failed",
+    "Could not find user in room": "Could not find user in room",
     "Deops user with given id": "Deops user with given id",
     "Opens the Developer Tools dialog": "Opens the Developer Tools dialog",
     "Adds a custom widget by URL to the room": "Adds a custom widget by URL to the room",