using System.Text.Json; using HermesSocketLibrary.Requests.Messages; using Serilog; using TwitchChatTTS.Chat.Groups; using TwitchChatTTS.Chat.Groups.Permissions; namespace TwitchChatTTS.Hermes.Socket.Requests { public class DeleteGroupPermissionAck : IRequestAck { public string Name => "delete_group_permission"; private readonly IChatterGroupManager _groups; private readonly IGroupPermissionManager _permissions; private readonly JsonSerializerOptions _options; private readonly ILogger _logger; public DeleteGroupPermissionAck(IChatterGroupManager groups, IGroupPermissionManager permissions, JsonSerializerOptions options, ILogger logger) { _groups = groups; _permissions = permissions; _options = options; _logger = logger; } public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { _logger.Warning("Request data is null."); return; } if (!requestData.TryGetValue("id", out var permissionId)) { _logger.Warning($"Permission Id could not be found."); return; } if (string.IsNullOrWhiteSpace(json)) { _logger.Warning($"Group JSON data is null."); return; } var permission = JsonSerializer.Deserialize(json, _options); if (permission == null) { _logger.Warning($"Permission data is null."); return; } var group = _groups.Get(permission.GroupId.ToString()); if (group == null) { _logger.Warning($"Group id does not exist [group id: {permission.GroupId}][permission id: {permission.Id}]"); return; } _logger.Debug($"Removing permission from group [permission id: {permission.Id}][group id: {permission.GroupId}][path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}]"); _permissions.Remove(permissionId.ToString()!); _logger.Information($"Permission has been removed from group [path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}][group name: {group.Name}]"); } } }