Add support for unbridging guilds

This commit is contained in:
Tulir Asokan
2023-01-13 17:01:23 +02:00
parent 856f9a40fa
commit 9d84faa954
4 changed files with 78 additions and 46 deletions

View File

@@ -177,6 +177,10 @@ func (br *DiscordBridge) GetAllPortals() []*Portal {
return br.dbPortalsToPortals(br.DB.Portal.GetAll())
}
func (br *DiscordBridge) GetAllPortalsInGuild(guildID string) []*Portal {
return br.dbPortalsToPortals(br.DB.Portal.GetAllInGuild(guildID))
}
func (br *DiscordBridge) GetAllIPortals() (iportals []bridge.Portal) {
portals := br.GetAllPortals()
iportals = make([]bridge.Portal, len(portals))
@@ -1291,6 +1295,12 @@ func (portal *Portal) RemoveMXID() {
}
delete(portal.bridge.portalsByMXID, portal.MXID)
portal.MXID = ""
portal.AvatarSet = false
portal.NameSet = false
portal.TopicSet = false
portal.Encrypted = false
portal.InSpace = ""
portal.FirstEventID = ""
portal.Update()
portal.bridge.DB.Message.DeleteAll(portal.Key)
}
@@ -1316,9 +1326,13 @@ func (portal *Portal) cleanup(puppetsOnly bool) {
return
}
members, err := intent.JoinedMembers(portal.MXID)
portal.bridge.cleanupRoom(intent, portal.MXID, puppetsOnly, portal.log)
}
func (br *DiscordBridge) cleanupRoom(intent *appservice.IntentAPI, mxid id.RoomID, puppetsOnly bool, log log.Logger) {
members, err := intent.JoinedMembers(mxid)
if err != nil {
portal.log.Errorln("Failed to get portal members for cleanup:", err)
log.Errorln("Failed to get portal members for cleanup:", err)
return
}
@@ -1327,23 +1341,23 @@ func (portal *Portal) cleanup(puppetsOnly bool) {
continue
}
puppet := portal.bridge.GetPuppetByMXID(member)
puppet := br.GetPuppetByMXID(member)
if puppet != nil {
_, err = puppet.DefaultIntent().LeaveRoom(portal.MXID)
_, err = puppet.DefaultIntent().LeaveRoom(mxid)
if err != nil {
portal.log.Errorln("Error leaving as puppet while cleaning up portal:", err)
log.Errorln("Error leaving as puppet while cleaning up portal:", err)
}
} else if !puppetsOnly {
_, err = intent.KickUser(portal.MXID, &mautrix.ReqKickUser{UserID: member, Reason: "Deleting portal"})
_, err = intent.KickUser(mxid, &mautrix.ReqKickUser{UserID: member, Reason: "Deleting portal"})
if err != nil {
portal.log.Errorln("Error kicking user while cleaning up portal:", err)
log.Errorln("Error kicking user while cleaning up portal:", err)
}
}
}
_, err = intent.LeaveRoom(portal.MXID)
_, err = intent.LeaveRoom(mxid)
if err != nil {
portal.log.Errorln("Error leaving with main intent while cleaning up portal:", err)
log.Errorln("Error leaving with main intent while cleaning up portal:", err)
}
}