mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 12:17:06 +00:00
Move to new MUC on upgrading basic group to supergroup
This commit is contained in:
parent
b2c4ade6b9
commit
47179e9c77
2 changed files with 20 additions and 13 deletions
|
|
@ -240,7 +240,7 @@ func (c *Client) Disconnect(resource string, quit bool) bool {
|
|||
if c.Session.MUC {
|
||||
c.locks.mucCacheLock.Lock()
|
||||
for chatID := range c.mucCache {
|
||||
c.kickMeFromMUC(chatID, []uint16{110, 332}, false, nil)
|
||||
c.kickMeFromMUC(chatID, []uint16{110, 332}, false, c.mucCache[chatID])
|
||||
}
|
||||
c.locks.mucCacheLock.Unlock()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -661,19 +661,22 @@ func (c *Client) DestroyMUC(chatId int64) error {
|
|||
return err
|
||||
}
|
||||
|
||||
c.deleteMUC(chatId, nil, true)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Client) deleteMUC(chatId int64, statusCodes []uint16, destroy bool) {
|
||||
c.locks.mucCacheLock.Lock()
|
||||
defer c.locks.mucCacheLock.Unlock()
|
||||
|
||||
mucState, ok := c.mucCache[chatId]
|
||||
if !ok || mucState == nil {
|
||||
return nil
|
||||
return
|
||||
}
|
||||
|
||||
c.kickMeFromMUC(chatId, nil, true, mucState)
|
||||
|
||||
c.kickMeFromMUC(chatId, statusCodes, destroy, mucState)
|
||||
delete(c.mucCache, chatId)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Client) sendMUCStatuses(chatID int64) {
|
||||
|
|
@ -1817,9 +1820,16 @@ func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
|
|||
case client.TypeMessageChatDeleteMember:
|
||||
deleteMember, _ := message.Content.(*client.MessageChatDeleteMember)
|
||||
c.mucOccupantRolePresence(chatId, deleteMember.UserId, ChatMemberStatusKicked, c.GetMUCNickname(deleteMember.UserId))
|
||||
case client.TypeMessageBasicGroupChatCreate, client.TypeMessageSupergroupChatCreate:
|
||||
case client.TypeMessageBasicGroupChatCreate, client.TypeMessageSupergroupChatCreate, client.TypeMessageChatUpgradeTo:
|
||||
inviteChatId := chatId
|
||||
if message.Content.MessageContentType() == client.TypeMessageChatUpgradeTo {
|
||||
c.deleteMUC(chatId, nil, true)
|
||||
|
||||
upgradeTo, _ := message.Content.(*client.MessageChatUpgradeTo)
|
||||
inviteChatId = -1000000000000 - upgradeTo.SupergroupId // 🫃
|
||||
}
|
||||
for _, jid := range c.GetCarbonFullJids(true, "", false) {
|
||||
gateway.InviteToMUC(chatId, jid, c.xmpp)
|
||||
gateway.InviteToMUC(inviteChatId, jid, c.xmpp)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2908,7 +2918,7 @@ func (c *Client) kickMeFromMUC(chatID int64, statusCodes []uint16, destroy bool,
|
|||
if c.me != nil {
|
||||
myJid = gateway.CHATJID(c.me.Id, true)
|
||||
}
|
||||
_, toJids := c.getMUCJoinedJIDs(chatID, mucState, false)
|
||||
_, toJids := c.getMUCJoinedJIDs(chatID, mucState, mucState == nil)
|
||||
args := []args.V{
|
||||
gateway.SPFrom(gateway.MUCNODE(chatID)),
|
||||
gateway.SPResource(c.GetMUCNickname(0)),
|
||||
|
|
@ -2979,13 +2989,10 @@ func (c *Client) MigrateFromMUCs() {
|
|||
chatIDs = append(chatIDs, chat.Id)
|
||||
}
|
||||
|
||||
c.locks.mucCacheLock.Lock()
|
||||
for _, chatID := range chatIDs {
|
||||
c.kickMeFromMUC(chatID, []uint16{110, 332}, false, nil)
|
||||
delete(c.mucCache, chatID)
|
||||
c.deleteMUC(chatID, []uint16{110, 332}, false)
|
||||
c.subscribeToID(chatID, nil, false)
|
||||
}
|
||||
c.locks.mucCacheLock.Unlock()
|
||||
}
|
||||
|
||||
// SetChatMemberStatus is a handy wrapper for the following TDLib method
|
||||
|
|
|
|||
Loading…
Reference in a new issue