131 lines
2.4 KiB
Go
131 lines
2.4 KiB
Go
package tg
|
|
|
|
import (
|
|
//tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
|
)
|
|
/*
|
|
type Page struct {
|
|
Action Action
|
|
Text string
|
|
SubWidget Widget
|
|
Inline *InlineWidget
|
|
Reply *ReplyWidget
|
|
}
|
|
|
|
// Return new page with the specified text.
|
|
func NewPage() *Page {
|
|
ret := &Page{}
|
|
return ret
|
|
}
|
|
|
|
func (p *Page) WithText(text string) *Page {
|
|
p.Text = text
|
|
return p
|
|
}
|
|
|
|
// Set the inline keyboard.
|
|
func (p *Page) WithInline(inline *InlineWidget) *Page {
|
|
p.Inline = inline
|
|
return p
|
|
}
|
|
|
|
// Set the reply keyboard.
|
|
func (p *Page) WithReply(reply *ReplyWidget) *Page {
|
|
p.Reply = reply
|
|
return p
|
|
}
|
|
|
|
// Set the action to be run before serving.
|
|
func (p *Page) WithAction(a Action) *Page {
|
|
p.Action = a
|
|
return p
|
|
}
|
|
|
|
// Alias to with action to simpler define actions.
|
|
func (p *Page) ActionFunc(fn ActionFunc) *Page {
|
|
return p.WithAction(fn)
|
|
}
|
|
|
|
// Set the sub widget that will get the skipped
|
|
// updates.
|
|
func (p *Page) WithSub(sub Widget) *Page {
|
|
p.SubWidget = sub
|
|
return p
|
|
}
|
|
|
|
|
|
func (p *Page) Render(
|
|
sid SessionId, bot *Bot,
|
|
) ([]*SendConfig) {
|
|
reply := p.Reply
|
|
inline := p.Inline
|
|
|
|
ret := []*SendConfig{}
|
|
|
|
if p.Text != "" {
|
|
cfg := NewMessage(p.Text).SendConfig(sid, bot).
|
|
WithName("page/text")
|
|
ret = append(ret, cfg)
|
|
}
|
|
if inline != nil {
|
|
cfg := inline.SendConfig(sid, bot).
|
|
WithName("page/inline")
|
|
ret = append(ret, cfg)
|
|
}
|
|
if p.Reply != nil {
|
|
cfg := reply.SendConfig(sid, bot).
|
|
WithName("page/reply")
|
|
ret = append(ret, cfg)
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
func (p *Page) Filter(
|
|
u *Update, msgs MessageMap,
|
|
) bool {
|
|
return false
|
|
}
|
|
|
|
func (p *Page) Serve(c *Context) {
|
|
pth := c.Path()
|
|
if p.Action != nil {
|
|
c.Run(p.Action, c.Update)
|
|
if pth != c.Path() {
|
|
// If we went somewhere else then do nothing.
|
|
return
|
|
}
|
|
}
|
|
msgs, _ := c.Render(p)
|
|
inlineMsg := msgs["page/inline"]
|
|
|
|
subUpdates := c.RunWidget(p.SubWidget, c.Arg)
|
|
defer subUpdates.Close()
|
|
|
|
inlineUpdates := c.RunWidget(p.Inline)
|
|
defer inlineUpdates.Close()
|
|
|
|
replyUpdates := c.RunWidget(p.Reply)
|
|
defer replyUpdates.Close()
|
|
|
|
subFilter, subFilterOk := p.SubWidget.(Filterer)
|
|
for u := range c.Input() {
|
|
switch {
|
|
case !p.Inline.Filter(u, MessageMap{"": inlineMsg}) :
|
|
inlineUpdates.Send(u)
|
|
case !p.Reply.Filter(u, msgs) :
|
|
replyUpdates.Send(u )
|
|
case p.SubWidget != nil :
|
|
if subFilterOk {
|
|
if !subFilter.Filter(u, msgs) {
|
|
subUpdates.Send(u)
|
|
}
|
|
} else {
|
|
subUpdates.Send(u)
|
|
}
|
|
default:
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
|