From 1d431dbc8882ad0177e37cdd35d41e02f2d82359 Mon Sep 17 00:00:00 2001 From: krau <71133316+krau@users.noreply.github.com> Date: Mon, 24 Aug 2026 08:38:07 +0800 Subject: [PATCH] fix(bot): resolved callback sender id in permission check --- client/bot/handlers/middleware.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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 }