from typing import List from botbuilder.core import ( ActivityHandler, BotFrameworkAdapter, ConversationState, UserState, MessageFactory, TurnContext, ) from botbuilder.dialogs import DialogState from botframework.connector.auth import MicrosoftAppCredentials from config import DefaultConfig from helpers.dialog_helper import DialogHelper from dialogs import MainDialog class ChildBot(ActivityHandler): def __init__( self, dialog: MainDialog, user_state: UserState, conversation_state: ConversationState, config: DefaultConfig, ): self._user_state = user_state self._conversation_state = conversation_state self._dialog = dialog self._connection_name = config.CONNECTION_NAME self._config = config async def on_turn(self, turn_context: TurnContext): await super().on_turn(turn_context) await self._conversation_state.save_changes(turn_context) await self._user_state.save_changes(turn_context) async def on_sign_in_invoke( # pylint: disable=unused-argument self, turn_context: TurnContext ): await self._conversation_state.load(turn_context, True) await self._user_state.load(turn_context, True) await DialogHelper.run_dialog( self._dialog, turn_context, self._conversation_state.create_property(DialogState.__name__) ) async def on_message_activity(self, turn_context: TurnContext): if turn_context.activity.channel_id != "emulator": if "skill login" in turn_context.activity.text: await self._conversation_state.load(turn_context, True) await self._user_state.load(turn_context, True) await DialogHelper.run_dialog( self._dialog, turn_context, self._conversation_state.create_property(DialogState.__name__) ) return elif "skill logout" in turn_context.activity.text: adapter: BotFrameworkAdapter = turn_context.adapter await adapter.sign_out_user( turn_context, self._connection_name, turn_context.activity.from_property.id, MicrosoftAppCredentials(self._config.APP_ID, self._config.APP_PASSWORD)) await turn_context.send_activity(MessageFactory.text("logout from child bot successful")) else: await turn_context.send_activity(MessageFactory.text("child: activity (1)")) await turn_context.send_activity(MessageFactory.text("child: activity (2)")) await turn_context.send_activity(MessageFactory.text("child: activity (3)")) await turn_context.send_activity(MessageFactory.text(f"child: {turn_context.activity.text}"))