@@ -112,6 +112,23 @@ export default class Alice {
112112 const sessionId = selectSessionId ( req )
113113 const session = this . sessions . findOrCreate ( sessionId )
114114
115+ /*
116+ * Initializing context of the request
117+ */
118+ const ctxDefaultParams = {
119+ req,
120+ session,
121+ sendResponse : sendResponse || null ,
122+ /*
123+ * if Alice is listening on express.js port, add this server instance
124+ * to the context
125+ */
126+ server : this . server || null ,
127+ middlewares : this . middlewares ,
128+ }
129+ const ctxInstance = new Ctx ( ctxDefaultParams )
130+ const ctxWithMiddlewares = await applyMiddlewares ( this . middlewares , ctxInstance )
131+
115132 /* check whether current scene is not defined */
116133 if ( ! session . getData ( 'currentScene' ) ) {
117134 session . setData ( 'currentScene' , null )
@@ -129,12 +146,12 @@ export default class Alice {
129146 */
130147 if ( matchedScene ) {
131148 if ( matchedScene . isLeaveCommand ( requestedCommandName ) ) {
132- matchedScene . handleRequest ( req , sendResponse , session )
149+ await matchedScene . handleRequest ( req , sendResponse , ctxWithMiddlewares )
133150 session . setData ( 'currentScene' , null )
134151 return true
135152 } else {
136153 const sceneResponse = await matchedScene . handleRequest (
137- req , sendResponse , session ,
154+ req , sendResponse , ctxWithMiddlewares ,
138155 )
139156 if ( sceneResponse ) {
140157 return true
@@ -150,31 +167,15 @@ export default class Alice {
150167 if ( matchedScene ) {
151168 session . setData ( 'currentScene' , matchedScene . name )
152169 const sceneResponse = await matchedScene . handleRequest (
153- req , sendResponse , session ,
170+ req , sendResponse , ctxWithMiddlewares ,
154171 )
155172 if ( sceneResponse ) {
156173 return true
157174 }
158175 }
159176 }
160177
161- const requestedCommands = this . commands . search ( requestedCommandName )
162-
163- /*
164- * Initializing context of the request
165- */
166- const ctxDefaultParams = {
167- req,
168- session,
169- sendResponse : sendResponse || null ,
170- /*
171- * if Alice is listening on express.js port, add this server instance
172- * to the context
173- */
174- server : this . server || null ,
175- middlewares : this . middlewares ,
176- }
177-
178+ const requestedCommands = await this . commands . search ( ctxWithMiddlewares )
178179 /*
179180 * Если новая сессия, то запускаем стартовую команду
180181 */
@@ -183,10 +184,6 @@ export default class Alice {
183184 * Patch context with middlewares
184185 */
185186 if ( this . welcomeCallback ) {
186- // tslint:disable:no-shadowed-variable
187- const ctxInstance = new Ctx ( ctxDefaultParams )
188- const ctxWithMiddlewares = await applyMiddlewares ( this . middlewares , ctxInstance )
189- // tslint:enable:no-shadowed-variable
190187 return await this . welcomeCallback ( ctxWithMiddlewares )
191188 }
192189 }
@@ -196,22 +193,14 @@ export default class Alice {
196193 */
197194 if ( requestedCommands . length !== 0 ) {
198195 const requestedCommand : CommandInterface = requestedCommands [ 0 ]
199- // tslint:disable:no-shadowed-variable
200- const ctxInstance = new Ctx ( merge ( ctxDefaultParams , {
201- command : requestedCommand ,
202- } ) )
203- const ctxWithMiddlewares = await applyMiddlewares ( this . middlewares , ctxInstance )
204- // tslint:enable:no-shadowed-variable
196+ ctxWithMiddlewares . command = requestedCommand
205197 return await requestedCommand . callback ( ctxWithMiddlewares )
206198 }
207199
208200 /*
209201 * Такой команды не было зарегестрировано.
210202 * Переходим в обработчик исключений
211203 */
212- const ctxInstance = new Ctx ( ctxDefaultParams )
213- const ctxWithMiddlewares = await applyMiddlewares ( this . middlewares , ctxInstance )
214-
215204 if ( ! this . anyCallback ) {
216205 throw new Error ( [
217206 `alice.any(ctx => ctx.reply('404')) Method must be defined` ,
@@ -227,7 +216,7 @@ export default class Alice {
227216 public async handleRequest (
228217 req : WebhookRequest ,
229218 sendResponse ?: ( res : WebhookResponse ) => void ,
230- ) {
219+ ) : Promise < any > {
231220 return await this . handleRequestBody ( req , sendResponse )
232221 }
233222
0 commit comments