'TypeError: Cannot read properties of undefined (reading 'enter') Библиотека Telegraf.js
Good afternoon, I ran into a problem, I can not enter the stage
I understand that this happens in the startPolling method when using a new scene, but the problem has not been identified
My Class TelegramManager:
import {Config} from "../../resources/Config.js";
import Command from "../objects/Command.js";
import UserDirector from "../directors/UserDirector.js";
import ScenesManager from "./ScenesManager.js";
export default class TelegramManager {
constructor(commandManager) {
this.commandManager = commandManager
this.telegramClient = new Telegraf(Config.telegram.token) // Инициализация клиента Telegram
this.userDirector = new UserDirector(); // Инициализация юзер директора
this.scenesManager = new ScenesManager()
this.registerCommands()
this.registerListeners()
this.startPolling()
}
//регистрация обработчика моманд
//его цель это принимать все сообщения, которые приходят боту и искать среди них команду
registerListeners() {
this.telegramClient.on('text', (context) => {
this.commandManager.matchCommandByText(context.message.text, context)
})
}
//старт прослушивания ивентов от Telegram
startPolling() {
this.telegramClient.use(session()) //Используем сессии
this.telegramClient.use(new Scenes.Stage(this.scenesManager.getScenesList()).middleware()) //Регистрируем наши сцены
this.telegramClient.launch() //Запускаем бота
.then(r => console.log(`Telegram Bot started!`)) //Говорим в консоль о том, что бот запущен
}
//в этом медоде просто добавляем всевозможные команды для бота
registerCommands() {
this.commandManager.addCommand(new Command(/^\/start/gm, async (context) => {
//Проверяем, если пользователь уже есть в базе данных то не даём зарегистрироваться сн0ова
if (this.userDirector.userExists(context.message.from.id)) return context.reply(`Вы уже зарегистрированы!`)
//Если человек не зарегистрирован, то отправляем его в сцену регистрации
await context.scene.enter('registrationScene')
}))
}
}
ScenesManager Class:
export default class ScenesManager {
constructor() {
this.scenes = []
this.registerScenes()
}
registerScene(scene) {
this.scenes.push(scene)
}
registerScenes() {
this.registerScene(registrationScene)
}
getScenesList() {
return this.scenes
}
}
Scene itself (registrationScene):
import {Markup, Composer, Scenes} from "telegraf";
import {Config} from "../../../resources/Config.js";
const startStep = new Composer()
startStep.on("text", async (ctx) => {
try {
ctx.wizard.state.data = {}
ctx.wizard.state.data.id = ctx.message.from.id
await ctx.reply(Config.messages.welcome)
} catch (e) {
console.log(e)
}
})
const registrationScene = new Scenes.WizardScene('registrationScene', startStep)
export default registrationScene
Error:
*TypeError: Cannot read properties of undefined (reading 'enter') at Command.action (file:///home/tofa/work/WebstormProjects/timetable/src/telegram/TelegramManager.js:43:33) at Command.execute (file:///home/tofa/work/WebstormProjects/timetable/src/objects/Command.js:10:14) at CommandManager.matchCommandByText (file:///home/tofa/work/WebstormProjects/timetable/src/telegram/CommandManager.js:16:29) at file:///home/tofa/work/WebstormProjects/timetable/src/telegram/TelegramManager.js:23:33 at /home/tofa/work/WebstormProjects/timetable/node_modules/telegraf/lib/composer.js:163:111 at processTicksAndRejections (node:internal/process/task_queues:96:5) at async execute (/home/tofa/work/WebstormProjects/timetable/node_modules/telegraf/lib/composer.js:468:17) at async /home/tofa/work/WebstormProjects/timetable/node_modules/telegraf/lib/composer.js:469:21 at async execute (/home/tofa/work/WebstormProjects/timetable/node_modules/telegraf/lib/composer.js:468:17) at async execute (/home/tofa/work/WebstormProjects/timetable/node_modules/telegraf/lib/composer.js:468:17)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
