diff options
Diffstat (limited to 'telegram/utils.go')
-rw-r--r-- | telegram/utils.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/telegram/utils.go b/telegram/utils.go index 9a247c4..7fa13d3 100644 --- a/telegram/utils.go +++ b/telegram/utils.go @@ -253,6 +253,20 @@ func (c *Client) ProcessStatusUpdate(chatID int64, status string, show string, o newArgs = append(newArgs, gateway.SPType(presenceType)) } + ver, ok := c.cache.GetCapsVer(chatID) + if !ok { + if c.isCallable(chat, user) { + ver, err = gateway.GetCapsVer([]gateway.CapsType{gateway.CapsAudio}}) + if err != nil { + log.Errorf("<caps ver error: %s>", err.Error()) + } + } + c.cache.SetCapsVer(ver) + } + if ver != "" { + newArgs = append(newArgs, gateway.SPCaps(ver)) + } + return gateway.SendPresence( c.xmpp, c.jid, @@ -1248,3 +1262,23 @@ func (c *Client) prepareDiskSpace(size uint64) { } } } + +func (c *Client) isCallable(chat *client.Chat, user, *client.User) bool { + if chat == nil || user == nil { + return false + } + chatType := chat.Type.ChatTypeType() + if chatType == client.TypeChatTypePrivate { + privateType, _ := chat.Type.(*client.ChatTypePrivate) + fullInfo, err := c.client.GetUserFullInfo(&client.GetUserFullInfoRequest{ + UserId: privateType.UserId, + }) + if err == nil { + return fullInfo.CanBeCalled && (user.Username != "" || user.PhoneNumber != "") + } else { + log.Warnf("Coudln't retrieve private chat info: %v", err.Error()) + } + } + + return false +} |