public ProcessedMessageBase(ILogger logger, ITeamsUserRegistry teamsUserRegistry) { From = new List <ProcessedTeamsUser>(); To = new List <ProcessedTeamsUser>(); this.logger = logger.ForContext(GetType()); this.teamsUserRegistry = teamsUserRegistry; }
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; }
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; }
public ProcessedMessage(ILogger logger, ITeamsUserRegistry teamsUserRegistry) : base(logger, teamsUserRegistry) { }
public ProcessedNotificationMessage(ILogger logger, ITeamsUserRegistry teamsUserRegistry) : base(logger, teamsUserRegistry) { }
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); }