update.EditedMessage is not work in b.RegisterHandlerMatchFunc
Closed this issue · 5 comments
package main
import (
"context"
"fmt"
"github.com/go-telegram/bot"
"github.com/go-telegram/bot/models"
"log"
"os"
"os/signal"
)
// Send any text message to the bot after the bot has been started
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
opts := []bot.Option{
bot.WithDefaultHandler(defaultHandler),
}
b, err := bot.New("6xxxx", opts...)
if nil != err {
// panics for the sake of simplicity.
// you should handle this error properly in your code.
panic(err)
}
b.RegisterHandlerMatchFunc(matchFunc, helloHandler)
b.RegisterHandlerMatchFunc(matchFunc2, helloHandler2)
b.Start(ctx)
}
func matchFunc(update *models.Update) bool {
if update.Message == nil {
return false
}
//time.Sleep(5 * time.Second)
fmt.Println("✅✅✅hello matchFunc1")
return update.Message.Text == "hello"
}
func matchFunc2(update *models.Update) bool {
fmt.Println("❇️❇️❇️❇️:matchFunc2", update.EditedMessage)
if update.EditedMessage == nil {
return false
}
//time.Sleep(5 * time.Second)
fmt.Println("❇️❇❇️❇hello matchFunc2")
return true
}
func helloHandler(ctx context.Context, b *bot.Bot, update *models.Update) {
//time.Sleep(1 * time.Second)
log.Println("🔥hello handler:" + update.Message.Text)
}
func helloHandler2(ctx context.Context, b *bot.Bot, update *models.Update) {
//time.Sleep(1 * time.Second)
log.Println("🔥🔥hello update.EditedMessage:", update.EditedMessage)
}
func defaultHandler(ctx context.Context, b *bot.Bot, update *models.Update) {
log.Println("🌹 default handler", update.EditedMessage)
}
/////////// it dont work
When I use this to edit a message that has already been sent, the helloHandler2 never triggers. Moving the code to defaultHandler can correctly print out the message, proving that it works. But why doesn't helloHandler2 work?
update.EditedMessage
sent by Telegram server. While telegram server sent a message, exactly one field will be defined. update.Message / update.EditedMessage, but not both.
You edit original update.Message, but check update.EditedMessage in matchFunc2
but why it can work in func defaultHandler(ctx context.Context, b *bot.Bot, update *models.Update) {
log.Println("🌹 default handler", update.EditedMessage)
}
b.RegisterHandlerMatchFunc(handle.MatchfilterFunc(handle.IsPrivate, handle.IsCallbackQuery, handle.IsAuthAdmin), handle.CallbackQueryHandle(rCallback)) //no work
b.RegisterHandlerMatchFunc(handle.MatchfilterFunc(handle.IsPrivate, handle.IsReply, handle.IsAuthAdmin), handle.ReplyHandle(rReply)) //work
b.RegisterHandlerMatchFunc(handle.MatchfilterFunc(handle.IsPrivate, handle.IsNotReply, handle.IsAuthAdmin), handle.NotReplyHandle(rText)) //work
I do it like this.
"github.com/go-telegram-bot-api/telegram-bot-api/v5"
If not using pointers, is it possible? Like this? It will work?
var updates tgbotapi.UpdatesChannel = bot.GetUpdatesChan(u)