Basic room disco info

This commit is contained in:
Bohdan Horbeshko 2022-07-08 08:43:44 -04:00
parent 63f12202d0
commit 7ef32096af
2 changed files with 33 additions and 13 deletions

View file

@ -1075,13 +1075,10 @@ func (c *Client) GetGroupChats() []*client.Chat {
if err == nil {
for _, id := range chats.ChatIds {
chat, _, _ := c.GetContactByID(id, nil)
if chat != nil {
typ := chat.Type.ChatTypeType()
if typ == client.TypeChatTypeBasicGroup {
if chat != nil && c.IsGroup(chat) {
groupChats = append(groupChats, chat)
}
}
}
} else {
log.Errorf("Could not retrieve chats: %v", err)
}
@ -1089,6 +1086,12 @@ func (c *Client) GetGroupChats() []*client.Chat {
return groupChats
}
// IsGroup determines if a chat is eligible to be represented as MUC
func (c *Client) IsGroup(chat *client.Chat) bool {
typ := chat.Type.ChatTypeType()
return typ == client.TypeChatTypeBasicGroup
}
// subscribe to a Telegram ID
func (c *Client) subscribeToID(id int64, chat *client.Chat) {
var args []args.V

View file

@ -339,20 +339,37 @@ func handleGetDisco(dt discoType, s xmpp.Sender, iq *stanza.IQ) {
if dt == discoTypeInfo {
disco := answer.DiscoInfo()
_, ok := toToID(iq.To)
if ok {
toID, toOk := toToID(iq.To)
if toOk {
disco.AddIdentity("", "account", "registered")
} else {
disco.AddIdentity("Telegram Gateway", "gateway", "telegram")
}
bare, _, ok := splitFrom(iq.From)
if ok {
session, ok := sessions[bare]
if ok && session.Session.MUC {
bare, _, fromOk := splitFrom(iq.From)
if fromOk {
session, sessionOk := sessions[bare]
if sessionOk && session.Session.MUC {
if toOk {
chat, _, err := session.GetContactByID(toID, nil)
if err == nil && session.IsGroup(chat) {
disco.AddIdentity(chat.Title, "conference", "text")
}
disco.AddFeatures(
"http://jabber.org/protocol/muc",
"muc_persistent",
"muc_hidden",
"muc_membersonly",
"muc_unmoderated",
"muc_nonanonymous",
"muc_unsecured",
)
} else {
disco.AddFeatures(stanza.NSDiscoItems)
disco.AddIdentity("Telegram group chats", "conference", "text")
}
}
}
answer.Payload = disco
} else if dt == discoTypeItems {
disco := answer.DiscoItems()