diff --git a/src/alice.ts b/src/alice.ts index 0fc5422..1770011 100644 --- a/src/alice.ts +++ b/src/alice.ts @@ -167,8 +167,8 @@ export default class Alice { * Если новая сессия, то запускаем стартовую команду */ if (req.session.new && this.welcomeCallback) { - const ctx = new Ctx(ctxDefaultParams) - return await this.welcomeCallback(ctx) + const ctxInstance = new Ctx(ctxDefaultParams) + return await this.welcomeCallback(ctxInstance) } /* * Команда нашлась в списке. @@ -176,11 +176,11 @@ export default class Alice { */ if (requestedCommands.length !== 0) { const requestedCommand = requestedCommands[0] - const ctx = new Ctx(merge(ctxDefaultParams, { + const ctxInstance = new Ctx(merge(ctxDefaultParams, { command: requestedCommand, })) - return await requestedCommand.callback(ctx) + return await requestedCommand.callback(ctxInstance) } /* @@ -237,11 +237,10 @@ export default class Alice { } } - public _handleEnterScene(sceneName) { + private _handleEnterScene(sceneName) { this.currentScene = sceneName } - public _handleLeaveScene(sceneName) { - console.log('leaving scene', sceneName) + private _handleLeaveScene(sceneName) { this.currentScene = null } } diff --git a/src/buttonBuilder.ts b/src/buttonBuilder.ts index 84189f8..16515e8 100644 --- a/src/buttonBuilder.ts +++ b/src/buttonBuilder.ts @@ -1,5 +1,5 @@ -class ButtonBuilder { - constructor(buttonConstructor) { +export default class ButtonBuilder { + constructor(buttonConstructor?: {}) { /* No button object passed to the constructor */ if (!buttonConstructor) { this.button = {} @@ -11,7 +11,7 @@ class ButtonBuilder { throw new Error('Invalid ButtonBuilder constructor type. Should be object') } const { - title, text + title, text, } = buttonConstructor if (!title && !text) { throw new Error('Button [title] or [text] is required for ButtonBuilder constructor.') @@ -21,35 +21,35 @@ class ButtonBuilder { return this.button } - _setTitle(title) { + public _setTitle(title) { this.button.title = title return this } - text(text) { + public text(text) { return this._setTitle(text) } - title(title) { + public title(title) { return this._setTitle(title) } - url(url) { + public url(url) { this.button.url = url return this } - shouldHide(flag) { + public shouldHide(flag) { this.button.hide = flag return this } - payload(payload) { + public payload(payload) { this.button.payload = payload return this } - get() { + public get() { return this.button } } diff --git a/src/command.ts b/src/command.ts index 75d3d01..26b3e94 100644 --- a/src/command.ts +++ b/src/command.ts @@ -6,12 +6,13 @@ import { CommandType, } from './constants' +import Ctx from './ctx' const foo: 'bar' = 'bar' export default class Command { public name: any[] | string | RegExp - public callback: () => void + public callback: (ctx: Ctx) => void public type: | CommandType constructor(name: string, callback: (() => void)) { diff --git a/src/ctx.ts b/src/ctx.ts index 52ab6a3..0c92a65 100644 --- a/src/ctx.ts +++ b/src/ctx.ts @@ -1,8 +1,27 @@ -const ReplyBuilder = require('./replyBuilder') -const ButtonBuilder = require('./buttonBuilder') const { reversedInterpolation, selectCommand } = require('./utils') +import Session from './session' -class Ctx { +import ReplyBuilder from './replyBuilder' +import ButtonBuilder from './buttonBuilder' +import Command from './command' + +export default class Ctx { + public req: {} + public sessionId: string + public messageId: string + public userId: string + public payload: {} + public message: string + public session: Session + + public command?: Command + + public replyBuilder: ReplyBuilder + public buttonBuilder: ButtonBuilder + + private sendResponse: (response: string) => void + private enterScene: () => void + private leaveScene: () => void constructor({ req, sendResponse, @@ -11,7 +30,7 @@ class Ctx { enterScene, leaveScene, - command + command, }) { this.req = req this.sendResponse = sendResponse @@ -20,7 +39,7 @@ class Ctx { this.messageId = req.session.message_id this.userId = req.session.user_id this.payload = req.request.payload - this.messsage = req.request.original_utterance + this.message = req.request.original_utterance this.session = session @@ -42,7 +61,7 @@ class Ctx { return reversedInterpolation(this.command.name, requestText) } - async reply(replyMessage) { + public async reply(replyMessage) { if (!replyMessage) { throw new Error('Reply message could not be empty!') } @@ -65,7 +84,7 @@ class Ctx { return this._sendReply(replyMessage) } - _sendReply(replyMessage) { + public _sendReply(replyMessage) { /* * That fires when listening on port. */