From 39096c934753bcc1f3d8f8b69c9ee7a10d300cde Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 1 Mar 2023 20:35:50 +0200 Subject: [PATCH] Require room admin for set-relay --- commands.go | 19 +++++++++++++++++-- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/commands.go b/commands.go index 27fd052..83078fc 100644 --- a/commands.go +++ b/commands.go @@ -353,6 +353,8 @@ func fnRejoinSpace(ce *WrappedCommandEvent) { } } +var roomModerator = event.Type{Type: "fi.mau.discord.admin", Class: event.StateEventType} + var cmdSetRelay = &commands.FullHandler{ Func: wrapCommand(fnSetRelay), Name: "set-relay", @@ -361,7 +363,8 @@ var cmdSetRelay = &commands.FullHandler{ Description: "Create or set a relay webhook for a portal", Args: "[room ID] <​--url URL> OR <​--create [name]>", }, - RequiresLogin: true, + RequiresLogin: true, + RequiresEventLevel: roomModerator, } const webhookURLFormat = "https://discord.com/api/webhooks/%d/%s" @@ -376,12 +379,24 @@ func fnSetRelay(ce *WrappedCommandEvent) { ce.Reply("Portal with room ID %s not found", ce.Args[0]) return } + levels, err := portal.MainIntent().PowerLevels(ce.RoomID) + if err != nil { + ce.ZLog.Warn().Err(err).Msg("Failed to check room power levels") + ce.Reply("Failed to get room power levels to see if you're allowed to use that command") + return + } else if levels.GetUserLevel(ce.User.GetMXID()) < levels.GetEventLevel(roomModerator) { + ce.Reply("You don't have admin rights in that room") + return + } ce.Args = ce.Args[1:] } else if portal == nil { ce.Reply("You must either run the command in a portal, or specify an internal room ID as the first parameter") return } - if len(ce.Args) == 0 { + if ce.Portal.GuildID == "" { + ce.Reply("Only guild channels can have relays") + return + } else if len(ce.Args) == 0 { ce.Reply(selectRelayHelp) return } diff --git a/go.mod b/go.mod index 98744e8..4fdf42f 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/stretchr/testify v1.8.1 github.com/yuin/goldmark v1.5.4 maunium.net/go/maulogger/v2 v2.4.1 - maunium.net/go/mautrix v0.15.0-beta.1.0.20230227211640-c8b3566fb7ba + maunium.net/go/mautrix v0.15.0-beta.1.0.20230301180623-8c998379fb12 ) require ( diff --git a/go.sum b/go.sum index e6a6d9f..daee64f 100644 --- a/go.sum +++ b/go.sum @@ -82,5 +82,5 @@ maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M= maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA= maunium.net/go/maulogger/v2 v2.4.1 h1:N7zSdd0mZkB2m2JtFUsiGTQQAdP0YeFWT7YMc80yAL8= maunium.net/go/maulogger/v2 v2.4.1/go.mod h1:omPuYwYBILeVQobz8uO3XC8DIRuEb5rXYlQSuqrbCho= -maunium.net/go/mautrix v0.15.0-beta.1.0.20230227211640-c8b3566fb7ba h1:OS+zjLTyeqxzMcgnbBbXlZSr0B2yfalCo2lNhC2wP5A= -maunium.net/go/mautrix v0.15.0-beta.1.0.20230227211640-c8b3566fb7ba/go.mod h1:AE3TCX9q4W7fYfrL/1RsuOell9rTUBO27XUULuwArH4= +maunium.net/go/mautrix v0.15.0-beta.1.0.20230301180623-8c998379fb12 h1:QtjG/0TJIC7DnkksGQsElLXkFG2LPhgB9XksYXdbZbE= +maunium.net/go/mautrix v0.15.0-beta.1.0.20230301180623-8c998379fb12/go.mod h1:AE3TCX9q4W7fYfrL/1RsuOell9rTUBO27XUULuwArH4=