You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This package provides a question middleware that helps to handle users answers on questions
Usage:
package main
import (
"context""fmt""github.com/mymmrac/telego"
th "github.com/mymmrac/telego/telegohandler"
tu "github.com/mymmrac/telego/telegoutil""log""os"
qnmanager "github.com/DeFaNy/telego-questions/manager"
)
funcmain() {
botToken:=os.Getenv("TOKEN_HERE")
ctx:=context.Background()
// Create Bot with debug on// Note: Please keep in mind that default logger may expose sensitive information, use in development onlybot, err:=telego.NewBot(botToken, telego.WithDefaultDebugLogger())
iferr!=nil {
fmt.Println(err)
os.Exit(1)
}
// Get updates channelupdates, _:=bot.UpdatesViaLongPolling(nil, telego.WithLongPollingContext(ctx))
qm:=qnmanager.NewManager(ctx)
// Create bot handlerbh, _:=th.NewBotHandler(bot, updates)
bh.Use(qm.Middleware)
// Handle any messagebh.HandleMessage(func(bot*telego.Bot, message telego.Message) {
constquestionResponseText="Hey, %s, how old are you?"constresult="Your name is %s and you are a %s y.o."chatID:=tu.ID(message.Chat.ID)
text:="Hello, what is your name?"smp:=tu.Message(chatID, text)
_, err:=bot.SendMessage(smp)
iferr!=nil {
log.Fatalf("failed to send message: %s", err.Error())
return
}
err=qm.NewQuestion(bot, message, func(ctx context.Context, bot*telego.Bot, answer qnmanager.Answer) {
// Get an answer from user and checking if question chan open// There is chan and if you want to ask new question another question // just send a message and call this functionuserNameResponse, isOpen:=answer()
if!isOpen {
log.Println("question chan was closed")
return
}
chatID:=userNameResponse.Chat.ID// Create an answer message from bot with user namesmp:=tu.Message(tu.ID(chatID), fmt.Sprintf(questionResponseText, userNameResponse.Text))
_, err:=bot.SendMessage(smp)
iferr!=nil {
log.Println("failed to send question to user")
return
}
userAgeResponse, isOpen:=answer()
if!isOpen {
log.Println("question chan was closed")
return
}
smp.WithText(fmt.Sprintf(result, userNameResponse.Text, userAgeResponse.Text))
_, err=bot.SendMessage(smp)
iferr!=nil {
log.Println("failed to send question to user")
return
}
return
})
iferr!=nil {
log.Fatalf("failed to create question: %s", err.Error())
return
}
return
})
// Stop handling updates on exitdeferbh.Stop()
deferbot.StopLongPolling()
// Start handling updatesbh.Start()
}