♻️ Refactored Callback actions
♻️ Refactored Callback actions
This commit is contained in:
parent
43687c7e96
commit
781b82ad3c
|
@ -8,150 +8,120 @@ import (
|
|||
|
||||
func (h *Handler) IsCallbackQuery(ctx *model.Context) (err error) {
|
||||
switch ctx.CallbackQuery.Data {
|
||||
case common.DataAddSticker:
|
||||
err = h.CallbackAddSticker(ctx)
|
||||
case common.DataAddSet:
|
||||
err = h.CallbackAddSet(ctx)
|
||||
case common.DataRemoveSticker:
|
||||
err = h.CallbackRemoveSticker(ctx)
|
||||
case common.DataRemoveSet:
|
||||
err = h.CallbackRemoveSet(ctx)
|
||||
case common.DataRemoveSticker, common.DataAddSticker:
|
||||
ctx.Set("is_add", ctx.CallbackQuery.Data == common.DataAddSticker)
|
||||
err = h.CallbackSticker(ctx)
|
||||
case common.DataAddSet, common.DataRemoveSet:
|
||||
ctx.Set("is_add", ctx.CallbackQuery.Data == common.DataAddSet)
|
||||
err = h.CallbackSet(ctx)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (h *Handler) CallbackAddSticker(ctx *model.Context) (err error) {
|
||||
func (h *Handler) CallbackSticker(ctx *model.Context) (err error) {
|
||||
isAdd, _ := ctx.Get("is_add").(bool)
|
||||
answer := tg.NewAnswerCallbackQuery(ctx.CallbackQuery.ID)
|
||||
answer.Text = ctx.T().Sprintf("callback__text_add-single")
|
||||
markup := tg.NewInlineKeyboardMarkup(tg.NewInlineKeyboardRow())
|
||||
markup.InlineKeyboard[0] = make([]tg.InlineKeyboardButton, 2)
|
||||
|
||||
if err = h.store.AddSticker(ctx.User, ctx.Sticker); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
if isAdd {
|
||||
answer.Text = ctx.T().Sprintf("callback__text_add-single")
|
||||
|
||||
markup := tg.NewInlineKeyboardMarkup(tg.NewInlineKeyboardRow(tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_remove-single"), common.DataRemoveSticker,
|
||||
)))
|
||||
|
||||
if len(ctx.CallbackQuery.Message.ReplyMarkup.InlineKeyboard[0]) == 2 {
|
||||
markup.InlineKeyboard[0] = append(
|
||||
markup.InlineKeyboard[0], ctx.CallbackQuery.Message.ReplyMarkup.InlineKeyboard[0][1],
|
||||
)
|
||||
}
|
||||
|
||||
if _, err = ctx.EditMessageReplyMarkup(&tg.EditMessageReplyMarkupParameters{
|
||||
ChatID: ctx.CallbackQuery.Message.Chat.ID,
|
||||
InlineMessageID: ctx.CallbackQuery.InlineMessageID,
|
||||
MessageID: ctx.CallbackQuery.Message.ID,
|
||||
ReplyMarkup: markup,
|
||||
}); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
_, err = ctx.AnswerCallbackQuery(answer)
|
||||
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
func (h *Handler) CallbackAddSet(ctx *model.Context) (err error) {
|
||||
answer := tg.NewAnswerCallbackQuery(ctx.CallbackQuery.ID)
|
||||
|
||||
set, err := ctx.GetStickerSet(ctx.Sticker.SetName)
|
||||
if err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
answer.Text = ctx.T().Sprintf("callback__text_add-set", set.Title)
|
||||
|
||||
for i := range set.Stickers {
|
||||
if ctx.Sticker, err = h.stickersStore.GetOrCreate(&model.Sticker{
|
||||
CreatedAt: ctx.CallbackQuery.Message.Date,
|
||||
UpdatedAt: ctx.CallbackQuery.Message.Date,
|
||||
Width: set.Stickers[i].Width,
|
||||
Height: set.Stickers[i].Height,
|
||||
Emoji: set.Stickers[i].Emoji,
|
||||
ID: set.Stickers[i].FileID,
|
||||
IsAnimated: set.Stickers[i].IsAnimated,
|
||||
SetName: set.Name,
|
||||
}); err != nil {
|
||||
if err = h.store.AddSticker(ctx.User, ctx.Sticker); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
_ = h.store.AddSticker(ctx.User, ctx.Sticker)
|
||||
}
|
||||
markup.InlineKeyboard[0][0] = tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_remove-single"), common.DataRemoveSticker,
|
||||
)
|
||||
} else {
|
||||
answer.Text = ctx.T().Sprintf("callback__text_remove-single")
|
||||
|
||||
if err = h.store.AddStickersSet(ctx.User, set.Name); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
if err = h.store.RemoveSticker(ctx.User, ctx.Sticker); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
markup := tg.NewInlineKeyboardMarkup(tg.NewInlineKeyboardRow(
|
||||
tg.NewInlineKeyboardButton(ctx.T().Sprintf("sticker__button_remove-single"), common.DataRemoveSticker),
|
||||
tg.NewInlineKeyboardButton(ctx.T().Sprintf("sticker__button_remove-set"), common.DataRemoveSet),
|
||||
))
|
||||
|
||||
if _, err = ctx.EditMessageReplyMarkup(&tg.EditMessageReplyMarkupParameters{
|
||||
ChatID: ctx.CallbackQuery.Message.Chat.ID,
|
||||
InlineMessageID: ctx.CallbackQuery.InlineMessageID,
|
||||
MessageID: ctx.CallbackQuery.Message.ID,
|
||||
ReplyMarkup: markup,
|
||||
}); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
_, err = ctx.AnswerCallbackQuery(answer)
|
||||
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
func (h *Handler) CallbackRemoveSticker(ctx *model.Context) (err error) {
|
||||
answer := tg.NewAnswerCallbackQuery(ctx.CallbackQuery.ID)
|
||||
answer.Text = ctx.T().Sprintf("callback__text_remove-single")
|
||||
|
||||
if err = h.store.RemoveSticker(ctx.User, ctx.Sticker); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
markup := tg.NewInlineKeyboardMarkup(tg.NewInlineKeyboardRow(
|
||||
tg.NewInlineKeyboardButton(ctx.T().Sprintf("sticker__button_add-single"), common.DataAddSticker),
|
||||
))
|
||||
|
||||
if len(ctx.CallbackQuery.Message.ReplyMarkup.InlineKeyboard[0]) == 2 {
|
||||
markup.InlineKeyboard[0] = append(
|
||||
markup.InlineKeyboard[0], ctx.CallbackQuery.Message.ReplyMarkup.InlineKeyboard[0][1],
|
||||
markup.InlineKeyboard[0][0] = tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_add-single"), common.DataAddSticker,
|
||||
)
|
||||
}
|
||||
|
||||
if _, err = ctx.EditMessageReplyMarkup(&tg.EditMessageReplyMarkupParameters{
|
||||
ChatID: ctx.CallbackQuery.Message.Chat.ID,
|
||||
InlineMessageID: ctx.CallbackQuery.InlineMessageID,
|
||||
MessageID: ctx.CallbackQuery.Message.ID,
|
||||
ReplyMarkup: markup,
|
||||
}); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
_, err = ctx.AnswerCallbackQuery(answer)
|
||||
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
func (h *Handler) CallbackRemoveSet(ctx *model.Context) (err error) {
|
||||
answer := tg.NewAnswerCallbackQuery(ctx.CallbackQuery.ID)
|
||||
answer.Text = ctx.T().Sprintf("callback__text_remove-set", ctx.Sticker.SetName)
|
||||
|
||||
if err = h.store.RemoveStickersSet(ctx.User, ctx.Sticker.SetName); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
markup := tg.NewInlineKeyboardMarkup(tg.NewInlineKeyboardRow(
|
||||
tg.NewInlineKeyboardButton(ctx.T().Sprintf("sticker__button_add-single"), common.DataAddSticker),
|
||||
))
|
||||
|
||||
if len(ctx.CallbackQuery.Message.ReplyMarkup.InlineKeyboard[0]) == 2 {
|
||||
markup.InlineKeyboard[0] = append(
|
||||
markup.InlineKeyboard[0],
|
||||
tg.NewInlineKeyboardButton(ctx.T().Sprintf("sticker__button_add-set"), common.DataAddSet),
|
||||
)
|
||||
markup.InlineKeyboard[0][1] = ctx.CallbackQuery.Message.ReplyMarkup.InlineKeyboard[0][1]
|
||||
}
|
||||
|
||||
if _, err = ctx.EditMessageReplyMarkup(&tg.EditMessageReplyMarkupParameters{
|
||||
ChatID: ctx.CallbackQuery.Message.Chat.ID,
|
||||
InlineMessageID: ctx.CallbackQuery.InlineMessageID,
|
||||
MessageID: ctx.CallbackQuery.Message.ID,
|
||||
ReplyMarkup: markup,
|
||||
}); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
_, err = ctx.AnswerCallbackQuery(answer)
|
||||
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
func (h *Handler) CallbackSet(ctx *model.Context) (err error) {
|
||||
isAdd, _ := ctx.Get("is_add").(bool)
|
||||
answer := tg.NewAnswerCallbackQuery(ctx.CallbackQuery.ID)
|
||||
markup := new(tg.InlineKeyboardMarkup)
|
||||
|
||||
if isAdd {
|
||||
set, err := ctx.GetStickerSet(ctx.Sticker.SetName)
|
||||
if err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
answer.Text = ctx.T().Sprintf("callback__text_add-set", set.Title)
|
||||
|
||||
for i := range set.Stickers {
|
||||
if ctx.Sticker, err = h.stickersStore.GetOrCreate(&model.Sticker{
|
||||
CreatedAt: ctx.CallbackQuery.Message.Date,
|
||||
UpdatedAt: ctx.CallbackQuery.Message.Date,
|
||||
Width: set.Stickers[i].Width,
|
||||
Height: set.Stickers[i].Height,
|
||||
Emoji: set.Stickers[i].Emoji,
|
||||
ID: set.Stickers[i].FileID,
|
||||
IsAnimated: set.Stickers[i].IsAnimated,
|
||||
SetName: set.Name,
|
||||
}); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
_ = h.store.AddSticker(ctx.User, ctx.Sticker)
|
||||
}
|
||||
|
||||
if err = h.store.AddStickersSet(ctx.User, set.Name); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
markup.InlineKeyboard = append(markup.InlineKeyboard, tg.NewInlineKeyboardRow(
|
||||
tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_remove-single"), common.DataRemoveSticker,
|
||||
),
|
||||
tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_remove-set"), common.DataRemoveSet,
|
||||
),
|
||||
))
|
||||
} else {
|
||||
answer.Text = ctx.T().Sprintf("callback__text_remove-set", ctx.Sticker.SetName)
|
||||
|
||||
if err = h.store.RemoveStickersSet(ctx.User, ctx.Sticker.SetName); err != nil {
|
||||
return ctx.Error(err)
|
||||
}
|
||||
|
||||
markup.InlineKeyboard = append(markup.InlineKeyboard, tg.NewInlineKeyboardRow(
|
||||
tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_add-single"), common.DataAddSticker,
|
||||
),
|
||||
tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_add-set"), common.DataAddSet,
|
||||
),
|
||||
))
|
||||
}
|
||||
|
||||
if _, err = ctx.EditMessageReplyMarkup(&tg.EditMessageReplyMarkupParameters{
|
||||
|
|
|
@ -84,7 +84,7 @@ func (h *Handler) IsSticker(ctx *model.Context) error {
|
|||
tg.NewInlineKeyboardButton(ctx.T().Sprintf("sticker__button_add-single"), common.DataAddSticker),
|
||||
))
|
||||
|
||||
if !strings.EqualFold(ctx.Sticker.SetName, common.SetNameUploaded) {
|
||||
if ctx.Sticker.SetName != "" && !strings.EqualFold(ctx.Sticker.SetName, common.SetNameUploaded) {
|
||||
markup.InlineKeyboard[0] = append(
|
||||
markup.InlineKeyboard[0],
|
||||
tg.NewInlineKeyboardButton(ctx.T().Sprintf("sticker__button_add-set"), common.DataAddSet),
|
||||
|
@ -92,14 +92,14 @@ func (h *Handler) IsSticker(ctx *model.Context) error {
|
|||
}
|
||||
|
||||
if us != nil {
|
||||
markup = tg.NewInlineKeyboardMarkup(tg.NewInlineKeyboardRow(tg.NewInlineKeyboardButton(
|
||||
markup.InlineKeyboard[0][0] = tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_remove-single"), common.DataRemoveSticker,
|
||||
)))
|
||||
)
|
||||
|
||||
if ctx.Sticker.SetName != "" {
|
||||
markup.InlineKeyboard[0] = append(markup.InlineKeyboard[0], tg.NewInlineKeyboardButton(
|
||||
if ctx.Sticker.SetName != "" && !strings.EqualFold(ctx.Sticker.SetName, common.SetNameUploaded) {
|
||||
markup.InlineKeyboard[0][1] = tg.NewInlineKeyboardButton(
|
||||
ctx.T().Sprintf("sticker__button_remove-set"), common.DataRemoveSet,
|
||||
))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
tg "gitlab.com/toby3d/telegram"
|
||||
|
@ -55,8 +56,12 @@ type (
|
|||
printer *message.Printer
|
||||
Sticker *Sticker
|
||||
User *User
|
||||
|
||||
context context.Context
|
||||
}
|
||||
|
||||
contextKey string
|
||||
|
||||
Error struct {
|
||||
Message string
|
||||
frame xerrors.Frame
|
||||
|
@ -178,3 +183,19 @@ func (ctx *Context) Error(err error) error {
|
|||
|
||||
return err
|
||||
}
|
||||
|
||||
func (ctx *Context) Set(key string, val interface{}) {
|
||||
if ctx.context == nil {
|
||||
ctx.context = context.Background()
|
||||
}
|
||||
|
||||
ctx.context = context.WithValue(ctx.context, contextKey(key), val)
|
||||
}
|
||||
|
||||
func (ctx *Context) Get(key string) interface{} {
|
||||
if ctx.context == nil {
|
||||
ctx.context = context.Background()
|
||||
}
|
||||
|
||||
return ctx.context.Value(contextKey(key))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue