Files
mautrix-telegram/pkg/gotd/telegram/handle_updates.go
T
2025-06-27 20:03:37 -07:00

48 lines
1.2 KiB
Go

package telegram
import (
"fmt"
"github.com/go-faster/errors"
"go.uber.org/zap"
"go.mau.fi/mautrix-telegram/pkg/gotd/bin"
"go.mau.fi/mautrix-telegram/pkg/gotd/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, *tg.UpdateShortChatMessage, *tg.UpdateShortSentMessage, *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)
}