From fe4d834c7248063d5aa09664b4b43693cd6f706a Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 19 Nov 2021 10:49:34 +0000 Subject: [PATCH] Disable op/deop commands where user has no permissions (#7161) --- src/SlashCommands.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index f172e6ecc60..1ceaf910aef 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -19,6 +19,7 @@ limitations under the License. import * as React from 'react'; import { User } from "matrix-js-sdk/src/models/user"; +import { EventType } from "matrix-js-sdk/src/@types/event"; import * as ContentHelpers from 'matrix-js-sdk/src/content-helpers'; import { MatrixClientPeg } from './MatrixClientPeg'; @@ -58,6 +59,7 @@ import SlashCommandHelpDialog from "./components/views/dialogs/SlashCommandHelpD import { logger } from "matrix-js-sdk/src/logger"; import { shouldShowComponent } from "./customisations/helpers/UIComponents"; import { TimelineRenderingType } from './contexts/RoomContext'; +import RoomViewStore from "./stores/RoomViewStore"; // XXX: workaround for https://github.com/microsoft/TypeScript/issues/31816 interface HTMLInputEvent extends Event { @@ -748,6 +750,11 @@ export const Commands = [ command: 'op', args: ' []', description: _td('Define the power level of a user'), + isEnabled(): boolean { + const cli = MatrixClientPeg.get(); + const room = cli.getRoom(RoomViewStore.getRoomId()); + return room?.currentState.maySendStateEvent(EventType.RoomPowerLevels, cli.getUserId()); + }, runFn: function(roomId, args) { if (args) { const matches = args.match(/^(\S+?)( +(-?\d+))?$/); @@ -779,6 +786,11 @@ export const Commands = [ command: 'deop', args: '', description: _td('Deops user with given id'), + isEnabled(): boolean { + const cli = MatrixClientPeg.get(); + const room = cli.getRoom(RoomViewStore.getRoomId()); + return room?.currentState.maySendStateEvent(EventType.RoomPowerLevels, cli.getUserId()); + }, runFn: function(roomId, args) { if (args) { const matches = args.match(/^(\S+)$/);