Added support for group permission messages.

This commit is contained in:
Tom
2025-03-29 20:27:55 +00:00
parent 622b359b12
commit eddd9e6403
4 changed files with 171 additions and 0 deletions

View File

@ -0,0 +1,52 @@
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 CreateGroupPermissionAck : IRequestAck
{
public string Name => "create_group_permission";
private readonly IChatterGroupManager _groups;
private readonly IGroupPermissionManager _permissions;
private readonly JsonSerializerOptions _options;
private readonly ILogger _logger;
public CreateGroupPermissionAck(IChatterGroupManager groups, IGroupPermissionManager permissions, JsonSerializerOptions options, ILogger logger)
{
_groups = groups;
_permissions = permissions;
_options = options;
_logger = logger;
}
public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{
if (string.IsNullOrWhiteSpace(json))
{
_logger.Warning($"Group JSON data is null.");
return;
}
var permission = JsonSerializer.Deserialize<GroupPermission>(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($"Adding permission to group [permission id: {permission.Id}][group id: {permission.GroupId}][path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}]");
_permissions.Set(permission.Path, permission.Allow);
_logger.Information($"Permission has been added to group [path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}][group name: {group.Name}]");
}
}
}

View File

@ -0,0 +1,64 @@
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<string, object>? 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<GroupPermission>(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}]");
}
}
}

View File

@ -0,0 +1,52 @@
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 UpdateGroupPermissionAck : IRequestAck
{
public string Name => "update_group_permission";
private readonly IChatterGroupManager _groups;
private readonly IGroupPermissionManager _permissions;
private readonly JsonSerializerOptions _options;
private readonly ILogger _logger;
public UpdateGroupPermissionAck(IChatterGroupManager groups, IGroupPermissionManager permissions, JsonSerializerOptions options, ILogger logger)
{
_groups = groups;
_permissions = permissions;
_options = options;
_logger = logger;
}
public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{
if (string.IsNullOrWhiteSpace(json))
{
_logger.Warning($"Group JSON data is null.");
return;
}
var permission = JsonSerializer.Deserialize<GroupPermission>(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($"Updating permission to group [permission id: {permission.Id}][group id: {permission.GroupId}][path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}]");
_permissions.Set(permission.Path, permission.Allow);
_logger.Information($"Permission on group has been updated [path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}][group name: {group.Name}]");
}
}
}

View File

@ -89,6 +89,7 @@ s.AddTransient<ICommandFactory, CommandFactory>();
s.AddSingleton<RequestAckManager>(); s.AddSingleton<RequestAckManager>();
s.AddTransient<IRequestAck, CreateGroupAck>(); s.AddTransient<IRequestAck, CreateGroupAck>();
s.AddTransient<IRequestAck, CreateGroupChatterAck>(); s.AddTransient<IRequestAck, CreateGroupChatterAck>();
s.AddTransient<IRequestAck, CreateGroupPermissionAck>();
s.AddTransient<IRequestAck, CreatePolicyAck>(); s.AddTransient<IRequestAck, CreatePolicyAck>();
s.AddTransient<IRequestAck, CreateRedeemableActionAck>(); s.AddTransient<IRequestAck, CreateRedeemableActionAck>();
s.AddTransient<IRequestAck, CreateRedemptionAck>(); s.AddTransient<IRequestAck, CreateRedemptionAck>();
@ -97,6 +98,7 @@ s.AddTransient<IRequestAck, CreateTTSUserAck>();
s.AddTransient<IRequestAck, CreateTTSVoiceAck>(); s.AddTransient<IRequestAck, CreateTTSVoiceAck>();
s.AddTransient<IRequestAck, DeleteGroupAck>(); s.AddTransient<IRequestAck, DeleteGroupAck>();
s.AddTransient<IRequestAck, DeleteGroupChatterAck>(); s.AddTransient<IRequestAck, DeleteGroupChatterAck>();
s.AddTransient<IRequestAck, DeleteGroupPermissionAck>();
s.AddTransient<IRequestAck, DeletePolicyAck>(); s.AddTransient<IRequestAck, DeletePolicyAck>();
s.AddTransient<IRequestAck, DeleteRedeemableActionAck>(); s.AddTransient<IRequestAck, DeleteRedeemableActionAck>();
s.AddTransient<IRequestAck, DeleteRedemptionAck>(); s.AddTransient<IRequestAck, DeleteRedemptionAck>();
@ -116,6 +118,7 @@ s.AddTransient<IRequestAck, GetTTSVoicesAck>();
s.AddTransient<IRequestAck, GetTTSWordFiltersAck>(); s.AddTransient<IRequestAck, GetTTSWordFiltersAck>();
s.AddTransient<IRequestAck, UpdateGroupAck>(); s.AddTransient<IRequestAck, UpdateGroupAck>();
s.AddTransient<IRequestAck, UpdateGroupChatterAck>(); s.AddTransient<IRequestAck, UpdateGroupChatterAck>();
s.AddTransient<IRequestAck, UpdateGroupPermissionAck>();
s.AddTransient<IRequestAck, UpdateDefaultTTSVoiceAck>(); s.AddTransient<IRequestAck, UpdateDefaultTTSVoiceAck>();
s.AddTransient<IRequestAck, UpdatePolicyAck>(); s.AddTransient<IRequestAck, UpdatePolicyAck>();
s.AddTransient<IRequestAck, UpdateRedeemableActionAck>(); s.AddTransient<IRequestAck, UpdateRedeemableActionAck>();