Файли
2026-11-08 03:46:11 +00:00

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