Package that provides a middleware to handle users answers
Go
Telego-questions
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()
}