Automatically unbridge guild when leaving if it has no other Matrix users

This commit is contained in:
Tulir Asokan
2023-01-27 21:06:29 +02:00
parent 587cf8a17e
commit 7d959c92dc
5 changed files with 23 additions and 3 deletions

11
user.go
View File

@@ -780,7 +780,12 @@ func (user *User) guildDeleteHandler(_ *discordgo.Session, g *discordgo.GuildDel
if guild == nil || guild.MXID == "" {
return
}
// TODO clean up?
if user.bridge.Config.Bridge.DeleteGuildOnLeave && !user.PortalHasOtherUsers(g.ID) {
err := user.unbridgeGuild(g.ID)
if err != nil {
user.log.Warnfln("Failed to unbridge guild that was deleted: %v", err)
}
}
}
func (user *User) guildUpdateHandler(_ *discordgo.Session, g *discordgo.GuildUpdate) {
@@ -1086,8 +1091,8 @@ func (user *User) bridgeGuild(guildID string, everything bool) error {
}
func (user *User) unbridgeGuild(guildID string) error {
if user.PermissionLevel < bridgeconfig.PermissionLevelAdmin {
return errors.New("only bridge admins can unbridge guilds")
if user.PermissionLevel < bridgeconfig.PermissionLevelAdmin && user.PortalHasOtherUsers(guildID) {
return errors.New("only bridge admins can unbridge guilds with other users")
}
guild := user.bridge.GetGuildByID(guildID, false)
if guild == nil {