@@ -144,19 +144,27 @@ class Bot {
144
144
this . detailedAnswers [ message . user ] = [ ]
145
145
this . detailedAnswers [ message . user ] . push ( text )
146
146
}
147
+
148
+ this . callInteractiveRepliesCallbacks ( message . user ) ;
149
+
147
150
if ( typeof cb === 'function' ) {
148
151
cb ( { } , { } )
149
152
}
150
153
}
151
154
replyInteractive ( message , text , cb ) {
152
155
this . reply ( message , text ) ;
153
- if ( this . interactiveRepliesCallbacks [ message . callback_id ] ) {
156
+ }
157
+ callInteractiveRepliesCallbacks ( message_user ) {
158
+ //Check if we have an interactive reply to call to
159
+ for ( let user in this . interactiveRepliesCallbacks ) {
160
+ if ( user != message_user )
161
+ continue ;
154
162
let result ;
155
- if ( this . detailedAnswers [ message . user ] ) {
156
- result = this . detailedAnswers [ message . user ] [ this . detailedAnswers [ message . user ] . length - 1 ] ;
163
+ if ( this . detailedAnswers [ user ] ) {
164
+ result = this . detailedAnswers [ user ] [ this . detailedAnswers [ user ] . length - 1 ] ;
157
165
}
158
- this . interactiveRepliesCallbacks [ message . callback_id ] ( result ) ;
159
- delete this . interactiveRepliesCallbacks [ message . callback_id ] ;
166
+ this . interactiveRepliesCallbacks [ user ] ( result ) ;
167
+ delete this . interactiveRepliesCallbacks [ user ] ;
160
168
}
161
169
}
162
170
// start new conversation
@@ -210,7 +218,7 @@ class Controller {
210
218
//store events we want to listen
211
219
this . events = [ ] ;
212
220
}
213
- interactiveMessage ( message ) {
221
+ interactiveMessage ( message , userTypes ) {
214
222
if ( ! message . callback_id )
215
223
throw "Missing callback_id" ;
216
224
return new Promise ( ( resolve , reject ) => {
@@ -222,11 +230,15 @@ class Controller {
222
230
resolve ( ) ;
223
231
return ;
224
232
}
225
-
226
- if ( ! this . bot . interactiveRepliesCallbacks [ message . callback_id ] )
227
- this . bot . interactiveRepliesCallbacks [ message . callback_id ] = [ ] ;
228
-
229
- this . bot . interactiveRepliesCallbacks [ message . callback_id ] = resolve ;
233
+ if ( userTypes && userTypes . length > 0 ) { //If we're expecting the user to enter some text in response to the interactive message, we better store it and let Convo.ask call resolve
234
+ this . allTypers = userTypes ;
235
+ // save options
236
+ this . typeOptions = { } ;
237
+ // add resolve to type options
238
+ this . typeOptions . resolve = resolve ;
239
+ } else { //Otherwise, we will call the resolve func once we get an interactiveReply
240
+ this . bot . interactiveRepliesCallbacks [ message . user ] = resolve ;
241
+ }
230
242
//Only support one event listener
231
243
relevantEvents [ 0 ] . callback ( this . bot , message ) ;
232
244
} ) ;
@@ -244,7 +256,7 @@ class Controller {
244
256
} ) [ 0 ]
245
257
if ( ! whoStartConvoWithBotFirst )
246
258
throw "initiator missing"
247
- // save all typers who will take action in conversation
259
+ // save all typers who will take action in conversation
248
260
self . allTypers = userTypes ;
249
261
// save main typer ( first typer )
250
262
self . mainTyper = whoStartConvoWithBotFirst ;
@@ -254,14 +266,14 @@ class Controller {
254
266
self . typeOptions . resolve = resolve ;
255
267
// get first message which need send to bot
256
268
var msg = whoStartConvoWithBotFirst . messages . shift ( )
257
- // correct message format - message must be an object with property text: "Message Text"
269
+ // correct message format - message must be an object with property text: "Message Text"
258
270
if ( typeof ( msg ) == 'string' )
259
271
msg = {
260
272
text : msg ,
261
273
}
262
274
263
275
msg . type = ( whoStartConvoWithBotFirst . type || 'direct_message' ) ;
264
- // set message user
276
+ // set message user
265
277
msg . user = msg . user || whoStartConvoWithBotFirst . user
266
278
// send first message
267
279
self . initialUserMessage ( msg , options )
@@ -370,6 +382,7 @@ class Convo {
370
382
return typer . user == self . user ;
371
383
} ) [ 0 ]
372
384
if ( currentTyper ) {
385
+ this . bot . callInteractiveRepliesCallbacks ( self . user ) ;
373
386
// check if user has some message for answer to bot
374
387
if ( currentTyper . messages . length ) {
375
388
// get last message
0 commit comments