From 0375a0cc5163493113dd42b1f2a7aff28a336f49 Mon Sep 17 00:00:00 2001 From: Foretack <69414142+Foretack@users.noreply.github.com> Date: Sun, 21 Apr 2024 14:42:09 +0200 Subject: [PATCH] Add `Get Unban Requests` endpoint --- MiniTwitch.Helix/Enums/UnbanRequestStatus.cs | 17 ++++++++++ MiniTwitch.Helix/HelixWrapper.cs | 8 +++++ MiniTwitch.Helix/Internal/Models/Endpoints.cs | 14 ++++++++ MiniTwitch.Helix/Models/AllCategories.cs | 19 +++++++++++ MiniTwitch.Helix/Models/ModerationCategory.cs | 11 ++++++- MiniTwitch.Helix/Responses/UnbanRequests.cs | 33 +++++++++++++++++++ 6 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 MiniTwitch.Helix/Enums/UnbanRequestStatus.cs create mode 100644 MiniTwitch.Helix/Responses/UnbanRequests.cs diff --git a/MiniTwitch.Helix/Enums/UnbanRequestStatus.cs b/MiniTwitch.Helix/Enums/UnbanRequestStatus.cs new file mode 100644 index 0000000..ab7d481 --- /dev/null +++ b/MiniTwitch.Helix/Enums/UnbanRequestStatus.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MiniTwitch.Helix.Enums; + +public enum UnbanRequestStatus +{ + Unknown, + Pending, + Approved, + Denied, + Acknowledged, + Canceled, +} diff --git a/MiniTwitch.Helix/HelixWrapper.cs b/MiniTwitch.Helix/HelixWrapper.cs index 1711f59..031c710 100644 --- a/MiniTwitch.Helix/HelixWrapper.cs +++ b/MiniTwitch.Helix/HelixWrapper.cs @@ -959,4 +959,12 @@ public Task> GetUserEmotes( long? broadcasterId = null, CancellationToken cancellationToken = default) => _all.GetUserEmotes(broadcasterId, cancellationToken); + + public Task> GetUnbanRequests( + long broadcasterId, + UnbanRequestStatus status, + long? userId, + int? first, + CancellationToken cancellationToken = default) + => _all.GetUnbanRequests(broadcasterId, status, userId, first, cancellationToken); } diff --git a/MiniTwitch.Helix/Internal/Models/Endpoints.cs b/MiniTwitch.Helix/Internal/Models/Endpoints.cs index b7e4cd3..52fbbd7 100644 --- a/MiniTwitch.Helix/Internal/Models/Endpoints.cs +++ b/MiniTwitch.Helix/Internal/Models/Endpoints.cs @@ -2027,4 +2027,18 @@ internal static class Endpoints _ => "Unknown response code" } }; + + public static readonly HelixEndpoint GetUnbanRequests = new() + { + Method = HttpMethod.Get, + Route = "/moderation/unban_requests", + SuccessStatusCode = HttpStatusCode.OK, + GetResponseMessage = code => code switch + { + HttpStatusCode.OK => "Successfully retrieved the list of unban requests.", + HttpStatusCode.BadRequest => "The broadcaster_id query parameter is required.\r\nThe ID in the broadcaster_id query parameter is not valid.\r\nThe moderator_id query parameter is required.\r\nThe ID in the moderator_id query parameter is not valid.\r\nThe pagination cursor is not valid.", + HttpStatusCode.Unauthorized => "The ID in moderator_id must match the user ID in the user access token.\r\nThe Authorization header is required and must contain a user access token.\r\nThe user access token must include the moderator:read:unban_requests or moderator:manage:unban_requests scope.\r\nThe access token is not valid.\r\nThe client ID specified in the Client-Id header does not match the client ID specified in the access token.", + _ => "Unknown response code" + } + }; } diff --git a/MiniTwitch.Helix/Models/AllCategories.cs b/MiniTwitch.Helix/Models/AllCategories.cs index 050795f..26f9785 100644 --- a/MiniTwitch.Helix/Models/AllCategories.cs +++ b/MiniTwitch.Helix/Models/AllCategories.cs @@ -2153,4 +2153,23 @@ public Task> GetUserEmotes( return HelixResultFactory.Create(this.ApiClient, request, endpoint, cancellationToken); } + + + public Task> GetUnbanRequests( + long broadcasterId, + UnbanRequestStatus status, + long? userId, + int? first, + CancellationToken cancellationToken = default) + { + HelixEndpoint endpoint = Endpoints.GetUnbanRequests; + RequestData request = new RequestData(_baseUrl, endpoint) + .AddParam(QueryParams.BroadcasterId, broadcasterId) + .AddParam(QueryParams.ModeratorId, this.UserId) + .AddParam(QueryParams.Status, status) + .AddParam(QueryParams.UserId, userId) + .AddParam(QueryParams.First, first); + + return HelixResultFactory.Create(this.ApiClient, request, endpoint, cancellationToken); + } } diff --git a/MiniTwitch.Helix/Models/ModerationCategory.cs b/MiniTwitch.Helix/Models/ModerationCategory.cs index c5d66b6..676780d 100644 --- a/MiniTwitch.Helix/Models/ModerationCategory.cs +++ b/MiniTwitch.Helix/Models/ModerationCategory.cs @@ -1,4 +1,5 @@ -using MiniTwitch.Helix.Requests; +using MiniTwitch.Helix.Enums; +using MiniTwitch.Helix.Requests; using MiniTwitch.Helix.Responses; namespace MiniTwitch.Helix.Models; @@ -119,4 +120,12 @@ public Task> GetModeratedChannels( int? first = null, CancellationToken cancellationToken = default) => _all.GetModeratedChannels(first, cancellationToken); + + public Task> GetUnbanRequests( + long broadcasterId, + UnbanRequestStatus status, + long? userId, + int? first, + CancellationToken cancellationToken = default) + => _all.GetUnbanRequests(broadcasterId, status, userId, first, cancellationToken); } diff --git a/MiniTwitch.Helix/Responses/UnbanRequests.cs b/MiniTwitch.Helix/Responses/UnbanRequests.cs new file mode 100644 index 0000000..2414dce --- /dev/null +++ b/MiniTwitch.Helix/Responses/UnbanRequests.cs @@ -0,0 +1,33 @@ +using System.Text.Json.Serialization; +using MiniTwitch.Helix.Enums; +using MiniTwitch.Helix.Internal.Json; +using MiniTwitch.Helix.Models; + +namespace MiniTwitch.Helix.Responses; +public class UnbanRequests : PaginableResponse +{ + public record Request( + string Id, + long BroadcasterId, + [property: JsonPropertyName("broadcaster_login")] + string BroadcasterName, + [property: JsonPropertyName("broadcaster_name")] + string BroadcasterDisplayName, + long ModeratorId, + [property: JsonPropertyName("moderator_login")] + string ModeratorName, + [property: JsonPropertyName("moderator_name")] + string ModeratorDisplayName, + long UserId, + [property: JsonPropertyName("user_login")] + string UserName, + [property: JsonPropertyName("user_name")] + string UserDisplayName, + string Text, + [property: JsonConverter(typeof(EnumConverter))] + UnbanRequestStatus Status, + DateTime CreatedAt, + DateTime? ResolvedAt, + string? ResolutionText + ); +}