public async Task <IReadOnlyList <string> > CreateChallengeRequests(CreateChallengeRequestModel model) { var filterUsersViewModel = new FilterUsersViewModel(model.ChallengeOwnerId, model.Points, model.Range, model.IsBotActivated); var userIds = await GetChallengerIds( new GetChallengerIdsModel( model.AccessToken, filterUsersViewModel, AppSettingsProvider.LoyaltyBaseUrl, AppSettingsProvider.FilterUsersUrl)); //var filteredUserId = ExcludeOutOfRangeUsers(model.Range, model.ChallengeOwnerId, userIds); //filteredUserId = ApplyGenderFilter(model.Gender, model.ChallengeOwnerId, filteredUserId); foreach (var userId in userIds) { var challengeRequestParams = new ChallengeRequestParams(Status.Active, model.ChallengeOwnerId, userId, model.ChallengeId, Enums.ChallengeRequestStatus.Waiting); CreateOrUpdate(challengeRequestParams); await _hubContext.Clients.User(userId) .SendAsync("ChallengeRequestReceived", JsonConvert.SerializeObject(GetChallengeRequest(challengeRequestParams.Id))); } if (model.IsBotActivated) { var acceptingUserId = userIds.FirstOrDefault(); var botUser = _userService.GetUserByUserId(acceptingUserId); var challengeRequest = Entities.FirstOrDefault(x => x.ChallengeId == model.ChallengeId && x.ChallengerId == acceptingUserId && x.ChallengeOwnerId == model.ChallengeOwnerId); await BotActivationAsync(model, challengeRequest.Id, botUser.Nickname); } return(userIds); }
private async Task BotActivationAsync(CreateChallengeRequestModel model, int challengeRequestId, string nickname) { Random random = new Random(); var delay = random.Next(3, 10); await Task.Delay(TimeSpan.FromSeconds(delay)); var credentials = await _userService.Login(new LoginModel() { Username = nickname, Password = "******" }); await _botService.SendUpdateChallengeRequest(credentials.AccessToken, challengeRequestId, new UpdateChallengeInputViewModel() { ChallengeRequestAnswer = ChallengeRequestStatus.Accepted }); }