Exemple #1
0
        /// <summary>
        /// Overriding to send card when award admin member is removed from team.
        /// </summary>
        /// <param name="membersRemoved">A member removed from team, as described by the conversation update activity.</param>
        /// <param name="turnContext">Provides context for a turn of a bot.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <returns>Notification card  when bot or member is removed from team.</returns>
        protected override async Task OnMembersRemovedAsync(IList <ChannelAccount> membersRemoved, ITurnContext <IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        {
            turnContext = turnContext ?? throw new ArgumentNullException(nameof(turnContext));

            var activity = turnContext.Activity;

            this.logger.LogInformation($"conversationType: {activity.Conversation?.ConversationType}, membersRemoved: {membersRemoved?.Count}");
            if (activity.Conversation.ConversationType == ChannelConversationType)
            {
                var teamsDetails = turnContext.Activity.TeamsGetTeamInfo();
                var admin        = await this.configureAdminStorageProvider.GetAdminDetailAsync(teamsDetails.Id);

                // In application, there is a persona named 'Champion' who is the only person in team to create reward cycle, add awards and publish results.
                // In case if the Champion is removed from team, then the bot sends a new card to set up new Champion.
                if (membersRemoved.Any(member => member.AadObjectId == admin.AdminObjectId))
                {
                    this.logger.LogInformation($"Award captain is removed from team. {activity.Conversation.Id}");
                    await turnContext.SendActivityAsync(MessageFactory.Attachment(WelcomeCard.ConfigureNewAdminCard(this.localizer)), cancellationToken);
                }

                // Deleting team information from storage when bot is uninstalled from a team.
                else if (membersRemoved.Any(member => member.Id == activity.Recipient.Id))
                {
                    this.logger.LogInformation($"Bot removed {activity.Conversation.Id}");
                    var teamEntity = await this.teamStorageProvider.GetTeamDetailAsync(teamsDetails.Id);

                    bool operationStatus = await this.teamStorageProvider.DeleteTeamDetailAsync(teamEntity);

                    if (!operationStatus)
                    {
                        this.logger.LogInformation($"Unable to remove team details from table storage.");
                    }
                }
            }
        }