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

103 рядки
3.1 KiB
Go

package share
import (
"github.com/mymmrac/telego"
th "github.com/mymmrac/telego/telegohandler"
"git.entityseven.com/rilaxik/pllist/internal/domain"
"git.entityseven.com/rilaxik/pllist/internal/service"
"git.entityseven.com/rilaxik/pllist/internal/telegram/shared"
)
func (h *Handler) manageCallback(ctx *th.Context, query telego.CallbackQuery) error {
listID, err := shared.CallbackID(query.Data, shared.ActionShareManage)
if err != nil {
return err
}
return h.showShares(ctx, shared.UserFrom(ctx).ID,
shared.QueryChatID(query), shared.QueryMessageID(query), listID)
}
func (h *Handler) addCallback(ctx *th.Context, query telego.CallbackQuery) error {
listID, err := parseAdd(query.Data)
if err != nil {
return err
}
user := shared.UserFrom(ctx)
if _, err := h.shares.List(ctx, user.ID, listID); err != nil {
return err
}
h.pending.Set(user.TelegramID, service.Pending{
Action: service.PendingShareTarget,
ListID: listID,
})
return h.sender.Send(ctx, shared.QueryChatID(query), addSharePrompt, nil)
}
func (h *Handler) roleCallback(ctx *th.Context, query telego.CallbackQuery) error {
listID, role, err := parseRole(query.Data)
if err != nil {
return err
}
user := shared.UserFrom(ctx)
pending, ok := h.pending.Get(user.TelegramID)
if !ok || pending.Action != service.PendingShareRole || pending.ListID != listID {
return domain.NewValidationError(shareExpiredText)
}
if err := h.shares.Share(ctx, user, listID, pending.Target, role); err != nil {
return err
}
h.pending.Clear(user.TelegramID)
return h.showShares(ctx, user.ID,
shared.QueryChatID(query), shared.QueryMessageID(query), listID)
}
func (h *Handler) viewCallback(ctx *th.Context, query telego.CallbackQuery) error {
ref, err := parseView(query.Data)
if err != nil {
return err
}
return h.showShare(ctx, shared.UserFrom(ctx).ID,
shared.QueryChatID(query), shared.QueryMessageID(query), ref)
}
func (h *Handler) setRoleCallback(ctx *th.Context, query telego.CallbackQuery) error {
ref, role, err := parseSet(query.Data)
if err != nil {
return err
}
user := shared.UserFrom(ctx)
if err := h.shares.SetRole(ctx, user.ID, ref.listID, ref.shareID, ref.pending, role); err != nil {
return err
}
return h.showShares(ctx, user.ID,
shared.QueryChatID(query), shared.QueryMessageID(query), ref.listID)
}
func (h *Handler) revokeCallback(ctx *th.Context, query telego.CallbackQuery) error {
ref, err := parseRevoke(query.Data)
if err != nil {
return err
}
user := shared.UserFrom(ctx)
list, share, err := h.shares.Find(ctx, user.ID, ref.listID, ref.shareID, ref.pending)
if err != nil {
return err
}
return h.sender.EditOrSend(ctx, shared.QueryChatID(query), shared.QueryMessageID(query),
revokeConfirmText(list, share), revokeConfirmKeyboard(ref))
}
func (h *Handler) revokeYesCallback(ctx *th.Context, query telego.CallbackQuery) error {
ref, err := parseRevokeYes(query.Data)
if err != nil {
return err
}
user := shared.UserFrom(ctx)
if err := h.shares.Revoke(ctx, user.ID, ref.listID, ref.shareID, ref.pending); err != nil {
return err
}
return h.showShares(ctx, user.ID,
shared.QueryChatID(query), shared.QueryMessageID(query), ref.listID)
}