diff --git a/VkNet.Tests/Categories/Messages/MessagesCategoryTest.cs b/VkNet.Tests/Categories/Messages/MessagesCategoryTest.cs index 06f00cee7..f853b5b32 100644 --- a/VkNet.Tests/Categories/Messages/MessagesCategoryTest.cs +++ b/VkNet.Tests/Categories/Messages/MessagesCategoryTest.cs @@ -1120,4 +1120,26 @@ public void SetMemberRole() .BeTrue(); } + + [Fact] + public void ChangeConversationMemberRestrictions() + { + Url = "https://api.vk.com/method/messages.changeConversationMemberRestrictions"; + ReadCategoryJsonPath(nameof(ChangeConversationMemberRestrictions)); + + var response = Api.Messages.ChangeConversationMemberRestrictions(new() + { + PeerId = 1, + MemberIds = new List + { + 814412, 4245645 + }, + For = 60, + Action = ConversationMemberRestrictionsActionType.Ro + }); + + response.FailedMemberIds.Should() + .BeEquivalentTo(new List { 814412 }); + + } } \ No newline at end of file diff --git a/VkNet.Tests/TestData/Categories/Messages/ChangeConversationMemberRestrictions.json b/VkNet.Tests/TestData/Categories/Messages/ChangeConversationMemberRestrictions.json new file mode 100644 index 000000000..fdccc103e --- /dev/null +++ b/VkNet.Tests/TestData/Categories/Messages/ChangeConversationMemberRestrictions.json @@ -0,0 +1,7 @@ +{ + "response": { + "failed_member_ids": [ + 814412 + ] + } +} \ No newline at end of file diff --git a/VkNet/Abstractions/Category/Async/IMessagesCategoryAsync.cs b/VkNet/Abstractions/Category/Async/IMessagesCategoryAsync.cs index fd40bedb6..5899a46c4 100644 --- a/VkNet/Abstractions/Category/Async/IMessagesCategoryAsync.cs +++ b/VkNet/Abstractions/Category/Async/IMessagesCategoryAsync.cs @@ -1231,6 +1231,20 @@ Task GetIntentUsersAsync(MessagesGetIntentUsersParams getI Task MarkAsUnreadConversationAsync(long peerId, CancellationToken token = default); + /// + /// Устанавливает ограничения участнику чата. + /// + /// + /// Входные параметры запроса + /// + /// Токен отмены операции + /// + /// Возвращает список идентификаторов, к которым не удалось применить ограничения + /// + Task ChangeConversationMemberRestrictionsAsync( + MessagesChangeConversationMemberRestrictionsParams @params, + CancellationToken token = default); + #region Obsoleted /// diff --git a/VkNet/Abstractions/Category/IMessagesCategory.cs b/VkNet/Abstractions/Category/IMessagesCategory.cs index 22b1d8c86..fedcae6d2 100644 --- a/VkNet/Abstractions/Category/IMessagesCategory.cs +++ b/VkNet/Abstractions/Category/IMessagesCategory.cs @@ -170,6 +170,10 @@ GetRecentCallsResult GetRecentCalls(IEnumerable fields, ulong? count = n /// bool SetMemberRole(string role, long peerId, ulong memberId); + /// + MessagesChangeConversationMemberRestrictionsObject ChangeConversationMemberRestrictions( + MessagesChangeConversationMemberRestrictionsParams @params); + #region Obsoleted /// diff --git a/VkNet/Categories/Async/MessagesCategoryAsync.cs b/VkNet/Categories/Async/MessagesCategoryAsync.cs index cb431d67e..ab885714a 100644 --- a/VkNet/Categories/Async/MessagesCategoryAsync.cs +++ b/VkNet/Categories/Async/MessagesCategoryAsync.cs @@ -412,4 +412,10 @@ public Task SetMemberRoleAsync(string role, CancellationToken token = default) => TypeHelper.TryInvokeMethodAsync(() => SetMemberRole(role, peerId, memberId), token); + + /// + public Task ChangeConversationMemberRestrictionsAsync( + MessagesChangeConversationMemberRestrictionsParams @params, + CancellationToken token = default) => TypeHelper.TryInvokeMethodAsync(() => + ChangeConversationMemberRestrictions(@params), token); } diff --git a/VkNet/Categories/MessagesCategory.cs b/VkNet/Categories/MessagesCategory.cs index f35f614de..d01fb0fb7 100644 --- a/VkNet/Categories/MessagesCategory.cs +++ b/VkNet/Categories/MessagesCategory.cs @@ -1470,4 +1470,23 @@ public bool SetMemberRole(string role, long peerId, ulong memberId) => _vk.Call< } }); + /// + public MessagesChangeConversationMemberRestrictionsObject + ChangeConversationMemberRestrictions(MessagesChangeConversationMemberRestrictionsParams @params) => + _vk.Call("messages.changeConversationMemberRestrictions", + new() + { + { + "peer_id", @params.PeerId + }, + { + "member_ids", @params.MemberIds + }, + { + "for", @params.For + }, + { + "action", @params.Action + } + }); } diff --git a/VkNet/Enums/StringEnums/ConversationMemberRestrictionsActionType.cs b/VkNet/Enums/StringEnums/ConversationMemberRestrictionsActionType.cs new file mode 100644 index 000000000..ac48c71d1 --- /dev/null +++ b/VkNet/Enums/StringEnums/ConversationMemberRestrictionsActionType.cs @@ -0,0 +1,22 @@ +using Newtonsoft.Json; +using VkNet.Utils.JsonConverter; + +namespace VkNet.Enums.StringEnums; + +/// +/// Ограничения участников разговора +/// +[StringEnum] +[JsonConverter(typeof(TolerantStringEnumConverter))] +public enum ConversationMemberRestrictionsActionType +{ + /// + /// Read/write, пользователь может читать и отправлять сообщения в чат + /// + Rw, + + /// + /// Read only, пользователь не может отправлять сообщения в чат + /// + Ro +} \ No newline at end of file diff --git a/VkNet/Model/MessagesChangeConversationMemberRestrictionsObject.cs b/VkNet/Model/MessagesChangeConversationMemberRestrictionsObject.cs new file mode 100644 index 000000000..a6a26e71a --- /dev/null +++ b/VkNet/Model/MessagesChangeConversationMemberRestrictionsObject.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.ObjectModel; +using Newtonsoft.Json; + +namespace VkNet.Model; + +/// +/// Результат выполнения запроса установки ограничений участнику чата +/// +[Serializable] +public class MessagesChangeConversationMemberRestrictionsObject +{ + /// + /// Список идентификаторов, к которым не удалось применить ограничения + /// + [JsonProperty("failed_member_ids")] + public ReadOnlyCollection FailedMemberIds { get; set; } +} \ No newline at end of file diff --git a/VkNet/Model/RequestParams/Messages/MessagesChangeConversationMemberRestrictionsParams.cs b/VkNet/Model/RequestParams/Messages/MessagesChangeConversationMemberRestrictionsParams.cs new file mode 100644 index 000000000..1595615a5 --- /dev/null +++ b/VkNet/Model/RequestParams/Messages/MessagesChangeConversationMemberRestrictionsParams.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; +using VkNet.Enums.StringEnums; + +namespace VkNet.Model; + +/// +/// Список параметров для метода messages.changeConversationMemberRestrictions +/// +[Serializable] +public class MessagesChangeConversationMemberRestrictionsParams +{ + /// + /// Идентификатор назначения. + /// + [JsonProperty("peer_id")] + public long PeerId { get; set; } + + /// + /// Идентификаторы пользователей. + /// + [JsonProperty("member_ids")] + public IEnumerable MemberIds { get; set; } + + /// + /// Время в секундах. Если нужно замутить навсегда, то указывать не нужно. + /// + [JsonProperty("for", NullValueHandling = NullValueHandling.Ignore)] + public long For { get; set; } + + /// + /// Разрешенные действия. + /// + [JsonProperty("action")] + public ConversationMemberRestrictionsActionType Action { get; set; } +} \ No newline at end of file