public async Task ReadUserMessages(DiscordRequest request, Contexts contexts) { var mention = request.GetMention(); var selectedUser = _usersService.GetUserByMention(contexts.Server, mention); if (selectedUser == null) { throw new UserNotFoundException(mention); } var timeRange = request.GetPastTimeRange(defaultTime: TimeSpan.FromHours(1)); var query = new GetMessagesQuery(contexts.Server.Id, selectedUser.Id) { SentDate = timeRange }; var messages = _queryBus.Execute(query).Messages .OrderBy(x => x.SentAt) .ToList(); var messagesService = _messagesServiceFactory.Create(contexts); var hasForceArgument = request.HasArgument("force") || request.HasArgument("f"); if (messages.Count > 200 && !hasForceArgument) { await messagesService.SendResponse(x => x.NumberOfMessagesIsHuge(messages.Count), contexts); return; } if (!messages.Any()) { await messagesService.SendResponse(x => x.UserDidntWriteAnyMessageInThisTime(selectedUser), contexts); return; } var header = $"Messages from user {selectedUser} starting at {timeRange.Start}"; var lines = messages.Select(x => $"{x.SentAt:yyyy-MM-dd HH:mm:ss} {x.Author.Name}: {x.Content.Replace("```", "")}"); var linesBuilder = new StringBuilder().PrintManyLines(lines.ToArray(), contentStyleBox: true); await _directMessagesService.TrySendMessage(contexts.User.Id, header); await _directMessagesService.TrySendMessage(contexts.User.Id, linesBuilder.ToString(), MessageType.BlockFormatted); await messagesService.SendResponse(x => x.SentByDmMessagesOfAskedUser(messages.Count, selectedUser), contexts); }
public async void UnmuteInFuture(Contexts contexts, MuteEvent muteEvent, UserContext userToUnmute) { var timeRange = muteEvent.TimeRange; await Task.Delay(timeRange.End - timeRange.Start); var wasNeededToUnmute = await UnmuteIfNeeded(contexts.Server, userToUnmute); if (wasNeededToUnmute) { var messagesService = _messagesServiceFactory.Create(contexts); await messagesService.SendResponse(x => x.UnmutedUser(userToUnmute), contexts); await _directMessagesService.TrySendMessage(userToUnmute.Id, x => x.UnmutedUserForUser(userToUnmute, contexts.Server), contexts); } }
public async Task UnmuteUserAsync(DiscordRequest request, Contexts contexts) { var requestParser = new MuteRequestParser(request, _usersService, contexts); var userToUnmute = requestParser.GetUser(); var wasMuted = await _muteService.UnmuteIfNeeded(contexts.Server, userToUnmute); if (wasMuted) { var messagesService = _messagesServiceFactory.Create(contexts); await messagesService.SendResponse(x => x.UnmutedUser(userToUnmute), contexts); await _directMessagesService.TrySendMessage(userToUnmute.Id, x => x.UnmutedUserForUser(userToUnmute, contexts.Server), contexts); } }