diff --git a/client/bot/handlers/middleware.go b/client/bot/handlers/middleware.go index 3ad8079..2b98bb9 100644 --- a/client/bot/handlers/middleware.go +++ b/client/bot/handlers/middleware.go @@ -5,6 +5,7 @@ import ( "github.com/celestix/gotgproto/ext" "github.com/duke-git/lancet/v2/slice" "github.com/krau/SaveAny-Bot/client/bot/handlers/utils/dirutil" + "github.com/krau/SaveAny-Bot/client/bot/handlers/utils/msgelem" "github.com/krau/SaveAny-Bot/common/i18n" "github.com/krau/SaveAny-Bot/common/i18n/i18nk" "github.com/krau/SaveAny-Bot/config" @@ -12,10 +13,23 @@ import ( "github.com/krau/SaveAny-Bot/storage" ) +// responsibleUserID returns the sender's ID. Callback queries carry it +// natively; message updates resolve it through the entity map. +func responsibleUserID(u *ext.Update) int64 { + if u.CallbackQuery != nil { + return u.CallbackQuery.GetUserID() + } + return u.GetUserChat().GetID() +} + func checkPermission(ctx *ext.Context, update *ext.Update) error { - userID := update.GetUserChat().GetID() + userID := responsibleUserID(update) if !slice.Contain(config.C().GetUsersID(), userID) { - ctx.Reply(update, ext.ReplyTextString(i18n.T(i18nk.BotMsgCommonErrorNoPermission, nil)), nil) + if cbq := update.CallbackQuery; cbq != nil { + ctx.AnswerCallback(msgelem.AlertCallbackAnswer(cbq.GetQueryID(), i18n.T(i18nk.BotMsgCommonErrorNoPermission, nil))) + } else { + ctx.Reply(update, ext.ReplyTextString(i18n.T(i18nk.BotMsgCommonErrorNoPermission, nil)), nil) + } return dispatcher.EndGroups }