Эх сурвалжийг харах

Require room admin for set-relay

Tulir Asokan 2 жил өмнө
parent
commit
39096c9347
3 өөрчлөгдсөн 20 нэмэгдсэн , 5 устгасан
  1. 17 2
      commands.go
  2. 1 1
      go.mod
  3. 2 2
      go.sum

+ 17 - 2
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{
 var cmdSetRelay = &commands.FullHandler{
 	Func: wrapCommand(fnSetRelay),
 	Func: wrapCommand(fnSetRelay),
 	Name: "set-relay",
 	Name: "set-relay",
@@ -361,7 +363,8 @@ var cmdSetRelay = &commands.FullHandler{
 		Description: "Create or set a relay webhook for a portal",
 		Description: "Create or set a relay webhook for a portal",
 		Args:        "[room ID] <​--url URL> OR <​--create [name]>",
 		Args:        "[room ID] <​--url URL> OR <​--create [name]>",
 	},
 	},
-	RequiresLogin: true,
+	RequiresLogin:      true,
+	RequiresEventLevel: roomModerator,
 }
 }
 
 
 const webhookURLFormat = "https://discord.com/api/webhooks/%d/%s"
 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])
 			ce.Reply("Portal with room ID %s not found", ce.Args[0])
 			return
 			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:]
 		ce.Args = ce.Args[1:]
 	} else if portal == nil {
 	} 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")
 		ce.Reply("You must either run the command in a portal, or specify an internal room ID as the first parameter")
 		return
 		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)
 		ce.Reply(selectRelayHelp)
 		return
 		return
 	}
 	}

+ 1 - 1
go.mod

@@ -15,7 +15,7 @@ require (
 	github.com/stretchr/testify v1.8.1
 	github.com/stretchr/testify v1.8.1
 	github.com/yuin/goldmark v1.5.4
 	github.com/yuin/goldmark v1.5.4
 	maunium.net/go/maulogger/v2 v2.4.1
 	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 (
 require (

+ 2 - 2
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/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 h1:N7zSdd0mZkB2m2JtFUsiGTQQAdP0YeFWT7YMc80yAL8=
 maunium.net/go/maulogger/v2 v2.4.1/go.mod h1:omPuYwYBILeVQobz8uO3XC8DIRuEb5rXYlQSuqrbCho=
 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=