using System; using System.Collections.ObjectModel; using System.Diagnostics; using Newtonsoft.Json; using VkNet.Enums; using VkNet.Enums.StringEnums; using VkNet.Utils.JsonConverter; // ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable MemberCanBePrivate.Global namespace VkNet.Model; /// /// Информация о пользователе. /// См. описание https://vk.ru/dev/objects/user /// [DebuggerDisplay("[{Id}] {FirstName} {LastName}")] [Serializable] [JsonConverter(typeof(UserJsonConverter))] public class User { #region Базовые поля /// /// Идентификатор пользователя. /// [JsonProperty("id")] public long Id { get; set; } /// /// Имя пользователя. /// [JsonProperty("first_name")] public string FirstName { get; set; } [JsonProperty("name")] private string Name { get => FirstName; set => FirstName = value; } /// /// Фамилия пользователя. /// [JsonProperty("last_name")] public string LastName { get; set; } /// /// Возвращается при вызове без access_token, если пользователь установил настройку /// «Кому в интернете видна моя /// страница» — «Только пользователям ВКонтакте». /// Обратите внимание, в этом случае дополнительные поля fields не возвращаются. /// [JsonProperty("hidden")] public bool Hidden { get; set; } /// /// Скрыт ли профиль пользователя настройками приватности. /// /// /// Начиная с версии 5.89 обязательное поле /// [JsonProperty("is_closed")] public bool? IsClosed { get; set; } /// /// Может ли текущий пользователь видеть профиль при is_closed = 1 (например, если он есть в друзьях). /// /// /// Начиная с версии 5.89 обязательное поле /// [JsonProperty("can_access_closed")] public bool? CanAccessClosed { get; set; } #endregion #region Опциональные поля /// /// Причина блокирования аккаунта /// [JsonProperty("deactivated", DefaultValueHandling = DefaultValueHandling.Populate)] public Deactivated? Deactivated { get; set; } /// /// Информация пользователя о себе. /// [JsonProperty("about")] public string About { get; set; } /// /// Информация пользователя о себе. /// [JsonProperty("twitter")] public string Twitter { get; set; } /// /// Чем занимается пользователь. /// [JsonProperty("activities")] public string Activities { get; set; } /// /// Дата рождения пользователя. Возвращается в формате DD.MM.YYYY или DD.MM (если /// год рождения скрыт). /// Если дата рождения скрыта целиком, поле отсутствует в ответе. /// [JsonProperty("bdate")] public string BirthDate { get; set; } /// /// Возвращается 1, если текущий пользователь находится в черном списке у /// запрашиваемого пользователя. /// [JsonProperty("blacklisted")] public bool Blacklisted { get; set; } /// /// Возвращается 1, если запрашиваемый пользователь находится в черном списке у /// текущего пользователя. /// [JsonProperty("blacklisted_by_me")] public bool BlacklistedByMe { get; set; } /// /// Любимые книги пользователя. /// [JsonProperty("books")] public string Books { get; set; } /// /// Признак разрешено ли оставлять записи на стене у пользователя. /// [JsonProperty("can_post")] public bool CanPost { get; set; } /// /// Признак разрешено ли видеть чужие записи на стене пользователя. /// [JsonProperty("can_see_all_posts")] public bool CanSeeAllPosts { get; set; } /// /// Признак разрешено ли видеть чужие аудиозаписи на стене пользователя. /// [JsonProperty("can_see_audio")] public bool CanSeeAudio { get; set; } /// /// Информация о том, будет ли отправлено уведомление пользователю о заявке в /// друзья. /// [JsonProperty("can_send_friend_request")] public bool CanSendFriendRequest { get; set; } /// /// Признак разрешено ли написание личных сообщений данному пользователю. /// [JsonProperty("can_write_private_message")] public bool CanWritePrivateMessage { get; set; } /// /// Информация о карьере пользователя. /// [JsonProperty("career")] public ReadOnlyCollection Career { get; set; } /// /// Идентификатор города, указанного на странице пользователя в разделе «Контакты». /// Если город не указан, или основная информация страницы скрыта настройками /// приватности, то 0. /// [JsonProperty("city")] public City City { get; set; } /// /// Общее количество друзей с текущим пользователем. /// [JsonProperty("common_count")] public int? CommonCount { get; set; } /// /// Данные о подключенных сервисах пользователя, таких как: skype, facebook, /// twitter, instagram. /// [JsonProperty("connections")] public Connections Connections { get; set; } /// /// Информация о телефонных номерах пользователя. /// [JsonProperty("contacts")] public Contacts Contacts { get; set; } /// /// Различные счетчики пользователя. /// [JsonProperty("counters")] public Counters Counters { get; set; } /// /// Идентификатор страны, указанной на странице пользователя в разделе «Контакты». /// Если страна не указана или основная информация страницы скрыта настройками /// приватности, то 0. /// [JsonProperty("country")] public Country Country { get; set; } /// /// Возвращает данные о точках, по которым вырезаны профильная и миниатюрная /// фотографии пользователя. /// [JsonProperty("crop_photo")] public CropPhoto CropPhoto { get; set; } /// /// Короткий адрес страницы пользователя. Возвращается строка, содержащая короткий /// адрес страницы (возвращается только /// сам поддомен, например, andrew). Если он не назначен, то "id"+uid, например, /// id35828305. /// [JsonProperty("domain")] public string Domain { get; set; } /// /// Сведения об образовании пользователя. /// [JsonProperty("education")] public Education Education { get; set; } /// /// Внешние сервисы, в которые настроен экспорт из ВК. /// [JsonProperty("exports")] public Exports Exports { get; set; } /// /// Имя в именительном падеже /// [JsonProperty("first_name_nom")] public string FirstNameNom { get; set; } /// /// Имя в родительном падеже /// [JsonProperty("first_name_gen")] public string FirstNameGen { get; set; } /// /// Имя в дательном падеже /// [JsonProperty("first_name_dat")] public string FirstNameDat { get; set; } /// /// Имя в винительном падеже /// [JsonProperty("first_name_acc")] public string FirstNameAcc { get; set; } /// /// Имя в творительном падеже /// [JsonProperty("first_name_ins")] public string FirstNameIns { get; set; } /// /// Имя в предложном падеже /// [JsonProperty("first_name_abl")] public string FirstNameAbl { get; set; } /// /// Количество подписчиков пользователя. /// [JsonProperty("followers_count")] public long? FollowersCount { get; set; } /// /// Состояние дружбы с пользователями. /// [JsonProperty("friend_status")] public FriendStatus? FriendStatus { get; set; } /// /// Любимые игры пользователя. /// [JsonProperty("games")] public string Games { get; set; } /// /// Информация о том, известен ли номер мобильного телефона пользователя (true - /// известен, false - не известен). /// [JsonProperty("has_mobile")] public bool? HasMobile { get; set; } /// /// Возвращается 1, если текущий пользователь установил фотографию для профиля. /// [JsonProperty("has_photo")] public bool? HasPhoto { get; set; } /// /// Родной город пользователя. /// [JsonProperty("home_town")] public string HomeTown { get; set; } /// /// Интересы пользователя. /// [JsonProperty("interests")] public string Interests { get; set; } /// /// Возвращается 1, если пользователь находится в закладках у текущего /// пользователя. /// [JsonProperty("is_favorite")] public bool IsFavorite { get; set; } /// /// 1 – пользователь друг, 2 – пользователь не в друзьях. /// [JsonProperty("is_friend")] public bool? IsFriend { get; set; } /// /// Возвращается 1, если пользователь скрыт в новостях у текущего пользователя. /// [JsonProperty("is_hidden_from_feed")] public bool IsHiddenFromFeed { get; set; } /// /// Фамилия в именительном падеже /// [JsonProperty("last_name_nom")] public string LastNameNom { get; set; } /// /// Фамилия в родительном падеже /// [JsonProperty("last_name_gen")] public string LastNameGen { get; set; } /// /// Фамилия в дательном падеже /// [JsonProperty("last_name_dat")] public string LastNameDat { get; set; } /// /// Фамилия в винительном падеже /// [JsonProperty("last_name_acc")] public string LastNameAcc { get; set; } /// /// Фамилия в творительном падеже /// [JsonProperty("last_name_ins")] public string LastNameIns { get; set; } /// /// Фамилия в предложном падеже /// [JsonProperty("last_name_abl")] public string LastNameAbl { get; set; } /// /// Время последнего посещения сайта. /// [JsonProperty("last_seen")] public LastSeen LastSeen { get; set; } /// /// Идентификаторы списков друзей, в которых состоит пользователь. Поле доступно /// только для метода /// FriendsCategory.Get. Получить информацию об идентификаторах и названиях списков /// друзей можно с /// помощью метода FriendsCategory.GetLists. Если пользователь не состоит ни в /// одном списке друзей, данное /// поле принимает значение null. /// /// /// поле lists /// [JsonProperty("lists")] public ReadOnlyCollection FriendLists { get; set; } /// /// Девичья фамилия (только для женского пола) /// [JsonProperty("maiden_name")] public string MaidenName { get; set; } /// /// Информация о военной службе пользователя. /// [JsonProperty("military")] public Military[] Military { get; set; } /// /// Любимые фильмы пользователя. /// [JsonProperty("movies")] public string Movies { get; set; } /// /// Любимая музыка пользователя. /// [JsonProperty("music")] public string Music { get; set; } /// /// Прозвище (ник) пользователя. /// [JsonProperty("nickname")] public string Nickname { get; set; } /// /// Информация о текущем роде занятия пользователя. /// [JsonProperty("occupation")] public Occupation Occupation { get; set; } /// /// Признак находится ли пользователь сейчас на сайте. /// [JsonProperty("online")] public bool? Online { get; set; } /// /// Жизненная позиция. /// /// /// поле personal /// [JsonProperty("personal")] public StandInLife StandInLife { get; set; } /// /// url квадратной фотографии пользователя, имеющей ширину 50 пикселей. В случае /// отсутствия у пользователя фотографии /// возвращается http://vk.ru/images/camera_c.gif /// [JsonProperty("photo_50")] public Uri Photo50 { get; set; } /// /// url квадратной фотографии пользователя, имеющей ширину 100 пикселей. В случае /// отсутствия у пользователя фотографии /// возвращается http://vk.ru/images/camera_b.gif. /// [JsonProperty("photo_100")] public Uri Photo100 { get; set; } /// /// url фотографии пользователя, имеющей ширину 200 пикселей. В случае отсутствия у /// пользователя фотографии /// возвращается http://vk.ru/images/camera_a.gif. /// [JsonProperty("photo_200_orig")] public Uri Photo200Orig { get; set; } /// /// url квадратной фотографии пользователя, имеющей ширину 200 пикселей. Если /// фотография была загружена давно, /// изображения с такими размерами может не быть, в этом случае ответ не будет /// содержать этого поля. /// [JsonProperty("photo_200")] public Uri Photo200 { get; set; } /// /// url фотографии пользователя, имеющей ширину 400 пикселей. /// Если у пользователя отсутствует фотография такого размера, ответ не будет /// содержать этого поля. /// [JsonProperty("photo_400_orig")] public Uri Photo400Orig { get; set; } /// /// id главной фотографии профиля пользователя в формате user_id+photo_id, /// например, 6492_192164258. /// В некоторых случаях (если фотография была установлена очень давно) это поле не /// возвращается. /// [JsonProperty("photo_id")] public string PhotoId { get; set; } /// /// url квадратной фотографии пользователя с максимальной шириной. /// Может быть возвращена фотография, имеющая ширину как 200, так и 100 пикселей. /// В случае отсутствия у пользователя фотографии возвращается /// http://vk.ru/images/camera_b.gif. /// [JsonProperty("photo_max")] public Uri PhotoMax { get; set; } /// /// url фотографии пользователя максимального размера. /// Может быть возвращена фотография, имеющая ширину как 400, так и 200 пикселей. /// В случае отсутствия у пользователя фотографии возвращается /// http://vk.ru/images/camera_a.gif. /// [JsonProperty("photo_max_orig")] public Uri PhotoMaxOrig { get; set; } /// /// Избранные пользователем цитаты. /// [JsonProperty("quotes")] public string Quotes { get; set; } /// /// Родственники пользователя. /// [JsonProperty("relatives")] public ReadOnlyCollection Relatives { get; set; } /// /// Семейное положение. /// [JsonProperty("relation")] public RelationType? Relation { get; set; } /// /// Школы, в которых учился пользователь. /// [JsonProperty("schools")] public ReadOnlyCollection Schools { get; set; } /// /// Короткое имя (поддомен) страницы пользователя. /// [JsonProperty("screen_name")] public string ScreenName { get; set; } /// /// Пол пользователя. /// [JsonProperty("sex")] public Sex? Sex { get; set; } /// /// Возвращает указанный в профиле сайт пользователя. /// [JsonProperty("site")] public string Site { get; set; } /// /// Строка со статусом пользователя. /// [JsonProperty("status")] public string Status { get; set; } /// /// Объект аудиозаписи, установленной в статус (если аудиозапись транслируется в текущей момент). /// [JsonProperty("status_audio")] public Audio StatusAudio { get; set; } /// /// Часовой пояс пользователя. /// [JsonProperty("timezone")] public int? Timezone { get; set; } /// /// Возвращается 1, если запрашиваемый пользователь находится в черном списке у /// текущего пользователя. /// [JsonProperty("trending")] public bool Trending { get; set; } /// /// Любимые телешоу пользователя. /// [JsonProperty("tv")] public string Tv { get; set; } /// /// Список высших учебных заведений, в которых учился пользователь. /// [JsonProperty("universities")] public ReadOnlyCollection Universities { get; set; } /// /// Возвращается 1, если страница пользователя верифицирована, 0 — если не /// верифицирована. /// [JsonProperty("verified")] public bool? Verified { get; set; } /// /// Доступно ли комментирование стены (1 — доступно, 0 — недоступно). /// [JsonProperty("wall_default")] public bool WallComments { get; set; } #endregion #region Поля, установленные экспериментально /// /// Информация о ссылках на предпросмотр фотографий пользователя. /// [JsonProperty("photo_previews")] public Previews PhotoPreviews { get; set; } /// /// Номер мобильного телефона (если нет записи или скрыт, то null). /// [JsonProperty("mobile_phone")] public string MobilePhone { get; set; } /// /// Номер домашнего телефона (если нет записи или скрыт, то null). /// [JsonProperty("home_phone")] public string HomePhone { get; set; } /// /// Информация о блокировке пользователя /// [JsonProperty("ban_info")] public BanInfo BanInfo { get; set; } /// /// Является ли пользователь заблокированным /// [JsonProperty("is_deactivated")] public bool IsDeactivated { get; set; } /// /// Идентификатор языка, установленный в настройках. /// [JsonProperty("language")] public long? Language { get; set; } /// /// Признак использует ли пользователь мобильное приложение либо мобильную версию /// сайта. /// [JsonProperty("online_mobile")] public bool? OnlineMobile { get; set; } /// /// Если пользователь зашёл через приложение, то Id приложения иначе null. /// [JsonProperty("online_app")] public long? OnlineApp { get; set; } /// /// Партнер в семейных отношениях. /// [JsonProperty("relation_partner")] public User RelationPartner { get; set; } /// /// Идентификатор пользователя, пригласившего пользователя в беседу (для /// GetChatUsers). /// [JsonProperty("invited_by")] public long? InvitedBy { get; set; } /// /// Видимость даты рождения. /// [JsonProperty("bdate_visibility")] public BirthdayVisibility? BirthdayVisibility { get; set; } /// /// Информация о заявке на смену имени. /// [JsonProperty("change_name_request")] public ChangeNameRequest ChangeNameRequest { get; set; } /// /// Информация о заявке на смену имени. /// public OwnerState OwnerState { get; set; } #endregion #region Поля для Groups.GetMembers /// /// Полномочия руководителя (для Groups.GetMembers) /// [JsonProperty("role")] public ManagerRole? Role { get; set; } #endregion #region Поля для NewsFeed.Get /// /// Количество друзей (для Groups.GetMembers) /// [JsonProperty("count")] public long? Count { get; set; } #endregion #region private [JsonProperty("uid")] private long Uid { get => Id; set => Id = value; } [JsonProperty("user_id")] private long UserId { get => Id; set => Id = value; } [JsonProperty("phone")] private string Phone { get => MobilePhone; set => MobilePhone = value; } #endregion /// /// Идентификатор университета. /// [JsonProperty("university")] public long? UniversityId { get; set; } /// /// Название ВУЗа. /// [JsonProperty("university_name")] public string UniversityName { get; set; } /// /// Идентификатор факультета. /// [JsonProperty("faculty")] public long? FacultyId { get; set; } /// /// Название факультета. /// [JsonProperty("faculty_name")] public string FacultyName { get; set; } /// /// Год окончания. /// [JsonProperty("graduation")] public int? Graduation { get; set; } #region Поля, установленные экспериментально /// /// Форма обучения. /// [JsonProperty("education_form")] public string EducationForm { get; set; } /// /// Текущий статус пользователя в высшем учебном заведении. /// [JsonProperty("education_status")] public string EducationStatus { get; set; } #endregion /// /// Логин в Skype. /// [JsonProperty("skype")] public string Skype { get; set; } /// /// Идентификатор акаунта в Facebook. /// [JsonProperty("facebook")] public string Facebook { get; set; } /// /// Имя и фамилия в facebook. /// [JsonProperty("facebook_name")] public string FacebookName { get; set; } /// /// Акаунт в Instagram. /// [JsonProperty("instagram")] public string Instagram { get; set; } }