From 9f884f71aed7e71bc05058f83454ebda18e2d7b6 Mon Sep 17 00:00:00 2001 From: Tom Date: Sat, 18 Jan 2025 17:33:15 +0000 Subject: [PATCH] Added group chatters support to websocket. --- Chat/Groups/ChatterGroupManager.cs | 7 ++- Hermes/Socket/Requests/CreateGroupAck.cs | 3 +- .../Socket/Requests/CreateGroupChatterAck.cs | 49 ++++++++++++++++++ .../Socket/Requests/DeleteGroupChatterAck.cs | 51 +++++++++++++++++++ Hermes/Socket/Requests/DeletePolicyAck.cs | 6 +++ .../Socket/Requests/UpdateGroupChatterAck.cs | 40 +++++++++++++++ 6 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 Hermes/Socket/Requests/CreateGroupChatterAck.cs create mode 100644 Hermes/Socket/Requests/DeleteGroupChatterAck.cs create mode 100644 Hermes/Socket/Requests/UpdateGroupChatterAck.cs diff --git a/Chat/Groups/ChatterGroupManager.cs b/Chat/Groups/ChatterGroupManager.cs index 8105451..59c6f63 100644 --- a/Chat/Groups/ChatterGroupManager.cs +++ b/Chat/Groups/ChatterGroupManager.cs @@ -24,9 +24,12 @@ namespace TwitchChatTTS.Chat.Groups _groups.Add(group.Name, group); } - public void Add(long chatter, string groupName) + public void Add(long chatter, string groupId) { - _chatters.Add(chatter, new List() { groupName }); + if (_chatters.TryGetValue(chatter, out var list)) + list.Add(groupId); + else + _chatters.Add(chatter, new List() { groupId }); } public void Add(long chatter, ICollection groupNames) diff --git a/Hermes/Socket/Requests/CreateGroupAck.cs b/Hermes/Socket/Requests/CreateGroupAck.cs index 569f0c1..e0296c1 100644 --- a/Hermes/Socket/Requests/CreateGroupAck.cs +++ b/Hermes/Socket/Requests/CreateGroupAck.cs @@ -21,7 +21,8 @@ namespace TwitchChatTTS.Hermes.Socket.Requests public void Acknowledge(string requestId, string? json, IDictionary? requestData) { - if (string.IsNullOrWhiteSpace(json)) { + if (string.IsNullOrWhiteSpace(json)) + { _logger.Warning($"Group JSON data is null."); return; } diff --git a/Hermes/Socket/Requests/CreateGroupChatterAck.cs b/Hermes/Socket/Requests/CreateGroupChatterAck.cs new file mode 100644 index 0000000..2a7bd9c --- /dev/null +++ b/Hermes/Socket/Requests/CreateGroupChatterAck.cs @@ -0,0 +1,49 @@ +using System.Text.Json; +using HermesSocketLibrary.Requests.Messages; +using Serilog; +using TwitchChatTTS.Chat.Groups; + +namespace TwitchChatTTS.Hermes.Socket.Requests +{ + public class CreateGroupChatterAck : IRequestAck + { + public string Name => "create_group_chatter"; + private readonly IChatterGroupManager _groups; + private readonly JsonSerializerOptions _options; + private readonly ILogger _logger; + + public CreateGroupChatterAck(IChatterGroupManager groups, JsonSerializerOptions options, ILogger logger) + { + _groups = groups; + _options = options; + _logger = logger; + } + + public void Acknowledge(string requestId, string? json, IDictionary? requestData) + { + if (string.IsNullOrWhiteSpace(json)) + { + _logger.Warning($"Group Chatter JSON data is null."); + return; + } + + var groupChatter = JsonSerializer.Deserialize(json, _options); + if (groupChatter == null) + { + _logger.Warning($"Group Chatter data is null."); + return; + } + + var group = _groups.Get(groupChatter.GroupId); + if (group == null) + { + _logger.Warning($"Group id for chatter does not exists [group id: {groupChatter.GroupId}]"); + return; + } + + _logger.Debug($"Adding chatter to group [group id: {groupChatter.GroupId}][group name: {group.Name}][chatter id: {groupChatter.ChatterId}][chatter label: {groupChatter.ChatterLabel}]"); + _groups.Add(groupChatter.ChatterId, groupChatter.GroupId); + _logger.Information($"Chatter has been added to group [group id: {groupChatter.GroupId}][group name: {group.Name}][chatter id: {groupChatter.ChatterId}][chatter label: {groupChatter.ChatterLabel}]"); + } + } +} \ No newline at end of file diff --git a/Hermes/Socket/Requests/DeleteGroupChatterAck.cs b/Hermes/Socket/Requests/DeleteGroupChatterAck.cs new file mode 100644 index 0000000..4a015ee --- /dev/null +++ b/Hermes/Socket/Requests/DeleteGroupChatterAck.cs @@ -0,0 +1,51 @@ +using Serilog; +using TwitchChatTTS.Chat.Groups; + +namespace TwitchChatTTS.Hermes.Socket.Requests +{ + public class DeleteGroupChatterAck : IRequestAck + { + public string Name => "delete_group_chatter"; + private readonly IChatterGroupManager _groups; + private readonly ILogger _logger; + + public DeleteGroupChatterAck(IChatterGroupManager groups, ILogger logger) + { + _groups = groups; + _logger = logger; + } + + public void Acknowledge(string requestId, string? json, IDictionary? requestData) + { + if (requestData == null) + { + _logger.Warning("Request data is null."); + return; + } + + if (long.TryParse(requestData["chatter"].ToString(), out var chatterId)) + { + _logger.Warning($"Chatter Id is invalid [chatter id: {chatterId}]"); + return; + } + + var groupId = requestData["group"].ToString(); + if (string.IsNullOrWhiteSpace(groupId)) + { + _logger.Warning($"Group Id is invalid [group id: {groupId}]"); + return; + } + + var group = _groups.Get(groupId); + if (group == null) + { + _logger.Warning($"Group id does not exist [group id: {groupId}]"); + return; + } + + _logger.Debug($"Deleting chatter from group [group id: {group.Id}][chatter id: {chatterId}][group name: {group.Name}][group priority: {group.Priority}]"); + _groups.Remove(chatterId, groupId); + _logger.Information($"Chatter has been deleted from group [group id: {group.Id}][chatter id: {chatterId}]"); + } + } +} \ No newline at end of file diff --git a/Hermes/Socket/Requests/DeletePolicyAck.cs b/Hermes/Socket/Requests/DeletePolicyAck.cs index b1196c7..ab313c7 100644 --- a/Hermes/Socket/Requests/DeletePolicyAck.cs +++ b/Hermes/Socket/Requests/DeletePolicyAck.cs @@ -20,6 +20,12 @@ namespace TwitchChatTTS.Hermes.Socket.Requests public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Warning("Policy JSON data is null."); + return; + } + var data = json.Split('/'); if (data.Length != 2) { diff --git a/Hermes/Socket/Requests/UpdateGroupChatterAck.cs b/Hermes/Socket/Requests/UpdateGroupChatterAck.cs new file mode 100644 index 0000000..c1b23db --- /dev/null +++ b/Hermes/Socket/Requests/UpdateGroupChatterAck.cs @@ -0,0 +1,40 @@ +using System.Text.Json; +using HermesSocketLibrary.Requests.Messages; +using Serilog; +using TwitchChatTTS.Chat.Groups; + +namespace TwitchChatTTS.Hermes.Socket.Requests +{ + public class UpdateGroupChatterAck : IRequestAck + { + public string Name => "update_group_chatter"; + private readonly IChatterGroupManager _groups; + private readonly JsonSerializerOptions _options; + private readonly ILogger _logger; + + public UpdateGroupChatterAck(IChatterGroupManager groups, JsonSerializerOptions options, ILogger logger) + { + _groups = groups; + _options = options; + _logger = logger; + } + + public void Acknowledge(string requestId, string? json, IDictionary? requestData) + { + if (string.IsNullOrWhiteSpace(json)) { + _logger.Warning($"Group Chatter JSON data is null."); + return; + } + + var groupChatter = JsonSerializer.Deserialize(json, _options); + if (groupChatter == null) + { + _logger.Warning($"Group Chatter data is null."); + return; + } + + _groups.Add(groupChatter.ChatterId, groupChatter.GroupId); + _logger.Information($"Chatter has been updated [chatter label: {groupChatter.ChatterLabel}]"); + } + } +} \ No newline at end of file