-
-
Notifications
You must be signed in to change notification settings - Fork 135
/
handle_updates.go
54 lines (48 loc) · 1.41 KB
/
handle_updates.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package telegram
import (
"fmt"
"github.com/go-faster/errors"
"go.uber.org/zap"
"github.com/gotd/td/bin"
"github.com/gotd/td/telegram/internal/upconv"
"github.com/gotd/td/tg"
)
func (c *Client) updateInterceptor(updates ...tg.UpdateClass) {
for _, update := range updates {
switch update.(type) {
case *tg.UpdateConfig, *tg.UpdateDCOptions:
c.fetchConfig(c.ctx)
}
}
}
func (c *Client) processUpdates(updates tg.UpdatesClass) error {
switch u := updates.(type) {
case *tg.Updates:
c.updateInterceptor(u.Updates...)
return c.updateHandler.Handle(c.ctx, u)
case *tg.UpdatesCombined:
c.updateInterceptor(u.Updates...)
return c.updateHandler.Handle(c.ctx, u)
case *tg.UpdateShort:
c.updateInterceptor(u.Update)
return c.updateHandler.Handle(c.ctx, u)
case *tg.UpdateShortMessage:
return c.updateHandler.Handle(c.ctx, upconv.ShortMessage(u))
case *tg.UpdateShortChatMessage:
return c.updateHandler.Handle(c.ctx, upconv.ShortChatMessage(u))
case *tg.UpdateShortSentMessage:
return c.updateHandler.Handle(c.ctx, upconv.ShortSentMessage(u))
case *tg.UpdatesTooLong:
return c.updateHandler.Handle(c.ctx, u)
default:
c.log.Warn("Ignoring update", zap.String("update_type", fmt.Sprintf("%T", u)))
}
return nil
}
func (c *Client) handleUpdates(b *bin.Buffer) error {
updates, err := tg.DecodeUpdates(b)
if err != nil {
return errors.Wrap(err, "decode updates")
}
return c.processUpdates(updates)
}