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)) }