コード例 #1
0
 public ProcessedMessageBase(ILogger logger, ITeamsUserRegistry teamsUserRegistry)
 {
     From                   = new List <ProcessedTeamsUser>();
     To                     = new List <ProcessedTeamsUser>();
     this.logger            = logger.ForContext(GetType());
     this.teamsUserRegistry = teamsUserRegistry;
 }
コード例 #2
0
 public TeamsChatRetriever(ILogger logger, TeamsUserTenantsRetriever userTenantsRetriever, ITeamsUserRegistry userRegistry, ITeamsChatRegistry chatRegistry, TeamsLongPollingRegistry longPollingRegistry, Configuration config)
 {
     this.logger = logger.ForContext <TeamsChatRetriever>();
     this.userTenantsRetriever = userTenantsRetriever;
     this.userRegistry         = userRegistry;
     this.chatRegistry         = chatRegistry;
     this.longPollingRegistry  = longPollingRegistry;
     this.config = config;
 }
コード例 #3
0
 public TeamsTenantApiAccessor(
     ILogger logger,
     TeamsTokenRetriever tokenRetriever,
     TeamsGlobalApiAccessor teamsGlobalScope,
     ITeamsUserRegistry teamsUserRegistry,
     IProcessedMessageFactory processedMessageFactory,
     Configuration config)
 {
     this.logger                  = logger.ForContext <TeamsTenantApiAccessor>();
     this.tokenRetriever          = tokenRetriever;
     this.teamsGlobalScope        = teamsGlobalScope;
     this.teamsUserRegistry       = teamsUserRegistry;
     this.processedMessageFactory = processedMessageFactory;
     this.config                  = config;
 }
コード例 #4
0
 public ProcessedMessage(ILogger logger, ITeamsUserRegistry teamsUserRegistry) : base(logger, teamsUserRegistry)
 {
 }
 public ProcessedNotificationMessage(ILogger logger, ITeamsUserRegistry teamsUserRegistry) : base(logger, teamsUserRegistry)
 {
 }
コード例 #6
0
        public static async Task <(bool, List <string>)> ResolveParticipantPlaceholders(ILogger logger, ITeamsUserRegistry userRegistry, TeamsDataContext ctx, IMutableChatMessage message)
        {
            var replacedSomething = false;
            var notes             = new List <string>();

            var pattern   = TeamsParticipant.PlaceholderPattern;
            var replacers = new List <(Func <IMutableChatMessage, string?>, Action <IMutableChatMessage, string>, string)>
            {
                (m => m.MessageSubject, (m, s) => m.MessageSubject = s, "subject"),
                (m => m.TextContent, (m, s) => m.TextContent = s, "text content"),
                (m => m.HtmlContent, (m, s) => m.HtmlContent = s, "HTML content")
            };

            foreach (var stringReplacer in replacers)
            {
                var(stringGetter, stringSetter, replacementTarget) = stringReplacer;
                var stringToHandle = stringGetter(message);
                if (stringToHandle == null)
                {
                    continue;
                }

                var matches = Regex.Matches(stringToHandle, pattern);
                if (matches.Count == 0)
                {
                    continue;
                }

                var resolvedUserNames = new Dictionary <TeamsParticipant, ProcessedTeamsUser>();
                foreach (Match?match in matches)
                {
                    var userId = (TeamsParticipant)match?.Groups[1].Value;
                    if (!userId.IsValid)
                    {
                        continue;
                    }

                    var user = await userRegistry.GetUserByIdAsync(ctx, userId, false);

                    if (user != null && user.HasDisplayName)
                    {
                        logger.Debug("[{TenantName}] Found unresolved user id {UserId} and resolved it to name {Name}", ctx.Tenant.TenantName, userId, user.DisplayName);
                        resolvedUserNames[userId] = user;
                    }
                    else
                    {
                        logger.Verbose("[{TenantName}] Found unresolved user id {UserId} and could not resolve it to display name", ctx.Tenant.TenantName, userId);
                    }
                }

                if (resolvedUserNames.Count > 0)
                {
                    var stringToHandleWithPlaceholdersReplaced = Regex.Replace(stringToHandle, pattern, (match) =>
                    {
                        var userId = (TeamsParticipant)match.Groups[1].Value;
                        if (resolvedUserNames.TryGetValue(userId, out var user))
                        {
                            notes.Add($"Replacing '{match.Value}' with '{user.DisplayName}' in {replacementTarget}");
                            return(user.DisplayName);
                        }
                        else
                        {
                            return(match.Value);
                        }
                    });
                    if (!stringToHandle.Equals(stringToHandleWithPlaceholdersReplaced))
                    {
                        stringSetter(message, stringToHandleWithPlaceholdersReplaced);
                        replacedSomething = true;
                    }
                }
            }
            return(replacedSomething, notes);
        }