From 0a6c423e42776bdbc09f258af4d78d9b692923a9 Mon Sep 17 00:00:00 2001 From: Alexkurd <7689609+Alexkurd@users.noreply.github.com> Date: Wed, 15 Jul 2026 21:46:26 +0300 Subject: [PATCH 1/3] NewEphemeralMessage --- helper_methods.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/helper_methods.go b/helper_methods.go index 218e3695..dd16c84e 100644 --- a/helper_methods.go +++ b/helper_methods.go @@ -921,6 +921,25 @@ func newBaseEphemeralMessage(chatID, receiverUserID int64, ephemeralMessageID in } } +// NewEphemeralMessage creates a new EphemeralMessage. +// +// chatID is where to send it, receiverID is userID, text is the message text. +func NewEphemeralMessage(chatID int64, receiverID int64, text string) MessageConfig { + return MessageConfig{ + BaseChat: BaseChat{ + ChatConfig: ChatConfig{ + ChatID: chatID, + }, + }, + Text: text, + ReceiverUserID: receiverID, + LinkPreviewOptions: tgbotapi.LinkPreviewOptions{ + IsDisabled: false, + }, + } +} + + // NewEditEphemeralMessageText creates a request to edit ephemeral message text. func NewEditEphemeralMessageText(chatID, receiverUserID int64, ephemeralMessageID int, text string) EditEphemeralMessageTextConfig { return EditEphemeralMessageTextConfig{ From 1a9313986551774d510be1e5ef765f260d95281f Mon Sep 17 00:00:00 2001 From: Alexkurd <7689609+Alexkurd@users.noreply.github.com> Date: Wed, 15 Jul 2026 21:59:48 +0300 Subject: [PATCH 2/3] Update helper_methods.go --- helper_methods.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper_methods.go b/helper_methods.go index dd16c84e..5494e256 100644 --- a/helper_methods.go +++ b/helper_methods.go @@ -933,7 +933,7 @@ func NewEphemeralMessage(chatID int64, receiverID int64, text string) MessageCon }, Text: text, ReceiverUserID: receiverID, - LinkPreviewOptions: tgbotapi.LinkPreviewOptions{ + LinkPreviewOptions: LinkPreviewOptions{ IsDisabled: false, }, } From f50edf5ee65091648c22df7bdac35b5a18b179d0 Mon Sep 17 00:00:00 2001 From: Valeriy Selitskiy <239034+iamwavecut@users.noreply.github.com> Date: Thu, 16 Jul 2026 01:53:34 +0200 Subject: [PATCH 3/3] Refine ephemeral message constructor --- bot_api_10_2_test.go | 17 +++++++++++++++++ helper_methods.go | 24 ++++++++---------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/bot_api_10_2_test.go b/bot_api_10_2_test.go index 16e8a89e..04774447 100644 --- a/bot_api_10_2_test.go +++ b/bot_api_10_2_test.go @@ -152,6 +152,23 @@ func TestBotAPI102ReplyParametersIdentifiers(t *testing.T) { } } +func TestBotAPI102NewEphemeralMessageDirectAdminParams(t *testing.T) { + config := NewEphemeralMessage(-1001, 42, "private") + params, err := config.params() + if err != nil { + t.Fatalf("params: %v", err) + } + if params["chat_id"] != "-1001" || params["receiver_user_id"] != "42" || params["text"] != "private" { + t.Fatalf("direct admin ephemeral params mismatch: %#v", params) + } + if _, ok := params["callback_query_id"]; ok { + t.Fatalf("direct admin request unexpectedly contains callback query: %#v", params) + } + if _, ok := params["reply_parameters"]; ok { + t.Fatalf("direct admin request unexpectedly contains reply parameters: %#v", params) + } +} + func TestBotAPI102EphemeralSendParams(t *testing.T) { message := NewMessage(1, "text") message.ReceiverUserID, message.CallbackQueryID = 42, "callback" diff --git a/helper_methods.go b/helper_methods.go index 5494e256..a7db8d55 100644 --- a/helper_methods.go +++ b/helper_methods.go @@ -921,25 +921,17 @@ func newBaseEphemeralMessage(chatID, receiverUserID int64, ephemeralMessageID in } } -// NewEphemeralMessage creates a new EphemeralMessage. +// NewEphemeralMessage creates a text message visible only to receiverUserID. // -// chatID is where to send it, receiverID is userID, text is the message text. -func NewEphemeralMessage(chatID int64, receiverID int64, text string) MessageConfig { - return MessageConfig{ - BaseChat: BaseChat{ - ChatConfig: ChatConfig{ - ChatID: chatID, - }, - }, - Text: text, - ReceiverUserID: receiverID, - LinkPreviewOptions: LinkPreviewOptions{ - IsDisabled: false, - }, - } +// Bot administrators can send the returned config directly. Other bots must +// additionally set CallbackQueryID or ReplyParameters.EphemeralMessageID +// within 15 seconds of an eligible action. +func NewEphemeralMessage(chatID, receiverUserID int64, text string) MessageConfig { + config := NewMessage(chatID, text) + config.ReceiverUserID = receiverUserID + return config } - // NewEditEphemeralMessageText creates a request to edit ephemeral message text. func NewEditEphemeralMessageText(chatID, receiverUserID int64, ephemeralMessageID int, text string) EditEphemeralMessageTextConfig { return EditEphemeralMessageTextConfig{