Esempio n. 1
0
        /// <summary>
        /// Methods mentions user in respective channel of which they are part after grouping.
        /// </summary>
        /// <param name="mentionToEmails">List of email ID whom to be mentioned.</param>
        /// <param name="userObjectId">Azure active directory object id of current login user.</param>
        /// <param name="teamId">Team id where bot is installed.</param>
        /// <param name="turnContext">Provides context for a turn of a bot.</param>
        /// <param name="localizer">The current cultures' string localizer.</param>
        /// <param name="logger">Instance to send logs to the application insights service.</param>
        /// <param name="mentionType">Mention activity type.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <returns>A task that sends notification in newly created channel and mention its members.</returns>
        internal static async Task <Activity> GetMentionActivityAsync(IEnumerable <string> mentionToEmails, string userObjectId, string teamId, ITurnContext turnContext, IStringLocalizer <Strings> localizer, ILogger logger, MentionActivityType mentionType, CancellationToken cancellationToken)
        {
            List <Entity> entities      = new List <Entity>();
            string        text          = string.Empty;
            string        mentionToText = string.Empty;

            try
            {
                var channelMembers = await TeamsInfo.GetTeamMembersAsync(turnContext, teamId, cancellationToken);

                var mentionToMembers = channelMembers.Where(member => mentionToEmails.Contains(member.Email));
                var mentionByMember  = channelMembers.Where(member => member.AadObjectId == userObjectId).First();

                foreach (ChannelAccount member in mentionToMembers)
                {
                    Mention mention = new Mention
                    {
                        Mentioned = member,
                        Text      = $"<at>{member.Name}</at>",
                    };
                    entities.Add(mention);
                }

                mentionToText = string.Join(", ", mentionToMembers.Select(member => $"<at>{member.Name}</at>"));

                Mention mentionBy = new Mention
                {
                    Mentioned = mentionByMember,
                    Text      = $"<at>{mentionByMember.Name}</at>",
                };

                switch (mentionType)
                {
                case MentionActivityType.SetAdmin:
                    entities.Add(mentionBy);
                    text = localizer.GetString("SetAdminMentionText", mentionToText, mentionBy.Text);
                    break;

                case MentionActivityType.Nomination:
                    entities.Add(mentionBy);
                    text = localizer.GetString("NominationMentionText", mentionToText, mentionBy.Text);
                    break;

                case MentionActivityType.Winner:
                    text = $"{localizer.GetString("WinnerMentionText")} {mentionToText}.";
                    break;

                default:
                    break;
                }

                Activity notificationActivity = MessageFactory.Text(text);
                notificationActivity.Entities = entities;
                return(notificationActivity);
            }
#pragma warning disable CA1031 // Catching general exceptions to log exception details in telemetry client.
            catch (Exception ex)
#pragma warning restore CA1031 // Catching general exceptions to log exception details in telemetry client.
            {
                logger.LogError(ex, $"Error while mentioning channel member in respective channels.");
                return(null);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Methods mentions user in respective channel of which they are part after grouping.
        /// </summary>
        /// <param name="mentionToEmails">List of email ID whom to be mentioned.</param>
        /// <param name="userObjectId">Azure active directory object id of the user.</param>
        /// <param name="teamId">Team id where bot is installed.</param>
        /// <param name="turnContext">Provides context for a turn of a bot.</param>
        /// <param name="localizer">The current cultures' string localizer.</param>
        /// <param name="logger">Instance to send logs to the application insights service.</param>
        /// <param name="mentionType">Mention activity type.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <returns>A task that sends notification in newly created channel and mention its members.</returns>
        internal static async Task <Activity> GetMentionActivityAsync(IEnumerable <string> mentionToEmails, string userObjectId, string teamId, ITurnContext turnContext, IStringLocalizer <Strings> localizer, ILogger logger, MentionActivityType mentionType, CancellationToken cancellationToken)
        {
            try
            {
                StringBuilder  mentionText = new StringBuilder();
                List <Entity>  entities    = new List <Entity>();
                List <Mention> mentions    = new List <Mention>();
                IEnumerable <TeamsChannelAccount> channelMembers = await TeamsInfo.GetTeamMembersAsync(turnContext, teamId, cancellationToken);

                IEnumerable <ChannelAccount> mentionToMemberDetails = channelMembers.Where(member => mentionToEmails.Contains(member.Email)).Select(member => new ChannelAccount {
                    Id = member.Id, Name = member.Name
                });
                ChannelAccount mentionByMemberDetails = channelMembers.Where(member => member.AadObjectId == userObjectId).Select(member => new ChannelAccount {
                    Id = member.Id, Name = member.Name
                }).FirstOrDefault();

                foreach (ChannelAccount member in mentionToMemberDetails)
                {
                    Mention mention = new Mention
                    {
                        Mentioned = new ChannelAccount()
                        {
                            Id   = member.Id,
                            Name = member.Name,
                        },
                        Text = $"<at>{XmlConvert.EncodeName(member.Name)}</at>",
                    };
                    mentions.Add(mention);
                    entities.Add(mention);
                    mentionText.Append(mention.Text).Append(", ");
                }

                Mention mentionBy = new Mention
                {
                    Mentioned = new ChannelAccount()
                    {
                        Id   = mentionByMemberDetails.Id,
                        Name = mentionByMemberDetails.Name,
                    },
                    Text = $"<at>{XmlConvert.EncodeName(mentionByMemberDetails.Name)}</at>",
                };

                string text = string.Empty;

                switch (mentionType)
                {
                case MentionActivityType.SetAdmin:
                    entities.Add(mentionBy);
                    text = localizer.GetString("SetAdminMentionText", mentionText.ToString().Trim().TrimEnd(','), mentionBy.Text);
                    break;

                case MentionActivityType.Nomination:
                    entities.Add(mentionBy);
                    text = localizer.GetString("NominationMentionText", mentionText.ToString().Trim().TrimEnd(','), mentionBy.Text);
                    break;

                case MentionActivityType.Winner:
                    text = $"{localizer.GetString("WinnerMentionText")} {mentionText.ToString().Trim().TrimEnd(',')}";
                    break;

                default:
                    break;
                }

                Activity notificationActivity = MessageFactory.Text(text);
                notificationActivity.Entities = entities;
                return(notificationActivity);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, $"Error while mentioning channel member in respective channels.");
                return(null);
            }
        }