def teams_get_channel_data(activity: Activity) -> TeamsChannelData:
    if not activity:
        return None

    if activity.channel_data:
        return TeamsChannelData().deserialize(activity.channel_data)

    return None
def teams_get_channel_id(activity: Activity) -> str:
    if not activity:
        return None

    if activity.channel_data:
        channel_data = TeamsChannelData().deserialize(activity.channel_data)
        return channel_data.channel.id if channel_data.channel else None

    return None
def teams_get_team_info(activity: Activity) -> TeamInfo:
    if not activity:
        return None

    if activity.channel_data:
        channel_data = TeamsChannelData().deserialize(activity.channel_data)
        return channel_data.team

    return None
    def test_teams_aad_group_id_deserialize(self):
        # Arrange
        raw_channel_data = {"team": {"aadGroupId": "teamGroup123"}}

        # Act
        channel_data = TeamsChannelData().deserialize(raw_channel_data)

        # Assert
        assert channel_data.team.aad_group_id == "teamGroup123"
def teams_get_meeting_info(activity: Activity) -> TeamsMeetingInfo:
    if not activity:
        return None

    if activity.channel_data:
        channel_data = TeamsChannelData().deserialize(activity.channel_data)
        return channel_data.meeting

    return None
    async def test_send_message_to_teams(self):
        def create_conversation():
            pass

        adapter = SimpleAdapterWithCreateConversation(
            call_create_conversation=create_conversation)

        activity = Activity(
            type="message",
            text="test_send_message_to_teams_channel",
            channel_id=Channels.ms_teams,
            service_url="https://example.org",
            channel_data=TeamsChannelData(team=TeamInfo(id="team-id")),
        )
        turn_context = TurnContext(adapter, activity)
        handler = TestTeamsActivityHandler()
        await handler.on_turn(turn_context)
    async def on_teams_members_removed(self, teams_members_removed: [
        TeamsChannelAccount
    ], turn_context: TurnContext):
        if not turn_context:
            raise Exception("turn_context cannot be null")

        # TODO: Update once https://github.com/microsoft/botbuilder-python/pull/1069 is resolved
        channel_data = TeamsChannelData().deserialize(
            turn_context.activity.channel_data)
        if channel_data:
            team_info = channel_data.team
            location = (team_info.name if team_info else
                        turn_context.activity.conversation.conversation_type)
            hero_card = HeroCard(text=" ".join([
                f"{member.id} removed from {location}"
                for member in teams_members_removed
            ]))
            await turn_context.send_activity(
                MessageFactory.attachment(CardFactory.hero_card(hero_card)))
    async def on_conversation_update_activity(self, turn_context: TurnContext):

        if turn_context.activity.channel_id == Channels.ms_teams:
            channel_data = TeamsChannelData().deserialize(
                turn_context.activity.channel_data
            )
            if turn_context.activity.members_added:
                return await self.on_teams_members_added_dispatch_activity(
                    turn_context.activity.members_added, channel_data.team, turn_context
                )

            if turn_context.activity.members_removed:
                return await self.on_teams_members_removed_dispatch_activity(
                    turn_context.activity.members_removed,
                    channel_data.team,
                    turn_context,
                )

            if channel_data:
                if channel_data.event_type == "channelCreated":
                    return await self.on_teams_channel_created_activity(
                        ChannelInfo().deserialize(channel_data.channel),
                        channel_data.team,
                        turn_context,
                    )
                if channel_data.event_type == "channelDeleted":
                    return await self.on_teams_channel_deleted_activity(
                        channel_data.channel, channel_data.team, turn_context
                    )
                if channel_data.event_type == "channelRenamed":
                    return await self.on_teams_channel_renamed_activity(
                        channel_data.channel, channel_data.team, turn_context
                    )
                if channel_data.event_type == "teamRenamed":
                    return await self.on_teams_team_renamed_activity(
                        channel_data.team, turn_context
                    )
                return await super().on_conversation_update_activity(turn_context)

        return await super().on_conversation_update_activity(turn_context)
示例#9
0
 def get_team_id(turn_context: TurnContext):
     channel_data = TeamsChannelData(**turn_context.activity.channel_data)
     if channel_data.team:
         return channel_data.team["id"]
     return ""
    async def on_conversation_update_activity(self, turn_context: TurnContext):
        """
        Invoked when a conversation update activity is received from the channel.
        Conversation update activities are useful when it comes to responding to users
        being added to or removed from the channel.
        For example, a bot could respond to a user being added by greeting the user.

        :param turn_context: A context object for this turn.

        :returns: A task that represents the work queued to execute.

        .. remarks::
            In a derived class, override this method to add logic that applies
            to all conversation update activities.
        """
        if turn_context.activity.channel_id == Channels.ms_teams:
            channel_data = TeamsChannelData().deserialize(
                turn_context.activity.channel_data)
            if turn_context.activity.members_added:
                return await self.on_teams_members_added_dispatch(
                    turn_context.activity.members_added, channel_data.team,
                    turn_context)

            if turn_context.activity.members_removed:
                return await self.on_teams_members_removed_dispatch(
                    turn_context.activity.members_removed,
                    channel_data.team,
                    turn_context,
                )

            if channel_data:
                if channel_data.event_type == "channelCreated":
                    return await self.on_teams_channel_created(
                        ChannelInfo().deserialize(channel_data.channel),
                        channel_data.team,
                        turn_context,
                    )
                if channel_data.event_type == "channelDeleted":
                    return await self.on_teams_channel_deleted(
                        channel_data.channel, channel_data.team, turn_context)
                if channel_data.event_type == "channelRenamed":
                    return await self.on_teams_channel_renamed(
                        channel_data.channel, channel_data.team, turn_context)
                if channel_data.event_type == "teamArchived":
                    return await self.on_teams_team_archived(
                        channel_data.team, turn_context)
                if channel_data.event_type == "teamDeleted":
                    return await self.on_teams_team_deleted(
                        channel_data.team, turn_context)
                if channel_data.event_type == "teamHardDeleted":
                    return await self.on_teams_team_hard_deleted(
                        channel_data.team, turn_context)
                if channel_data.event_type == "channelRestored":
                    return await self.on_teams_channel_restored(
                        channel_data.channel, channel_data.team, turn_context)
                if channel_data.event_type == "teamRenamed":
                    return await self.on_teams_team_renamed(
                        channel_data.team, turn_context)
                if channel_data.event_type == "teamRestored":
                    return await self.on_teams_team_restored(
                        channel_data.team, turn_context)
                if channel_data.event_type == "teamUnarchived":
                    return await self.on_teams_team_unarchived(
                        channel_data.team, turn_context)

        return await super().on_conversation_update_activity(turn_context)