From 30076dd2efab1725ed41cacccbbdb40d70645b21 Mon Sep 17 00:00:00 2001 From: Aleksey Shugaev Date: Mon, 18 May 2026 10:11:16 +0000 Subject: [PATCH] Fix copyMessage: use callApi for Telegraf 3.x compatibility Telegraf 3.38 doesn't have telegram.copyMessage(). Use telegram.callApi('copyMessage', {...}) to call the Bot API directly. --- src/commands/broadcast/broadcast.scenes.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/commands/broadcast/broadcast.scenes.ts b/src/commands/broadcast/broadcast.scenes.ts index ab9d7fe..5520e73 100644 --- a/src/commands/broadcast/broadcast.scenes.ts +++ b/src/commands/broadcast/broadcast.scenes.ts @@ -20,6 +20,22 @@ const WizardScene = require('telegraf/scenes/wizard') /** Resolve user language — ctx.i18n is NOT available in wizard steps 2+ */ const lang = (ctx): string => ctx.dbuser?.language ?? 'ru' +/** + * Telegraf 3.x lacks telegram.copyMessage(). Call the Bot API directly. + * https://core.telegram.org/bots/api#copymessage + */ +const copyMessage = ( + ctx, + chatId: number, + fromChatId: number, + messageId: number +) => + ctx.telegram.callApi('copyMessage', { + chat_id: chatId, + from_chat_id: fromChatId, + message_id: messageId, + }) + // Step 1: Ask for the message to broadcast const askForMessageStep = immediateStep('broadcastAskMessage', async (ctx) => { await ctx.replyWithHTML(i18n.t(lang(ctx), 'broadcast_askMessage')) @@ -91,7 +107,7 @@ const confirmStep = (() => { const { fromChatId, messageId, userCount } = state.broadcast try { - await ctx.telegram.copyMessage(ctx.from.id, fromChatId, messageId) + await copyMessage(ctx, ctx.from.id, fromChatId, messageId) await ctx.editMessageText( i18n.t(l, 'broadcast_testSent', { userCount }), { parse_mode: 'HTML', reply_markup: buildConfirmKeyboard() } @@ -133,7 +149,7 @@ const confirmStep = (() => { const result = await executeBroadcast( uniqueIds, async (userId) => { - await ctx.telegram.copyMessage(userId, fromChatId, messageId) + await copyMessage(ctx, userId, fromChatId, messageId) }, { onProgress(processed, total) {