aboutsummaryrefslogtreecommitdiff
path: root/telegram/utils.go
diff options
context:
space:
mode:
Diffstat (limited to 'telegram/utils.go')
-rw-r--r--telegram/utils.go34
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
+}