Added the better reading ability.
This commit is contained in:
parent
307ebd03e3
commit
4737464273
3 changed files with 83 additions and 19 deletions
|
@ -52,7 +52,7 @@ func ExtractSessionData(c *tg.Context) *SessionData {
|
|||
}
|
||||
|
||||
var (
|
||||
startScreenButton = tg.NewButton("Home").Go("/")
|
||||
homeButton = tg.NewButton("Home").Go("/")
|
||||
backButton = tg.NewButton("Back").Go("..")
|
||||
backKeyboard = tg.NewKeyboard().Row(
|
||||
backButton,
|
||||
|
@ -70,7 +70,7 @@ var (
|
|||
c.Sendf("%d", d.Counter)
|
||||
}),
|
||||
).Row(
|
||||
startScreenButton,
|
||||
backButton,
|
||||
)
|
||||
|
||||
navKeyboard = tg.NewKeyboard().Row(
|
||||
|
@ -97,12 +97,7 @@ var (
|
|||
)
|
||||
}),
|
||||
).Row(
|
||||
startScreenButton,
|
||||
).Reply()
|
||||
|
||||
// The keyboard to return to the start screen.
|
||||
navToStartKeyboard = tg.NewKeyboard().Row(
|
||||
startScreenButton,
|
||||
backButton,
|
||||
).Reply()
|
||||
)
|
||||
|
||||
|
@ -190,6 +185,10 @@ WithInitFunc(func(c *tg.Context) {
|
|||
),
|
||||
),
|
||||
)).WithCommands(
|
||||
tg.NewCommand("info").
|
||||
ActionFunc(func(c *tg.Context){
|
||||
c.SendfHTML(`<a href="https://res.cloudinary.com/demo/image/upload/v1312461204/sample.jpg">cock</a><strong>cock</strong> die`)
|
||||
}),
|
||||
tg.NewCommand("start").
|
||||
Desc(
|
||||
"start or restart the bot or move to the start screen",
|
||||
|
@ -201,17 +200,16 @@ WithInitFunc(func(c *tg.Context) {
|
|||
}),
|
||||
tg.NewCommand("read").
|
||||
Desc("reads a string and sends it back").
|
||||
WidgetFunc(func(c *tg.Context) {
|
||||
c.Sendf("Type text and I will send it back to you")
|
||||
for u := range c.Input() {
|
||||
if u.Message == nil {
|
||||
continue
|
||||
}
|
||||
c.Sendf("You typed %q", u.Message.Text)
|
||||
break
|
||||
}
|
||||
c.Sendf("Done")
|
||||
}),
|
||||
WithWidget(
|
||||
tg.NewTextMessageRead(
|
||||
tg.Func(func(c *tg.Context){
|
||||
c.Sendf("Type a string and it will send it back")
|
||||
}),
|
||||
tg.Func(func(c *tg.Context){
|
||||
c.Sendf("You typed %q", c.Message.Text)
|
||||
}),
|
||||
),
|
||||
),
|
||||
tg.NewCommand("image").
|
||||
Desc("sends a sample image").
|
||||
ActionFunc(func(c *tg.Context) {
|
||||
|
|
52
tg/read.go
Normal file
52
tg/read.go
Normal file
|
@ -0,0 +1,52 @@
|
|||
package tg
|
||||
|
||||
// The type to descsribe one line reading widget.
|
||||
type UpdateRead struct {
|
||||
Pre Action
|
||||
Filterer Filterer
|
||||
Post Widget
|
||||
}
|
||||
|
||||
func (rd *UpdateRead) Filter(u *Update, msgs MessageMap) bool {
|
||||
if rd.Filterer != nil {
|
||||
return rd.Filterer.Filter(u, msgs)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// Returns new empty update reader.
|
||||
func NewUpdateRead(filter Filterer, post Widget) *UpdateRead {
|
||||
ret := &UpdateRead{}
|
||||
ret.Filterer = filter
|
||||
ret.Post = post
|
||||
return ret
|
||||
}
|
||||
|
||||
func (rd *UpdateRead) WithPre(a Action) *UpdateRead {
|
||||
rd.Pre = a
|
||||
return rd
|
||||
}
|
||||
|
||||
func NewTextMessageRead(pre Action, post Widget) *UpdateRead {
|
||||
ret := NewUpdateRead(
|
||||
FilterFunc(func(u *Update, _ MessageMap) bool {
|
||||
return u.Message == nil
|
||||
}),
|
||||
post,
|
||||
).WithPre(pre)
|
||||
return ret
|
||||
}
|
||||
|
||||
func (rd *UpdateRead) Serve(c *Context) {
|
||||
c.Run(rd.Pre, c.Update)
|
||||
for u := range c.Input() {
|
||||
if rd.Filter(u, nil) {
|
||||
continue
|
||||
}
|
||||
c.RunWidget(rd.Post, u)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
|
14
tg/widget.go
14
tg/widget.go
|
@ -36,6 +36,13 @@ type Filterer interface {
|
|||
Filter(*Update, MessageMap) bool
|
||||
}
|
||||
|
||||
type FilterFunc func(*Update, MessageMap) bool
|
||||
func (f FilterFunc) Filter(
|
||||
u *Update, msgs MessageMap,
|
||||
) bool {
|
||||
return f(u, msgs)
|
||||
}
|
||||
|
||||
// General type function for faster typing.
|
||||
type Func func(*Context)
|
||||
func (f Func) Act(c *Context) {
|
||||
|
@ -224,6 +231,13 @@ func (widget *ReplyKeyboardWidget) SendConfig(
|
|||
sid SessionId,
|
||||
bot *Bot,
|
||||
) (*SendConfig) {
|
||||
if widget == nil {
|
||||
msgConfig := tgbotapi.NewMessage(sid.ToApi(), ">")
|
||||
msgConfig.ReplyMarkup = tgbotapi.NewRemoveKeyboard(true)
|
||||
return &SendConfig{
|
||||
Message: &msgConfig,
|
||||
}
|
||||
}
|
||||
var text string
|
||||
if widget.Text != "" {
|
||||
text = widget.Text
|
||||
|
|
Loading…
Reference in a new issue