public IActionResult LeaveGroup(int id) { var user = _userManager.GetUserAsync(User).Result; var oldModerator = user.Id; var activeGroup = _groupHandler.GetById(id); var users = _usersInGroupHandler.GetUsersByGroup(id); _usersInGroupHandler.DeleteUserIntoGroup(id, user.Id); _hubContext.Clients.Group(activeGroup.GroupName).SendAsync("NotifyGroup", $"{user.UserName} left the group"); if (_usersInGroupHandler.GetUsersByGroup(id).Count < 1) { _groupHandler.Delete(activeGroup); } else { if (user.Id == activeGroup.ModeratorId) { var nextUser = _usersInGroupHandler.GetUsersByGroup(id).FirstOrDefault(l => l.UserId != oldModerator); _groupHandler.ChangeModeratorInGroup(id, nextUser.UserId); _hubContext.Clients.User(_userManager.FindByIdAsync(nextUser.UserId).Result.UserName).SendAsync("ReceiveMessageNotify", user.UserName, "You have become a moderator of the group: " + activeGroup.GroupName); } } return(RedirectToAction(nameof(ChatUsers))); }