Closed maikeruit closed 1 month ago
How can you make it easier?
Now I've done it this way
webhook.go
func (h *Webhook) ServeHTTP(w http.ResponseWriter, r *http.Request) { if h.SecretToken != "" && r.Header.Get("X-Telegram-Bot-Api-Secret-Token") != h.SecretToken { h.bot.debug(fmt.Errorf("invalid secret token in request")) return } var update Update /* Read payload body to jsonBody */ jsonBody, err := io.ReadAll(r.Body) if err != nil { h.bot.debug(fmt.Errorf("cannot read body: %v", err)) return } update.raw = jsonBody r.Body = io.NopCloser(bytes.NewBuffer(jsonBody)) /* Clone body */ if err := json.NewDecoder(r.Body).Decode(&update); err != nil { h.bot.debug(fmt.Errorf("cannot decode update: %v", err)) return } h.dest <- update }
update.go
type Update struct { raw []byte ...
context.go
type Context interface { // Raw returns original body raw Raw() string ..... func (c *nativeContext) Raw() string { return string(c.u.raw) }
You should implement your custom Poller.
Poller
See https://github.com/tucnak/telebot/blob/v3/webhook.go for reference.
How can you make it easier?
Now I've done it this way
webhook.go
update.go
context.go