negezor / vk-io

Modern VK API SDK for Node.js
https://npm.im/vk-io
MIT License
549 stars 85 forks source link

enterHandler для сцен срабатывает всегда #532

Open DZ8540 opened 1 year ago

DZ8540 commented 1 year ago

What did you do?

Установил enterHandler для сцен

new StepScene('sceneName', { 
  steps,

  enterHandler() {
    console.log('HERE')
  }

What did you expect to happen?

Ожидал, что хендлер сработает лишь один раз, при входе в сцену

What was the actual result?

Вместо этого консоль выводит HERE при каждой отправке сообщения от пользователя, как будто установилась обычная мидлвара для сцены

Versions

package version
vk-io 4.7.0
@vk-io/scenes 1.2.0
negezor commented 1 year ago

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

DZ8540 commented 1 year ago

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

Было бы не плохо ввести именно enterHandler метод, который и подразумевает под собой единоразовый запуск (только при входе в сцену), потому что каждую мидлвару так костылить я думаю так себе идея

А еще лучше, если бы можно было передавать туда массив хендлеров, который сработают лишь один раз

negezor commented 1 year ago

Остаётся только подумать что делать с silent режимом при входе в сцену (отложенный запуск до следующего сообщения), а вот массив обработчиков уже не очень понятно. Туда нужно добавлять либо новую цепочку middleware или просто устроить гонку состояния.