Telegraf бот прекратил принимать сообщения. Никаких ошибок не показано

У меня есть бот для принятия запросов, и есть веб-интерфейс для ответа на эти запросы. В последнее время я несколько раз заметил, что бот просто прекращает принимать запросы от клиентов. Это было 13го ноября, и вот 2го декабря. Раньше такого никогда не было, бот спокойно проработал 7 месяцев. Сервер в это время не обновлялся, код тоже.

Никаких ошибок, ничего. Также, ответы на эти "запросы", отправляемые с веб-интерфейса, проходят через этот же самый бот, и вроде бы доставляются клиентам без проблем. Бот токена актуальный и валидный.

Что случилось в ноябре? Может Телеграм ввел какие-то новые правила для ботов, может кто-то знает? Инициализация бота вполне себе стандартная:

import { Telegraf, Markup, Composer, Scenes, session } from 'telegraf'
import { message } from 'telegraf/filters'
import { Mongo as mongoSession } from "@telegraf/session/mongodb";
import { stages as menuWizardStages } from './wizards/menu'
import { stages as newTicketWizardStages } from './wizards/newTicket'
import { stages as oldTicketWizardStages } from './wizards/oldTicket'
import { startHandler } from './commands'
import { blockedUserHandler } from './commands'
import handleMessage from './handleMessage'
import mediaGroup from 'telegraf-media-group'

export async function setupBot() {
    try {
        console.log('in setupBot')
        
        await global.getDBInitialized();

        const bot = new Telegraf(process.env.BOT_TOKEN)

        bot.telegram.setMyCommands([
            { command: 'start', description: 'Start' },
        ]).catch(e => console.warn(e));
        bot.telegram.setMyDescription("My bot description").catch(e => console.warn(e));
        global.telegrafBot = bot;
        
        bot.use(blockedUserHandler)
        bot.use(session()); // { store: dbSessionStore }
        const menuWizard = new Scenes.WizardScene('menuWizard', ...menuWizardStages);
        const newTicketWizard = new Scenes.WizardScene('newTicketWizard', ...newTicketWizardStages);
        
        const oldTicketWizard = new Scenes.WizardScene('oldTicketWizard', ...oldTicketWizardStages);
        
        bot.use(mediaGroup());
        const stages = new Scenes.Stage([menuWizard, newTicketWizard, oldTicketWizard])
        bot.use(stages.middleware());
        bot.start(startHandler)

        bot.on('edited_message', async function (ctx) {
            return await ctx.reply(`We do not process messages edits`)
        })
        bot.on('message', handleMessage)
        bot.launch()

        // Enable graceful stop
        process.once('SIGINT', function () {
            console.log('bot stopping with SIGINT')
            bot.stop('SIGINT')
        })
        process.once('SIGTERM', function () {
            console.log('bot stopping with SIGTERM')
            bot.stop('SIGTERM')
        })

        console.log('Bot is launched.')
    } catch (e) {
        console.warn(e)
    }
}

Обычно, когда юзер отправляет /start в наш бот, бот принимает этот запрос и показывает некое меню. Когда появляется описываемая проблема, бот ничего не делает, даже на /start не отвечает.

Код для обработки /start:

export const startHandler = async function (ctx) {
    console.log('startHandler, ctx.scene', !!ctx.scene, 'ctx.wizard', !!ctx.wizard)
    await ctx.scene?.leave();
    
    await ctx.scene?.enter('menuWizard');

    return;
}

У меня логи по всему приложению, каждое действие и прохождение по визардам логгируется. В какой-то момент, бот просто перестает обрабатывать сообщения. В данный момент у нас примерно 150 запросов в день.

Я сейчас "фиксю" эту проблему рестартом процесса бота на моем сервере, пришлось добавить перезапуск каждую ночь. Это костыль, нужно реальное решение.


Ответы (0 шт):