57 рядки
1.8 KiB
Go
57 рядки
1.8 KiB
Go
package menu
|
|
|
|
import (
|
|
"github.com/mymmrac/telego"
|
|
th "github.com/mymmrac/telego/telegohandler"
|
|
|
|
"git.entityseven.com/rilaxik/pllist/internal/service"
|
|
"git.entityseven.com/rilaxik/pllist/internal/telegram/shared"
|
|
)
|
|
|
|
type Handler struct {
|
|
sender *shared.Sender
|
|
pending *service.PendingStore
|
|
access *service.BotAccessService
|
|
}
|
|
|
|
func New(
|
|
sender *shared.Sender,
|
|
pending *service.PendingStore,
|
|
access *service.BotAccessService,
|
|
) *Handler {
|
|
return &Handler{sender: sender, pending: pending, access: access}
|
|
}
|
|
|
|
func (h *Handler) Register(router *th.BotHandler) {
|
|
router.HandleMessage(h.start, th.CommandEqual("start"))
|
|
router.HandleMessage(h.help, th.CommandEqual("help"))
|
|
router.HandleMessage(h.cancel, th.CommandEqual("cancel"))
|
|
|
|
callbacks := router.Group(th.AnyCallbackQueryWithMessage())
|
|
callbacks.HandleCallbackQuery(h.helpCallback, th.CallbackDataEqual(shared.NavHelp))
|
|
}
|
|
|
|
func (h *Handler) start(ctx *th.Context, message telego.Message) error {
|
|
return h.sender.Send(ctx, message.Chat.ID, startText, shared.MainKeyboard())
|
|
}
|
|
|
|
func (h *Handler) help(ctx *th.Context, message telego.Message) error {
|
|
return h.sender.Send(ctx, message.Chat.ID, h.helpText(ctx), shared.MainKeyboard())
|
|
}
|
|
|
|
func (h *Handler) cancel(ctx *th.Context, message telego.Message) error {
|
|
if h.pending.Clear(shared.UserFrom(ctx).TelegramID) {
|
|
return h.sender.Send(ctx, message.Chat.ID, "Pending input cancelled.", nil)
|
|
}
|
|
return h.sender.Send(ctx, message.Chat.ID, "Nothing to cancel.", nil)
|
|
}
|
|
|
|
func (h *Handler) helpCallback(ctx *th.Context, query telego.CallbackQuery) error {
|
|
return h.sender.EditOrSend(ctx, shared.QueryChatID(query), shared.QueryMessageID(query),
|
|
h.helpText(ctx), nil)
|
|
}
|
|
|
|
func (h *Handler) helpText(ctx *th.Context) string {
|
|
return helpText(h.access.IsOwner(shared.UserFrom(ctx).TelegramID))
|
|
}
|