Assure all MUC presences have affiliation/role/realJID

This commit is contained in:
Bohdan Horbeshko 2025-06-25 13:14:54 -04:00
parent 93dcc32480
commit 6d24823bb3
2 changed files with 13 additions and 0 deletions

View file

@ -236,6 +236,10 @@ func (c *Client) Disconnect(resource string, quit bool) bool {
if c.Session.MUC { if c.Session.MUC {
c.locks.mucCacheLock.Lock() c.locks.mucCacheLock.Lock()
var myJid string
if c.me != nil {
myJid = gateway.CHATJID(c.me.Id, true)
}
for chatID := range c.mucCache { for chatID := range c.mucCache {
c.sendPresence( c.sendPresence(
gateway.SPFrom(gateway.MUCNODE(chatID)), gateway.SPFrom(gateway.MUCNODE(chatID)),
@ -243,6 +247,7 @@ func (c *Client) Disconnect(resource string, quit bool) bool {
gateway.SPType("unavailable"), gateway.SPType("unavailable"),
gateway.SPMUCAffiliation("none"), gateway.SPMUCAffiliation("none"),
gateway.SPMUCRole("none"), gateway.SPMUCRole("none"),
gateway.SPMUCJid(myJid),
gateway.SPMUCStatusCodes([]uint16{110, 332}), gateway.SPMUCStatusCodes([]uint16{110, 332}),
) )
} }

View file

@ -607,12 +607,17 @@ func (c *Client) DestroyMUC(chatId int64) error {
for resource := range mucState.Resources { for resource := range mucState.Resources {
toResources = append(toResources, resource) toResources = append(toResources, resource)
} }
var myJid string
if c.me != nil {
myJid = gateway.CHATJID(c.me.Id, true)
}
c.sendPresence( c.sendPresence(
gateway.SPFrom(gateway.MUCNODE(chatId)), gateway.SPFrom(gateway.MUCNODE(chatId)),
gateway.SPResource(c.GetMUCNickname(0)), gateway.SPResource(c.GetMUCNickname(0)),
gateway.SPToResources(toResources), gateway.SPToResources(toResources),
gateway.SPMUCAffiliation("none"), gateway.SPMUCAffiliation("none"),
gateway.SPMUCRole("none"), gateway.SPMUCRole("none"),
gateway.SPMUCJid(myJid),
gateway.SPMUCDestroy(""), gateway.SPMUCDestroy(""),
) )
@ -649,8 +654,10 @@ func (c *Client) sendMUCStatuses(chatID int64) {
func (c *Client) updateMUCOccupants(mucState *MUCState, chatID int64, members []*client.ChatMember) { func (c *Client) updateMUCOccupants(mucState *MUCState, chatID int64, members []*client.ChatMember) {
sChatId := gateway.MUCNODE(chatID) sChatId := gateway.MUCNODE(chatID)
myNickname := "me" myNickname := "me"
var myJid string
if c.me != nil { if c.me != nil {
myNickname = c.getFullName(c.me) myNickname = c.getFullName(c.me)
myJid = gateway.CHATJID(c.me.Id, true)
} }
myAffiliation := "member" myAffiliation := "member"
myRole := "participant" myRole := "participant"
@ -690,6 +697,7 @@ func (c *Client) updateMUCOccupants(mucState *MUCState, chatID int64, members []
gateway.SPImmed(true), gateway.SPImmed(true),
gateway.SPMUCAffiliation(myAffiliation), gateway.SPMUCAffiliation(myAffiliation),
gateway.SPMUCRole(myRole), gateway.SPMUCRole(myRole),
gateway.SPMUCJid(myJid),
gateway.SPMUCStatusCodes([]uint16{100, 110, 210}), gateway.SPMUCStatusCodes([]uint16{100, 110, 210}),
) )
} }