You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.4 KiB

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)
}