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.
54 lines
1.4 KiB
54 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) |
|
}
|
|
|