@Lynatik001

Нужна ли «сцена» в telegraf, при написании бота?

Я нашел пример кода.
В моем боте планируются меню (или что-то еще) внутри меню.

Задача: сделать бота с небольшим функционалом. Например, Глав меню(список кнопок) - саб меню и т.д.
Планируются разные взаимодействия с БД через mongoose.
Так же я планирую использовать telegraf. В этой библиотеке есть "сцены", но.я не знаю, нужны ли они вообще. Я думаю, что всю логику можно раскидать по файлам, написать логику работы с меню в папку view и тогда можно обойтись без "сцен". Но я не уверен, что это правильный подход. Подскажите, прав ли я?

Еще имеется вопрос по поводу кода:
Как он должен выглядеть, если запуск бота в main-файле, а сцена в папке scene/mainMenuScene.js ?

Хотя я считаю, что вешать на каждое меню сцену - это слишком. Пожалуйста, помогите разобраться с этим.

Код, приведенный ниже, является примером реализации схемы. А у меня в index.js намешано достаточно много взаимодействия с ботом, например, bot.action, bot.hears + обработчики + функции для взаимодействия с db/controll /db/model

const Telegraf = require('telegraf')
const RedisSession = require('telegraf-session-redis')
const Stage = require('telegraf/stage')
const Scene = require('telegraf/scenes/base')
const { enter, leave } = Stage

const session = new RedisSession({
  store: {
    host: process.env.TELEGRAM_SESSION_HOST || '127.0.0.1',
    port: process.env.TELEGRAM_SESSION_PORT || 32768
  }
})

// Greeter scene
const greeterScene = new Scene('greeter')
greeterScene.enter((ctx) => ctx.reply('Hi'))
greeterScene.leave((ctx) => ctx.reply('Bye'))
greeterScene.hears('hi', enter('greeter'))
greeterScene.on('message', (ctx) => ctx.replyWithMarkdown('Send `hi`'))

// Echo scene
const echoScene = new Scene('echo')
echoScene.enter((ctx) => ctx.reply('echo scene'))
echoScene.leave((ctx) => ctx.reply('exiting echo scene'))
echoScene.command('back', leave())
echoScene.on('text', (ctx) => ctx.reply(ctx.message.text))
echoScene.on('message', (ctx) => ctx.reply('Only text messages please'))

const bot = new Telegraf(process.env.BOT_TOKEN)
const stage = new Stage([greeterScene, echoScene], { ttl: 10 })
bot.use(session)
bot.use(stage.middleware())
bot.command('greeter', enter('greeter'))
bot.command('echo', enter('echo'))
bot.on('message', (ctx) => ctx.reply('Try /echo or /greeter'))
bot.startPolling()
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Lynatik001 Автор вопроса
хех. походу некто не подскажет. кто писал бота на Node.js + telegraf - скиньте структуру, проекта.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
15 авг. 2020, в 05:42
50000 руб./за проект
15 авг. 2020, в 05:23
5000 руб./за проект
15 авг. 2020, в 04:49
5000 руб./за проект