diff --git a/VkNet/Abstractions/Category/Async/IGroupsCategoryAsync.cs b/VkNet/Abstractions/Category/Async/IGroupsCategoryAsync.cs index a63dd93a6..b0b419ac5 100644 --- a/VkNet/Abstractions/Category/Async/IGroupsCategoryAsync.cs +++ b/VkNet/Abstractions/Category/Async/IGroupsCategoryAsync.cs @@ -92,7 +92,7 @@ Task> GetAsync(GroupsGetParams @params, /// city, country, place, description, /// wiki_page, members_count, counters, start_date, finish_date, can_post, /// can_see_all_posts, activity, status, - /// contacts, links, fixed_post, verified, site,ban_info. + /// contacts, links, fixed_post, verified, site, ban_info, addresses. /// Обратите внимание, для получения некоторых полей требуется право доступа /// groups. Подробнее см. описание полей /// объекта group список строк, разделенных через запятую (Список строк, diff --git a/VkNet/Enums/Filters/GroupsFields.cs b/VkNet/Enums/Filters/GroupsFields.cs index 3a746d840..ef41ae27c 100644 --- a/VkNet/Enums/Filters/GroupsFields.cs +++ b/VkNet/Enums/Filters/GroupsFields.cs @@ -112,6 +112,11 @@ public sealed class GroupsFields : MultivaluedFilter /// public static readonly GroupsFields BanInfo = RegisterPossibleValue(1 << 20, "ban_info"); + /// + /// Для получения дополнительного поля Group.Addresses + /// + public static readonly GroupsFields Addresses = RegisterPossibleValue(1 << 21, "addresses"); + /// /// Для получения всех дополнительных полей. /// @@ -134,7 +139,8 @@ public sealed class GroupsFields : MultivaluedFilter |FixedPostId |IsVerified |Site - |BanInfo; + |BanInfo + |Addresses; /// /// Для получения всех дополнительных полей (оказалаось, что некоторые поля diff --git a/VkNet/Model/Group/Address.cs b/VkNet/Model/Group/Address.cs new file mode 100644 index 000000000..c42b8aeb2 --- /dev/null +++ b/VkNet/Model/Group/Address.cs @@ -0,0 +1,56 @@ +using System; +using System.Diagnostics; +using Newtonsoft.Json; +using VkNet.Enums.StringEnums; + +namespace VkNet.Model; + +/// +/// Информация об адресе сообщества. +/// +[DebuggerDisplay(value: "[{Id}] {Title}")] +[Serializable] +public class Address +{ + /// + /// Идентификатор адреса. + /// + [JsonProperty(propertyName: "id")] + public long? Id { get; set; } + + /// + /// Улица и дом + /// + [JsonProperty(propertyName: "address")] + public string Residence { get; set; } + + /// + /// Город адреса. + /// + [JsonProperty(propertyName: "city")] + public AddressCity City { get; set; } + + /// + /// Станция метро. + /// + [JsonProperty(propertyName: "metro_station")] + public AddressMetroStation MetroStation { get; set; } + + /// + /// Страна адреса. + /// + [JsonProperty(propertyName: "country")] + public AddressCountry Country { get; set; } + + /// + /// Название или описание адреса. + /// + [JsonProperty(propertyName: "title")] + public string Title { get; set; } + + /// + /// Статус работы (расписание) по данному адресу. + /// + [JsonProperty(propertyName: "work_info_status")] + ScheduleWorkInfoStatus? WorkInfoStatus { get; set; } +} diff --git a/VkNet/Model/Group/AddressCity.cs b/VkNet/Model/Group/AddressCity.cs new file mode 100644 index 000000000..ce93fe8d1 --- /dev/null +++ b/VkNet/Model/Group/AddressCity.cs @@ -0,0 +1,25 @@ +using System; +using System.Diagnostics; +using Newtonsoft.Json; + +namespace VkNet.Model; + +/// +/// Город адреса. +/// +[DebuggerDisplay(value: "[{Id}] ({Title})")] +[Serializable] +public class AddressCity +{ + /// + /// Идентификатор города. + /// + [JsonProperty(propertyName: "id")] + public long? Id { get; set; } + + /// + /// Название города. + /// + [JsonProperty(propertyName: "title")] + public string Title { get; set; } +} diff --git a/VkNet/Model/Group/AddressCountry.cs b/VkNet/Model/Group/AddressCountry.cs new file mode 100644 index 000000000..8b8600534 --- /dev/null +++ b/VkNet/Model/Group/AddressCountry.cs @@ -0,0 +1,25 @@ +using System; +using System.Diagnostics; +using Newtonsoft.Json; + +namespace VkNet.Model; + +/// +/// Страна адреса. +/// +[DebuggerDisplay(value: "[{Id}] ({Title})")] +[Serializable] +public class AddressCountry +{ + /// + /// Идентификатор страны. + /// + [JsonProperty(propertyName: "id")] + public long? Id { get; set; } + + /// + /// Название страны. + /// + [JsonProperty(propertyName: "title")] + public string Title { get; set; } +} \ No newline at end of file diff --git a/VkNet/Model/Group/AddressMetroStation.cs b/VkNet/Model/Group/AddressMetroStation.cs new file mode 100644 index 000000000..cdff7fd7c --- /dev/null +++ b/VkNet/Model/Group/AddressMetroStation.cs @@ -0,0 +1,37 @@ +using System; +using System.Diagnostics; +using Newtonsoft.Json; + +namespace VkNet.Model; + +/// +/// Метро адреса. +/// +[DebuggerDisplay(value: "[{Id}] ({Name})")] +[Serializable] +public class AddressMetroStation +{ + /// + /// Идентификатор станции метро. + /// + [JsonProperty(propertyName: "id")] + public long? Id { get; set; } + + /// + /// Название станции метро. + /// + [JsonProperty(propertyName: "name")] + public string Name { get; set; } + + /// + /// Идентификатор города, к которому относится метро. + /// + [JsonProperty(propertyName: "city_id")] + public long? CityId { get; set; } + + /// + /// Цветовой код линии метро (HEX). + /// + [JsonProperty(propertyName: "color")] + public string Color { get; set; } +} diff --git a/VkNet/Model/Group/Addresses.cs b/VkNet/Model/Group/Addresses.cs new file mode 100644 index 000000000..d8b3f0ff0 --- /dev/null +++ b/VkNet/Model/Group/Addresses.cs @@ -0,0 +1,40 @@ +using System; +using System.Diagnostics; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using VkNet.Enums; +using VkNet.Enums.StringEnums; + +namespace VkNet.Model; + +/// +/// Информация об адресах сообщества. +/// +[DebuggerDisplay(value: "[{MainAddressId}] ({Count})")] +[Serializable] +public class Addresses +{ + /// + /// Включен ли блок адресов в сообществе. + /// + [JsonProperty(propertyName: "is_enabled")] + public bool? IsEnabled { get; set; } + + /// + /// Идентификатор главного адреса. + /// + [JsonProperty(propertyName: "main_address_id")] + public long? MainAddressId { get; set; } + + /// + /// Общее количество адресов. + /// + [JsonProperty(propertyName: "count")] + public long? Count { get; set; } + + /// + /// Информация о главном адресе. + /// + [JsonProperty(propertyName: "main_address")] + public Address MainAddress { get; set; } +} diff --git a/VkNet/Model/Group/Group.cs b/VkNet/Model/Group/Group.cs index c7772fecb..95e1b287b 100644 --- a/VkNet/Model/Group/Group.cs +++ b/VkNet/Model/Group/Group.cs @@ -170,6 +170,12 @@ private Uri PhotoMedium [JsonProperty("ban_info")] public BanInfo BanInfo { get; set; } + /// + /// Информация об адресах сообщества. + /// + [JsonProperty("addresses")] + public Addresses Addresses { get; set; } + /// /// Информация о том, может ли текущий пользователь создать тему обсуждения в /// группе. diff --git a/VkNet/Utils/JsonConverter/GroupJsonConverter.cs b/VkNet/Utils/JsonConverter/GroupJsonConverter.cs index 4e45a5777..4c033a469 100644 --- a/VkNet/Utils/JsonConverter/GroupJsonConverter.cs +++ b/VkNet/Utils/JsonConverter/GroupJsonConverter.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.ObjectModel; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -98,6 +98,10 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist ? null : JsonConvert.DeserializeObject(response["ban_info"] .ToString()), + Addresses = !response.ContainsKey("addresses") + ? null + : JsonConvert.DeserializeObject(response["addresses"] + .ToString()), CanUploadVideo = response["can_upload_video"], MainAlbumId = response["main_album_id"], IsHiddenFromFeed = response["is_hidden_from_feed"],