fletcherist / yandex-dialogs-sdk

☂️Build your skill for Yandex.Alice with ease. (nodejs/typescript)
MIT License
122 stars 16 forks source link

Программный выход из сцены #84

Closed AntonRzevskiy closed 6 years ago

AntonRzevskiy commented 6 years ago

Здравствуйте! Я немного запутался в сценах. Хочу сразу предупредить я с "nodejs" на вы, а с "typeScript" на "что это О_о".

Постараюсь вкратце объяснить, что мне нужно:

Я хочу создать сцену, но "матчи" для успешного выхода определить программно или в "any" парсить и выходить? как то можно так?

fletcherist commented 6 years ago

@AntonRzevskiy Привет! Для тебя есть несколько недокумментированных возможностей, однако готовых для продакшена.

scene.enter('Я сюда попал', ctx => ...)
scene.leave((ctx) => isTimeToLeave(ctx), ctx => ctx.reply('Вышел со сцены'))

Грубо говоря, просто передай первым аргументом функцию, возвращающую boolean, если ты вернёшь true, то тогда совершится выход со сцены.

Вариант N два

const scene2 = new Scene('scene-2')
scene1.any(ctx => {
   ctx.enterScene(scene2) // Перейдёт на вторую сцену
   ctx.leaveScene() // Выйдет на главный сценарий
}

Спрашивай, если что-то ещё не ясно :) Буду рад помочь!

P.S Для обычный команд тоже можно писать матчеры (функции первым аргументом), чтобы делать нетривиальную логику захода, связанную с ctx.state или чем-нибудь ещё

AntonRzevskiy commented 6 years ago

Спасибо @fletcherist. Идея использовать свою функцию для "матча", мне очень нравится! Пока справился метод ctx.leaveScene(). Буду следить за вашим растущим проектом, надеюсь он будет идти в ногу с Алисой :)

fletcherist commented 6 years ago

@AntonRzevskiy мы готовим большой релиз 2.0. Он сломает обратную совместимость в некоторых местах, но будет намного круче сделан архитектурно. Подробнее..