Avesels
@Avesels
Node js develpoer

Какая правильная архитектура кода Телеграмм-бота на node-telegram-bot-api?

Всем привет! Зашерстил Google, но не нашел подобного решения архитектуры телеграмм-бота написанного на библиотеке node-telegram-bot-api.

Суть в том, что 90% моего кода находиться в одном index.js файле (у меня выходит выносить только переменные со значениями и внешние функции обёртки) и когда у тебя приложение начинает переваливать за 2 тысячи строк, становится затратно свайпать верх-вниз по длиной партянке.

Проблема же заключается в том, что все команды или функции, касающиеся бота (начинаются классом bot с вложенностью любым из его методом), такие как:
bot.on('message', msg => {
    const chatId = msg.chat.id
    switch (msg.text) {
        case kb.home.projects:
            bot.sendMessage(chatId, command_text__projects, {
                reply_markup: {
                    keyboard: keyboard.projects,
                    resize_keyboard: true,
                    one_time_keyboard: true
                }
            })
            break

или
bot.onText(/\/start/, msg => {
    const chatId = msg.chat.id
    if (msg.chat.username !== 'AveCardinal' ) {
        bot.sendMessage(chatId, command_text__start__error)
    } else if (msg.chat.username === 'AveCardinal') {
        bot.sendMessage(chatId, command_text__start_success, {
            reply_markup: {
                keyboard: keyboard.home,
                resize_keyboard: true
            }
        })
    }
})
привязаны к классу бот и даже если вынести создание класса bot в отдельный файл и делать require в каждый из отдельных файлов, в которых находиться бизнес-логика связанная с методами класса bot, то в итоге приложение не работает, поскольку код разбит, но не соединен в один общий файл.

Вопрос: как вынести бизнес-логику отдельного блока bot.on или любого другого метода класса bot в отдельный файл, а после соединить все блоки кода в один файл?
  • Вопрос задан
  • 674 просмотра
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
то, что у бота единая точка входа, это нормально, так как у тебя есть один листенер одного типа события.
для себя при создании подобного проекта я использовал идеи http сервера c роутом, мидлварами и хендлером обработчиком.
По сути весь код раскладывается на файлы хендлеров, которые мапаются к тем или иным командам, пропуская между роутом и хендлером через мидлвары безопасности
итоговая картинка может быть следующей:
1. пишешь движок, который воспроизводит обработку всей логики для события из листенера.
2. описываешь карту роутов из серии route.add("/start", startHandler), route.add("/get_price", authMW, getPriceHandler)
3. описываешь сами handlers где определяешь достаточный объем входящих в функцию параметров для работы твоего бота.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы