Example #1
0
        /// <summary>
        /// Handles Ignore event sharing action.
        /// </summary>
        /// <param name="context">IDialogContext object.</param>
        /// <param name="activity">IAwaitable message activity.</param>
        /// <returns>Task.</returns>
        public async Task HandleIgnoreEventSharingAction(IDialogContext context, IAwaitable <IMessageActivity> activity)
        {
            var message = (Activity)await activity;

            if (message.Value != null)
            {
                var replyMessage = "Ok, if you change your mind you can share the events from the Events tab.";
                ShareEventPayload shareEventPayload = ((JObject)message.Value).ToObject <ShareEventPayload>();

                // Update the card
                IMessageActivity updatedMessage = context.MakeMessage();
                updatedMessage.Attachments.Add(CelebrationCard.GetShareEventAttachementWithoutActionButton(shareEventPayload.TeamName));
                updatedMessage.ReplyToId = message.ReplyToId;
                await this.connectorClient.Conversations.UpdateActivityAsync(message.Conversation.Id, message.ReplyToId, (Activity)updatedMessage);

                await context.PostAsync(replyMessage);

                context.Done <object>(null);
            }
        }
        /// <summary>
        /// Handles event Share action
        /// </summary>
        /// <param name="context">IDialogContext object</param>
        /// <param name="activity">IAwaitable message activity</param>
        /// <returns>Task.</returns>
        public async Task HandleEventShareAction(IDialogContext context, IAwaitable <IMessageActivity> activity)
        {
            var message      = (Activity)await activity;
            var replyMessage = string.Empty;

            if (message.Value != null)
            {
                ShareEventPayload shareEventPayload = ((JObject)message.Value).ToObject <ShareEventPayload>();

                try
                {
                    var teamMembers = await this.connectorClient.Conversations.GetConversationMembersAsync(shareEventPayload.TeamId);

                    var user = teamMembers.Select(x => x.AsTeamsChannelAccount()).Where(x => x.ObjectId == shareEventPayload.UserAadObjectId).FirstOrDefault();

                    // Fetch teamDetails from DB to check if bot is still present or un-installed from team
                    var document = await this.userManagementHelper.GetTeamsDetailsByTeamIdAsync(shareEventPayload.TeamId);

                    if (user == null)
                    {
                        replyMessage = string.Format(Strings.ShareWithTeamNotAMemberError, shareEventPayload.TeamName);
                    }
                    else if (document == null)
                    {
                        replyMessage = string.Format(Strings.ShareWithTeamsNotInstalledError, shareEventPayload.TeamName);
                    }
                    else
                    {
                        // Fetch all the events of user and share with team
                        var celebrationEvents = await this.eventDataProvider.GetEventsByOwnerObjectIdAsync(shareEventPayload.UserAadObjectId);

                        if (celebrationEvents.Count > 0)
                        {
                            foreach (var celebrationEvent in celebrationEvents)
                            {
                                celebrationEvent.Teams.Add(new Team {
                                    Id = shareEventPayload.TeamId
                                });
                                await this.eventDataProvider.UpdateEventAsync(celebrationEvent);
                            }
                        }

                        replyMessage = Strings.ShareWithTeamSuccessMessage;

                        // Update the card
                        IMessageActivity updatedMessage = context.MakeMessage();
                        updatedMessage.Attachments.Add(CelebrationCard.GetShareEventAttachmentWithoutActionButton(shareEventPayload.TeamName));
                        updatedMessage.ReplyToId = message.ReplyToId;
                        await this.connectorClient.Conversations.UpdateActivityAsync(message.Conversation.Id, message.ReplyToId, (Activity)updatedMessage);
                    }
                }
                catch (Exception ex)
                {
                    this.logProvider.LogError("Failed to share the existing event with team", ex, new Dictionary <string, string>()
                    {
                        { "TeamId", shareEventPayload.TeamId },
                        { "UserAadObjectId", shareEventPayload.UserAadObjectId },
                    });
                    replyMessage = Strings.ShareWithTeamGenericError;
                }

                await context.PostAsync(replyMessage);

                context.Done <object>(null);
            }
        }
Example #3
0
        /// <summary>
        /// Handles event Share action.
        /// </summary>
        /// <param name="context">IDialogContext object.</param>
        /// <param name="activity">IAwaitable message activity.</param>
        /// <returns>Task.</returns>
        public async Task HandleEventShareAction(IDialogContext context, IAwaitable <IMessageActivity> activity)
        {
            var message      = (Activity)await activity;
            var replyMessage = string.Empty;

            if (message.Value != null)
            {
                ShareEventPayload shareEventPayload = ((JObject)message.Value).ToObject <ShareEventPayload>();

                try
                {
                    var teamMembers = await this.connectorClient.Conversations.GetConversationMembersAsync(shareEventPayload.TeamId);

                    var user = teamMembers.Where(x => x.Properties["objectId"].ToString() == shareEventPayload.UserAadObjectId).ToList().FirstOrDefault();

                    var document = await this.userManagementHelper.GetTeamsDetailsByTeamIdAsync(shareEventPayload.TeamId);

                    bool isBotUnintsalledFromTeam = document == null ? true : false;

                    if (user == null)
                    {
                        replyMessage = $"You are no longer a member of {shareEventPayload.TeamName}.";
                    }
                    else if (isBotUnintsalledFromTeam)
                    {
                        replyMessage = "Someone uninstalled me from your team, I can no longer share these events there";
                    }
                    else
                    {
                        List <CelebrationEvent> celebrationEvents = await(await this.eventHelper.GetEventsByOwnerObjectIdAsync(
                                                                              shareEventPayload.UserAadObjectId)).ToListAsync();
                        if (celebrationEvents.Count > 0)
                        {
                            foreach (var celebrationEvent in celebrationEvents)
                            {
                                celebrationEvent.Teams.Add(new Team {
                                    Id = shareEventPayload.TeamId
                                });
                                CelebrationEvent updatedEvent = (dynamic)celebrationEvent;
                                updatedEvent.Teams = celebrationEvent.Teams;
                                await this.eventHelper.UpdateEventAsync(updatedEvent);
                            }
                        }

                        replyMessage = "I’ve set those events to be shared with the team when they occur.";

                        // Update the card
                        IMessageActivity updatedMessage = context.MakeMessage();
                        updatedMessage.Attachments.Add(CelebrationCard.GetShareEventAttachementWithoutActionButton(shareEventPayload.TeamName));
                        updatedMessage.ReplyToId = message.ReplyToId;
                        await this.connectorClient.Conversations.UpdateActivityAsync(message.Conversation.Id, message.ReplyToId, (Activity)updatedMessage);
                    }
                }
                catch (Exception ex)
                {
                    this.logProvider.LogError("Failed to share the existing event with team", ex, new Dictionary <string, string>()
                    {
                        {
                            "TeamId", shareEventPayload.TeamId
                        },
                        {
                            "TeamName", shareEventPayload.TeamName
                        },
                        {
                            "UserAadObjectId", shareEventPayload.UserAadObjectId
                        },
                    });

                    replyMessage = "Some error occurred to share the event with team. Please try again.";
                }

                await context.PostAsync(replyMessage);

                context.Done <object>(null);
            }
        }