50 lines
1.8 KiB
JavaScript
50 lines
1.8 KiB
JavaScript
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
const { ActivityHandler } = require('botbuilder');
|
|
|
|
class DialogBot extends ActivityHandler {
|
|
/**
|
|
*
|
|
* @param {ConversationState} conversationState
|
|
* @param {UserState} userState
|
|
* @param {Dialog} dialog
|
|
*/
|
|
constructor(conversationState, userState, dialog) {
|
|
super();
|
|
if (!conversationState) throw new Error('[DialogBot]: Missing parameter. conversationState is required');
|
|
if (!userState) throw new Error('[DialogBot]: Missing parameter. userState is required');
|
|
if (!dialog) throw new Error('[DialogBot]: Missing parameter. dialog is required');
|
|
|
|
this.conversationState = conversationState;
|
|
this.userState = userState;
|
|
this.dialog = dialog;
|
|
this.dialogState = this.conversationState.createProperty('DialogState');
|
|
|
|
this.onMessage(async (context, next) => {
|
|
console.log('Running dialog with Message Activity.');
|
|
|
|
// Run the Dialog with the new message Activity.
|
|
await this.dialog.run(context, this.dialogState);
|
|
|
|
// By calling next() you ensure that the next BotHandler is run.
|
|
await next();
|
|
});
|
|
|
|
this.onDialog(async (context, next) => {
|
|
// Save any state changes. The load happened during the execution of the Dialog.
|
|
await this.conversationState.saveChanges(context, false);
|
|
await this.userState.saveChanges(context, false);
|
|
|
|
// By calling next() you ensure that the next BotHandler is run.
|
|
await next();
|
|
});
|
|
}
|
|
|
|
async onSignInInvoke(context) {
|
|
await this.dialog.run(context, this.dialogState);
|
|
}
|
|
}
|
|
|
|
module.exports.DialogBot = DialogBot;
|