telebot/middleware/restrict.go
Demian 9f08ef94de telebot: remove ErrSkip
There is no need in this error, as we can skip or abort the execution
by simply returning a nil, instead of calling the next context handler.
2020-10-20 13:30:55 +03:00

48 lines
1.0 KiB
Go

package middleware
import tele "gopkg.in/tucnak/telebot.v3"
type RestrictConfig struct {
Chats []tele.Recipient
In, Out tele.HandlerFunc
}
func Restrict(v RestrictConfig) tele.MiddlewareFunc {
return func(next tele.HandlerFunc) tele.HandlerFunc {
if v.In == nil {
v.In = next
}
if v.Out == nil {
v.Out = next
}
return func(c tele.Context) error {
for _, chat := range v.Chats {
if chat.Recipient() == c.Sender().Recipient() {
return v.In(c)
}
}
return v.Out(c)
}
}
}
func Whitelist(chats ...tele.Recipient) tele.MiddlewareFunc {
return func(next tele.HandlerFunc) tele.HandlerFunc {
return Restrict(RestrictConfig{
Chats: chats,
In: next,
Out: func(c tele.Context) error { return nil },
})(next)
}
}
func Blacklist(chats ...tele.Recipient) tele.MiddlewareFunc {
return func(next tele.HandlerFunc) tele.HandlerFunc {
return Restrict(RestrictConfig{
Chats: chats,
Out: next,
In: func(c tele.Context) error { return nil },
})(next)
}
}