diff --git a/VkNet.Tests/Categories/UsersCategoryTest.cs b/VkNet.Tests/Categories/UsersCategoryTest.cs index 42237370..f6cc0460 100644 --- a/VkNet.Tests/Categories/UsersCategoryTest.cs +++ b/VkNet.Tests/Categories/UsersCategoryTest.cs @@ -1,4 +1,6 @@ -namespace VkNet.Tests.Categories +using VkNet.Model.RequestParams.Users; + +namespace VkNet.Tests.Categories { using System; using System.Collections.ObjectModel; @@ -356,7 +358,7 @@ { var vk = new VkApi(); int count; - This.Action(() => vk.Users.Search(Query, out count)).Throws(); + This.Action(() => vk.Users.Search(out count, new UserSearchParams { Query = Query })).Throws(); } [Test] @@ -364,16 +366,16 @@ { int count; var vk = new VkApi { AccessToken = "token" }; - This.Action(() => vk.Users.Search("", out count)).Throws() + This.Action(() => vk.Users.Search(out count, new UserSearchParams { Query = "" })).Throws() .Message.ShouldEqual("Query can not be null or empty."); } [Test] public void Search_BadQuery_EmptyList() { - const string url = "https://api.vk.com/method/users.search?q=fa'sosjvsoidf&count=20&access_token=token"; + const string url = "https://api.vk.com/method/users.search?q=fa'sosjvsoidf&sort=0&offset=0&count=20&sex=0&status=0&online=0&has_photo=0&access_token=token"; - const string json = + const string json = @"{ 'response': [ 0 @@ -382,7 +384,7 @@ int count; var users = GetMockedUsersCategory(url, json); - var lst = users.Search("fa'sosjvsoidf", out count).ToList(); + var lst = users.Search(out count, new UserSearchParams { Query = "fa'sosjvsoidf" }).ToList(); Assert.That(count, Is.EqualTo(0)); Assert.That(lst, Is.Not.Null); @@ -392,9 +394,9 @@ [Test] public void Search_EducationField_ListofProfileObjects() { - const string url = "https://api.vk.com/method/users.search?q=Masha Ivanova&fields=education&count=3&offset=123&access_token=token"; + const string url = "https://api.vk.com/method/users.search?q=Masha Ivanova&sort=0&offset=123&count=3&fields=education&sex=0&status=0&online=0&has_photo=0&access_token=token"; - const string json = + const string json = @"{ 'response': [ 26953, @@ -433,7 +435,7 @@ int count; var users = GetMockedUsersCategory(url, json); - var lst = users.Search(Query, out count, ProfileFields.Education, 3, 123).ToList(); + var lst = users.Search(out count, new UserSearchParams { Query = Query, Fields = ProfileFields.Education,Count = 3, Offset = 123}).ToList(); Assert.That(count, Is.EqualTo(26953)); Assert.That(lst.Count, Is.EqualTo(3)); @@ -459,9 +461,8 @@ [Test] public void Search_DefaultFields_ListOfProfileObjects() { - const string url = "https://api.vk.com/method/users.search?q=Masha Ivanova&count=20&access_token=token"; - - const string json = + const string url = "https://api.vk.com/method/users.search?q=Masha Ivanova&sort=0&offset=0&count=20&sex=0&status=0&online=0&has_photo=0&access_token=token"; + const string json = @"{ 'response': [ 26953, @@ -485,7 +486,7 @@ int count; var users = GetMockedUsersCategory(url, json); - var lst = users.Search(Query, out count).ToList(); + var lst = users.Search(out count, new UserSearchParams { Query = Query }).ToList(); Assert.That(count, Is.EqualTo(26953)); Assert.That(lst.Count, Is.EqualTo(3)); diff --git a/VkNet/Categories/UsersCategory.cs b/VkNet/Categories/UsersCategory.cs index cb16ee4f..4637e913 100644 --- a/VkNet/Categories/UsersCategory.cs +++ b/VkNet/Categories/UsersCategory.cs @@ -1,320 +1,352 @@ -namespace VkNet.Categories +using VkNet.Model.RequestParams.Users; + +namespace VkNet.Categories { - using System; - using System.Collections.Generic; - using System.Collections.ObjectModel; - using System.Linq; - using JetBrains.Annotations; + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using System.Linq; + using JetBrains.Annotations; - using Enums.Filters; - using Enums.SafetyEnums; - using Model; - using Utils; + using Enums.Filters; + using Enums.SafetyEnums; + using Model; + using Utils; - /// - /// Методы для работы с информацией о пользователях. - /// - public class UsersCategory - { - private readonly VkApi _vk; + /// + /// Методы для работы с информацией о пользователях. + /// + public class UsersCategory + { + private readonly VkApi _vk; - internal UsersCategory(VkApi vk) - { - _vk = vk; - } + internal UsersCategory(VkApi vk) + { + _vk = vk; + } - /// - /// Возвращает список пользователей в соответствии с заданным критерием поиска. - /// - /// Строка поискового запроса. Например, Вася Бабич. - /// Общее количество пользователей, удовлетворяющих условиям запроса. - /// Список дополнительных полей, которые необходимо вернуть. - /// Количество возвращаемых пользователей. - /// Обратите внимание — даже при использовании параметра offset для получения информации доступны только первые 1000 результатов. - /// - /// Смещение относительно первого найденного пользователя для выборки определенного подмножества. - /// - /// После успешного выполнения возвращает список объектов пользователей, найденных в соответствии с заданными критериями. - /// - /// - /// Страница документации ВКонтакте . - /// - [Pure] - public ReadOnlyCollection Search([NotNull] string query, out int itemsCount, ProfileFields fields = null, int count = 20, int offset = 0) - { - if (string.IsNullOrEmpty(query)) - throw new ArgumentException("Query can not be null or empty."); + /// + /// Возвращает список пользователей в соответствии с заданным критерием поиска. + /// + /// Общее количество пользователей, удовлетворяющих условиям запроса. + /// Параметры запроса. + /// + /// После успешного выполнения возвращает список объектов пользователей, найденных в соответствии с заданными критериями. + /// + /// Query can not be null or empty. + /// + /// Страница документации ВКонтакте . + /// + [Pure] + public ReadOnlyCollection Search(out int itemsCount, UserSearchParams @params) + { + if (string.IsNullOrWhiteSpace(@params.Query)) + { + throw new ArgumentException("Query can not be null or empty."); + } + var parameters = new VkParameters + { + { "q", @params.Query }, + { "sort", @params.Sort }, + { "offset", @params.Offset }, + { "count", @params.Count }, + { "fields", @params.Fields }, + { "city", @params.City }, + { "country", @params.Country }, + { "hometown", @params.Hometown }, + { "university_country", @params.UniversityCountry }, + { "university", @params.University }, + { "university_year", @params.UniversityYear }, + { "university_faculty", @params.UniversityFaculty }, + { "university_chair", @params.UniversityChair }, + { "sex", @params.Sex }, + { "status", @params.Status }, + { "age_from", @params.AgeFrom }, + { "age_to", @params.AgeTo }, + { "birth_day", @params.BirthDay }, + { "birth_month", @params.BirthMonth }, + { "birth_year", @params.BirthYear }, + { "online", @params.Online }, + { "has_photo", @params.HasPhoto }, + { "school_country", @params.SchoolCountry }, + { "school_city", @params.SchoolCity }, + { "school_class", @params.SchoolClass }, + { "school", @params.School }, + { "school_year", @params.SchoolYear }, + { "religion", @params.Religion }, + { "interests", @params.Interests }, + { "company", @params.Company }, + { "position", @params.Position }, + { "group_id", @params.GroupId }, + { "from_list", @params.FromList } - var parameters = new VkParameters { { "q", query }, { "fields", fields }, { "count", count } }; - if (offset > 0) - parameters.Add("offset", offset); + }; + VkResponseArray response = _vk.Call("users.search", parameters); - VkResponseArray response = _vk.Call("users.search", parameters); + itemsCount = response[0]; - itemsCount = response[0]; + return response.Skip(1).ToReadOnlyCollectionOf(r => r); + } - return response.Skip(1).ToReadOnlyCollectionOf(r => r); - } + /// + /// Получает настройки текущего пользователя в данном приложении. . + /// + /// идентификатор пользователя, информацию о настройках которого необходимо получить. + /// После успешного выполнения возвращает битовую маску настроек текущего пользователя в данном приложении. + /// + /// Пример: + /// Если Вы хотите получить права на Доступ к друзьям и Доступ к статусам пользователя, то Ваша битовая маска будет + /// равна: 2 + 1024 = 1026. + /// Если, имея битовую маску 1026, Вы хотите проверить, имеет ли она доступ к друзьям — Вы можете сделать 1026 & 2. + /// + /// + /// Страница документации ВКонтакте . + /// + [Pure] + public int GetUserSettings(long uid) + { + var parameters = new VkParameters { { "uid", uid } }; - /// - /// Получает настройки текущего пользователя в данном приложении. . - /// - /// идентификатор пользователя, информацию о настройках которого необходимо получить. - /// После успешного выполнения возвращает битовую маску настроек текущего пользователя в данном приложении. - /// - /// Пример: - /// Если Вы хотите получить права на Доступ к друзьям и Доступ к статусам пользователя, то Ваша битовая маска будет - /// равна: 2 + 1024 = 1026. - /// Если, имея битовую маску 1026, Вы хотите проверить, имеет ли она доступ к друзьям — Вы можете сделать 1026 & 2. - /// - /// - /// Страница документации ВКонтакте . - /// - [Pure] - public int GetUserSettings(long uid) - { - var parameters = new VkParameters { { "uid", uid } }; + return _vk.Call("getUserSettings", parameters); + } - return _vk.Call("getUserSettings", parameters); - } + /// + /// Возвращает информацию о том, установил ли пользователь приложение. + /// + /// Идентификатор пользователя. + /// После успешного выполнения возвращает true в случае, если пользователь установил у себя данное приложение, + /// иначе false. + /// + /// + /// Страница документации ВКонтакте . + /// + [Pure] + [ApiVersion("5.9")] + public bool IsAppUser(long userId) + { + var parameters = new VkParameters { { "user_id", userId } }; - /// - /// Возвращает информацию о том, установил ли пользователь приложение. - /// - /// Идентификатор пользователя. - /// После успешного выполнения возвращает true в случае, если пользователь установил у себя данное приложение, - /// иначе false. - /// - /// - /// Страница документации ВКонтакте . - /// - [Pure] - [ApiVersion("5.9")] - public bool IsAppUser(long userId) - { - var parameters = new VkParameters { { "user_id", userId } }; + VkResponse response = _vk.Call("users.isAppUser", parameters); - VkResponse response = _vk.Call("users.isAppUser", parameters); - - return 1 == Convert.ToInt32(response.ToString()); - } + return 1 == Convert.ToInt32(response.ToString()); + } - /// - /// Возвращает расширенную информацию о пользователе. - /// - /// Идентификатор пользователя. - /// Поля профиля, которые необходимо возвратить. - /// Падеж для склонения имени и фамилии пользователя - /// Объект, содержащий запрошенную информацию о пользователе. - /// - /// Страница документации ВКонтакте . - /// - [Pure] - [ApiVersion("5.9")] - public User Get(long userId, ProfileFields fields = null, - NameCase nameCase = null) - { - VkErrors.ThrowIfNumberIsNegative(() => userId); + /// + /// Возвращает расширенную информацию о пользователе. + /// + /// Идентификатор пользователя. + /// Поля профиля, которые необходимо возвратить. + /// Падеж для склонения имени и фамилии пользователя + /// Объект, содержащий запрошенную информацию о пользователе. + /// + /// Страница документации ВКонтакте . + /// + [Pure] + [ApiVersion("5.9")] + public User Get(long userId, ProfileFields fields = null, + NameCase nameCase = null) + { + VkErrors.ThrowIfNumberIsNegative(() => userId); - var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase }, { "user_ids", userId } }; + var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase }, { "user_ids", userId } }; - VkResponseArray response = _vk.Call("users.get", parameters, true); + VkResponseArray response = _vk.Call("users.get", parameters, true); - return response[0]; - } + return response[0]; + } - /// - /// Возвращает расширенную информацию о пользователях. Метод не требует авторизацию - /// - /// Идентификаторы пользователей, о которых необходимо получить информацию. - /// Поля профилей, которые необходимо возвратить. - /// Падеж для склонения имени и фамилии пользователя - /// Список объектов с запрошенной информацией о пользователях. - /// - /// Страница документации ВКонтакте . - /// - [Pure] - [ApiVersion("5.21")] - public ReadOnlyCollection Get([NotNull] IEnumerable userIds, ProfileFields fields = null, NameCase nameCase = null) - { - if (userIds == null) - throw new ArgumentNullException("userIds"); + /// + /// Возвращает расширенную информацию о пользователях. Метод не требует авторизацию + /// + /// Идентификаторы пользователей, о которых необходимо получить информацию. + /// Поля профилей, которые необходимо возвратить. + /// Падеж для склонения имени и фамилии пользователя + /// Список объектов с запрошенной информацией о пользователях. + /// + /// Страница документации ВКонтакте . + /// + [Pure] + [ApiVersion("5.21")] + public ReadOnlyCollection Get([NotNull] IEnumerable userIds, ProfileFields fields = null, NameCase nameCase = null) + { + if (userIds == null) + throw new ArgumentNullException("userIds"); - var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase } }; - parameters.Add("user_ids", userIds); + var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase } }; + parameters.Add("user_ids", userIds); - VkResponseArray response = _vk.Call("users.get", parameters); + VkResponseArray response = _vk.Call("users.get", parameters); - return response.ToReadOnlyCollectionOf(x => x); - } + return response.ToReadOnlyCollectionOf(x => x); + } - /// - /// Возвращает расширенную информацию о пользователях. - /// - /// Короткие имена пользователей, о которых необходимо получить информацию. - /// Поля профилей, которые необходимо возвратить. - /// Падеж для склонения имени и фамилии пользователя - /// Список объектов с запрошенной информацией о пользователях. - /// - /// Страница документации ВКонтакте . - /// - [Pure, NotNull, ContractAnnotation("screenNames:null => halt")] - [ApiVersion("5.9")] - public ReadOnlyCollection Get([NotNull] IEnumerable screenNames, ProfileFields fields = null, NameCase nameCase = null) - { - if (screenNames == null) - throw new ArgumentNullException("screenNames"); + /// + /// Возвращает расширенную информацию о пользователях. + /// + /// Короткие имена пользователей, о которых необходимо получить информацию. + /// Поля профилей, которые необходимо возвратить. + /// Падеж для склонения имени и фамилии пользователя + /// Список объектов с запрошенной информацией о пользователях. + /// + /// Страница документации ВКонтакте . + /// + [Pure, NotNull, ContractAnnotation("screenNames:null => halt")] + [ApiVersion("5.9")] + public ReadOnlyCollection Get([NotNull] IEnumerable screenNames, ProfileFields fields = null, NameCase nameCase = null) + { + if (screenNames == null) + throw new ArgumentNullException("screenNames"); - var parameters = new VkParameters - { - { "user_ids", screenNames }, - { "fields", fields }, - { "name_case", nameCase } - }; + var parameters = new VkParameters + { + { "user_ids", screenNames }, + { "fields", fields }, + { "name_case", nameCase } + }; - VkResponseArray response = _vk.Call("users.get", parameters); - return response.ToReadOnlyCollectionOf(x => x); - } + VkResponseArray response = _vk.Call("users.get", parameters); + return response.ToReadOnlyCollectionOf(x => x); + } #if false - // todo start shit - [Pure, NotNull, ContractAnnotation("screenNames:null => halt")] - [ApiVersion("5.9")] - public async Task> GetAsync([NotNull] IEnumerable screenNames, ProfileFields fields = null, NameCase nameCase = null) - { - if (screenNames == null) - throw new ArgumentNullException("screenNames"); + // todo start shit + [Pure, NotNull, ContractAnnotation("screenNames:null => halt")] + [ApiVersion("5.9")] + public async Task> GetAsync([NotNull] IEnumerable screenNames, ProfileFields fields = null, NameCase nameCase = null) + { + if (screenNames == null) + throw new ArgumentNullException("screenNames"); - var parameters = new VkParameters - { - { "user_ids", screenNames }, - { "fields", fields }, - { "name_case", nameCase } - }; + var parameters = new VkParameters + { + { "user_ids", screenNames }, + { "fields", fields }, + { "name_case", nameCase } + }; - VkResponseArray response = await _vk.CallAsync("users.get", parameters); - return response.ToReadOnlyCollectionOf(x => x); - } + VkResponseArray response = await _vk.CallAsync("users.get", parameters); + return response.ToReadOnlyCollectionOf(x => x); + } #endif - // todo end shit + // todo end shit - /// - /// Возвращает расширенную информацию о пользователе. - /// - /// Короткое имя пользователя - /// Поля профилей, которые необходимо возвратить. - /// Падеж для склонения имени и фамилии пользователя - /// Объект с запрошенной информацией о пользователе. - /// - /// Страница документации ВКонтакте . - /// - [Pure, CanBeNull, ContractAnnotation("screenName:null => halt")] - public User Get([NotNull] string screenName, ProfileFields fields = null, NameCase nameCase = null) - { - VkErrors.ThrowIfNullOrEmpty(() => screenName); + /// + /// Возвращает расширенную информацию о пользователе. + /// + /// Короткое имя пользователя + /// Поля профилей, которые необходимо возвратить. + /// Падеж для склонения имени и фамилии пользователя + /// Объект с запрошенной информацией о пользователе. + /// + /// Страница документации ВКонтакте . + /// + [Pure, CanBeNull, ContractAnnotation("screenName:null => halt")] + public User Get([NotNull] string screenName, ProfileFields fields = null, NameCase nameCase = null) + { + VkErrors.ThrowIfNullOrEmpty(() => screenName); - ReadOnlyCollection users = Get(new[] {screenName}, fields, nameCase); - return users.Count > 0 ? users[0] : null; - } + ReadOnlyCollection users = Get(new[] {screenName}, fields, nameCase); + return users.Count > 0 ? users[0] : null; + } - - // todo add tests for subscriptions for users - /// - /// Возвращает список идентификаторов пользователей и групп, которые входят в список подписок пользователя. - /// - /// Идентификатор пользователя, подписки которого необходимо получить - /// Количество подписок, которые необходимо вернуть - /// Смещение необходимое для выборки определенного подмножества подписок - /// Пока возвращается только список групп. - /// - /// Страница документации ВКонтакте . - /// - [Pure] - [ApiVersion("5.9")] - public ReadOnlyCollection GetSubscriptions(long? userId = null, int? count = null, int? offset = null) - { - VkErrors.ThrowIfNumberIsNegative(() => userId); - VkErrors.ThrowIfNumberIsNegative(() => count); - VkErrors.ThrowIfNumberIsNegative(() => offset); + + // todo add tests for subscriptions for users + /// + /// Возвращает список идентификаторов пользователей и групп, которые входят в список подписок пользователя. + /// + /// Идентификатор пользователя, подписки которого необходимо получить + /// Количество подписок, которые необходимо вернуть + /// Смещение необходимое для выборки определенного подмножества подписок + /// Пока возвращается только список групп. + /// + /// Страница документации ВКонтакте . + /// + [Pure] + [ApiVersion("5.9")] + public ReadOnlyCollection GetSubscriptions(long? userId = null, int? count = null, int? offset = null) + { + VkErrors.ThrowIfNumberIsNegative(() => userId); + VkErrors.ThrowIfNumberIsNegative(() => count); + VkErrors.ThrowIfNumberIsNegative(() => offset); - var parameters = new VkParameters - { - {"user_id", userId}, - {"extended", true}, - {"offset", offset}, - {"count", count} - }; + var parameters = new VkParameters + { + {"user_id", userId}, + {"extended", true}, + {"offset", offset}, + {"count", count} + }; - VkResponseArray response = _vk.Call("users.getSubscriptions", parameters); - - return response.ToReadOnlyCollectionOf(x => x); - } + VkResponseArray response = _vk.Call("users.getSubscriptions", parameters); + + return response.ToReadOnlyCollectionOf(x => x); + } - /// - /// Возвращает список идентификаторов пользователей, которые являются подписчиками пользователя. - /// - /// Идентификатор пользователя - /// Количество подписчиков, информацию о которых нужно получить - /// Смещение, необходимое для выборки определенного подмножества подписчиков - /// Список дополнительных полей, которые необходимо вернуть - /// Падеж для склонения имени и фамилии пользователя - /// Список подписчиков - /// - /// Страница документации ВКонтакте . - /// - [Pure] - [ApiVersion("5.9")] - public ReadOnlyCollection GetFollowers(long? userId = null, int? count = null, int? offset = null, ProfileFields fields = null, NameCase nameCase = null) - { - VkErrors.ThrowIfNumberIsNegative(() => userId); - VkErrors.ThrowIfNumberIsNegative(() => count); - VkErrors.ThrowIfNumberIsNegative(() => offset); + /// + /// Возвращает список идентификаторов пользователей, которые являются подписчиками пользователя. + /// + /// Идентификатор пользователя + /// Количество подписчиков, информацию о которых нужно получить + /// Смещение, необходимое для выборки определенного подмножества подписчиков + /// Список дополнительных полей, которые необходимо вернуть + /// Падеж для склонения имени и фамилии пользователя + /// Список подписчиков + /// + /// Страница документации ВКонтакте . + /// + [Pure] + [ApiVersion("5.9")] + public ReadOnlyCollection GetFollowers(long? userId = null, int? count = null, int? offset = null, ProfileFields fields = null, NameCase nameCase = null) + { + VkErrors.ThrowIfNumberIsNegative(() => userId); + VkErrors.ThrowIfNumberIsNegative(() => count); + VkErrors.ThrowIfNumberIsNegative(() => offset); - var parameters = new VkParameters - { - {"user_id", userId}, - {"offset", offset}, - {"count", count}, - {"fields", fields}, - {"name_case", nameCase} - }; + var parameters = new VkParameters + { + {"user_id", userId}, + {"offset", offset}, + {"count", count}, + {"fields", fields}, + {"name_case", nameCase} + }; - VkResponseArray response = _vk.Call("users.getFollowers", parameters); + VkResponseArray response = _vk.Call("users.getFollowers", parameters); - // проверка: возвращается массив объектов или только идентификаторы пользователей - if (response.Count > 0 && response[0].ContainsKey("id")) - { - return response.ToReadOnlyCollectionOf(x => x); - } + // проверка: возвращается массив объектов или только идентификаторы пользователей + if (response.Count > 0 && response[0].ContainsKey("id")) + { + return response.ToReadOnlyCollectionOf(x => x); + } - return response.ToReadOnlyCollectionOf(x => new User{Id = x}); - } + return response.ToReadOnlyCollectionOf(x => new User{Id = x}); + } - /// - /// Позволяет пожаловаться на пользователя. - /// - /// Идентификатор пользователя, на которого осуществляется жалоба - /// Тип жалобы - /// Комментарий к жалобе на пользователя - /// В случае успешной жалобы метод вернет true. - /// - /// Страница документации ВКонтакте . - /// - [ApiVersion("5.9")] - public bool Report(long userId, ReportType type, string comment = "") - { - VkErrors.ThrowIfNumberIsNegative(() => userId); + /// + /// Позволяет пожаловаться на пользователя. + /// + /// Идентификатор пользователя, на которого осуществляется жалоба + /// Тип жалобы + /// Комментарий к жалобе на пользователя + /// В случае успешной жалобы метод вернет true. + /// + /// Страница документации ВКонтакте . + /// + [ApiVersion("5.9")] + public bool Report(long userId, ReportType type, string comment = "") + { + VkErrors.ThrowIfNumberIsNegative(() => userId); - var parameters = new VkParameters - { - {"user_id", userId}, - {"type", type}, - {"comment", comment} - }; + var parameters = new VkParameters + { + {"user_id", userId}, + {"type", type}, + {"comment", comment} + }; - return _vk.Call("users.report", parameters); - } - } + return _vk.Call("users.report", parameters); + } + } } diff --git a/VkNet/Enums/MaritalStatus.cs b/VkNet/Enums/MaritalStatus.cs new file mode 100644 index 00000000..c0c6b690 --- /dev/null +++ b/VkNet/Enums/MaritalStatus.cs @@ -0,0 +1,37 @@ +namespace VkNet.Enums +{ + /// + /// Семейное положение: 1 — Не женат, 2 — Встречается, 3 — Помолвлен, 4 — Женат, 7 — Влюблён, 5 — Всё сложно, 6 — В активном поиске. положительное число. + /// + public enum MaritalStatus + { + /// + /// Не женат + /// + Single = 1, + /// + /// Встречается + /// + Meets, + /// + /// Помолвлен + /// + Engaged, + /// + /// Женат + /// + Married, + /// + /// Всё сложно + /// + ItsComplicated, + /// + /// В активном поиске + /// + TheActiveSearch, + /// + /// Влюблён + /// + InLove + } +} \ No newline at end of file diff --git a/VkNet/Enums/SafetyEnums/UserSection.cs b/VkNet/Enums/SafetyEnums/UserSection.cs new file mode 100644 index 00000000..a47c78fd --- /dev/null +++ b/VkNet/Enums/SafetyEnums/UserSection.cs @@ -0,0 +1,18 @@ +namespace VkNet.Enums.SafetyEnums +{ + /// + /// Разделы среди которых нужно осуществить поиск, перечисленные через запятую: friends – искать среди друзей subscriptions – искать среди друзей и подписок пользователя список строк, разделенных через запятую. + /// + public sealed class UserSection : SafetyEnum + { + /// + /// Искать среди друзей. + /// + public static readonly UserSection Friends = RegisterPossibleValue("friends"); + + /// + /// Искать среди друзей и подписок пользователя список строк, разделенных через запятую. + /// + public static readonly UserSection Subscriptions = RegisterPossibleValue("subscriptions"); + } +} \ No newline at end of file diff --git a/VkNet/Enums/UserSort.cs b/VkNet/Enums/UserSort.cs new file mode 100644 index 00000000..ac6c06bc --- /dev/null +++ b/VkNet/Enums/UserSort.cs @@ -0,0 +1,17 @@ +namespace VkNet.Enums +{ + /// + /// Сортировка результатов: 1 - по дате регистрации, 0 - по популярности целое число. + /// + public enum UserSort + { + /// + /// По популярности + /// + ByPopularity = 0, + /// + /// По дате регистрации + /// + ByRegDate + } +} \ No newline at end of file diff --git a/VkNet/Model/RequestParams/Users/UserSearchParams.cs b/VkNet/Model/RequestParams/Users/UserSearchParams.cs new file mode 100644 index 00000000..43fa1d89 --- /dev/null +++ b/VkNet/Model/RequestParams/Users/UserSearchParams.cs @@ -0,0 +1,222 @@ +using VkNet.Enums; +using VkNet.Enums.Filters; +using VkNet.Enums.SafetyEnums; + +namespace VkNet.Model.RequestParams.Users +{ + /// + /// Параметры метода users.search + /// + public class UserSearchParams + { + /// + /// Параметры метода users.search. + /// + public UserSearchParams() + { + Sort = UserSort.ByPopularity; + Offset = 0; + Count = 20; + Sex = Sex.Unknown; + } + + /// + /// Строка поискового запроса. Например, Вася Бабич. строка. + /// + public string Query + { get; set; } + + /// + /// Сортировка результатов. + /// + public UserSort Sort + { get; set; } + + /// + /// Смещение относительно первого найденного пользователя для выборки определенного подмножества. положительное число. + /// + public uint Offset + { get; set; } + + /// + /// Количество возвращаемых пользователей. Обратите внимание — даже при использовании параметра offset для получения информации доступны только первые 1000 результатов. положительное число, по умолчанию 20, максимальное значение 1000. + /// + public uint Count + { get; set; } + + /// + /// Список дополнительных полей, которые необходимо вернуть. список строк, разделенных через запятую. + /// + public ProfileFields Fields + { get; set; } + + /// + /// Идентификатор города. положительное число. + /// + public int? City + { get; set; } + + /// + /// Идентификатор страны. положительное число. + /// + public int? Country + { get; set; } + + /// + /// Название города строкой. строка. + /// + public string Hometown + { get; set; } + + /// + /// Идентификатор страны, в которой пользователи закончили ВУЗ. положительное число. + /// + public int? UniversityCountry + { get; set; } + + /// + /// Идентификатор ВУЗа. положительное число. + /// + public int? University + { get; set; } + + /// + /// Год окончания ВУЗа. положительное число. + /// + public uint? UniversityYear + { get; set; } + + /// + /// Идентификатор факультета. положительное число. + /// + public int? UniversityFaculty + { get; set; } + + /// + /// Идентификатор кафедры. положительное число. + /// + public int? UniversityChair + { get; set; } + + /// + /// Пол. + /// + public Sex Sex + { get; set; } + + /// + /// Семейное положение. + /// + public MaritalStatus Status + { get; set; } + + /// + /// Начиная с какого возраста. положительное число. + /// + public ushort? AgeFrom + { get; set; } + + /// + /// До какого возраста. положительное число. + /// + public ushort? AgeTo + { get; set; } + + /// + /// День рождения. положительное число. + /// + public ushort? BirthDay + { get; set; } + + /// + /// Месяц рождения. положительное число. + /// + public ushort? BirthMonth + { get; set; } + + /// + /// Год рождения. положительное число. + /// + public uint? BirthYear + { get; set; } + + /// + /// 1 — только в сети, 0 — все пользователи. флаг. + /// + public bool Online + { get; set; } + + /// + /// 1 — только с фотографией, 0 — все пользователи. флаг. + /// + public bool HasPhoto + { get; set; } + + /// + /// Идентификатор страны, в которой пользователи закончили школу. положительное число. + /// + public int? SchoolCountry + { get; set; } + + /// + /// Идентификатор города, в котором пользователи закончили школу. положительное число. + /// + public int? SchoolCity + { get; set; } + + /// + /// Класс в школе. положительное число. + /// + public int? SchoolClass + { get; set; } + + /// + /// Идентификатор школы, которую закончили пользователи. положительное число. + /// + public int? School + { get; set; } + + /// + /// Год окончания школы. положительное число. + /// + public uint? SchoolYear + { get; set; } + + /// + /// Религиозные взгляды. строка. + /// + public string Religion + { get; set; } + + /// + /// Интересы. строка. + /// + public string Interests + { get; set; } + + /// + /// Название компании, в которой работают пользователи. строка. + /// + public string Company + { get; set; } + + /// + /// Название должности. строка. + /// + public string Position + { get; set; } + + /// + /// Идентификатор группы, среди пользователей которой необходимо проводить поиск. положительное число. + /// + public ulong? GroupId + { get; set; } + + /// + /// Разделы среди которых нужно осуществить поиск. список строк, разделенных через запятую. + /// + public UserSection FromList + { get; set; } + + } +} diff --git a/VkNet/VkNet.csproj b/VkNet/VkNet.csproj index 8f3b9994..1a9ff2e4 100644 --- a/VkNet/VkNet.csproj +++ b/VkNet/VkNet.csproj @@ -65,6 +65,7 @@ + @@ -104,10 +105,12 @@ + + @@ -183,6 +186,7 @@ +