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 )
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .