diff --git a/src/SlashCommands.js b/src/SlashCommands.js index 72ace22cb6..5ed1adb40f 100644 --- a/src/SlashCommands.js +++ b/src/SlashCommands.js @@ -139,8 +139,13 @@ export const CommandMap = { description: _td('Upgrades a room to a new version'), runFn: function(roomId, args) { if (args) { - const room = MatrixClientPeg.get().getRoom(roomId); - Modal.createTrackedDialog('Slash Commands', 'upgrade room confirmation', + const cli = MatrixClientPeg.get(); + const room = cli.getRoom(roomId); + if (!room.currentState.mayClientSendStateEvent("m.room.tombstone", cli)) { + return reject(_t("You do not have the required permissions to use this command.")); + } + + const {finished} = Modal.createTrackedDialog('Slash Commands', 'upgrade room confirmation', QuestionDialog, { title: _t('Room upgrade confirmation'), description: ( @@ -198,13 +203,13 @@ export const CommandMap = { ), button: _t("Upgrade"), - onFinished: (confirm) => { - if (!confirm) return; - - MatrixClientPeg.get().upgradeRoom(roomId, args); - }, }); - return success(); + + return success(finished.then((confirm) => { + if (!confirm) return; + + return cli.upgradeRoom(roomId, args); + })); } return reject(this.getUsage()); }, diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js index c4b1ae8ddc..581c4314bc 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js @@ -30,6 +30,7 @@ const plEventsToLabels = { "m.room.history_visibility": _td("Change history visibility"), "m.room.power_levels": _td("Change permissions"), "m.room.topic": _td("Change topic"), + "m.room.tombstone": _td("Upgrade the room"), "im.vector.modular.widgets": _td("Modify widgets"), }; @@ -42,6 +43,7 @@ const plEventsToShow = { "m.room.history_visibility": {isState: true}, "m.room.power_levels": {isState: true}, "m.room.topic": {isState: true}, + "m.room.tombstone": {isState: true}, "im.vector.modular.widgets": {isState: true}, }; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 2930adb145..f990d93112 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -146,6 +146,7 @@ "/ddg is not a command": "/ddg is not a command", "To use it, just wait for autocomplete results to load and tab through them.": "To use it, just wait for autocomplete results to load and tab through them.", "Upgrades a room to a new version": "Upgrades a room to a new version", + "You do not have the required permissions to use this command.": "You do not have the required permissions to use this command.", "Room upgrade confirmation": "Room upgrade confirmation", "Upgrading a room can be destructive and isn't always necessary.": "Upgrading a room can be destructive and isn't always necessary.", "Room upgrades are usually recommended when a room version is considered unstable. Unstable room versions might have bugs, missing features, or security vulnerabilities.": "Room upgrades are usually recommended when a room version is considered unstable. Unstable room versions might have bugs, missing features, or security vulnerabilities.", @@ -680,6 +681,7 @@ "Change history visibility": "Change history visibility", "Change permissions": "Change permissions", "Change topic": "Change topic", + "Upgrade the room": "Upgrade the room", "Modify widgets": "Modify widgets", "Failed to unban": "Failed to unban", "Unban": "Unban",