From 5e33d594d28c73da0a887171cafb470c65c62b0d Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 17 Jan 2025 00:54:47 +0000 Subject: [PATCH] Fixed a lot of compiler warnings. Fixed 7tv connection. --- Chat/Commands/CommandManager.cs | 7 +- Chat/Emotes/EmoteDatabase.cs | 10 +-- Hermes/Socket/Handlers/LoginAckHandler.cs | 7 +- Hermes/Socket/Requests/CreatePolicyAck.cs | 6 +- .../Requests/CreateRedeemableActionAck.cs | 8 ++- Hermes/Socket/Requests/CreateRedemptionAck.cs | 8 ++- Hermes/Socket/Requests/CreateTTSFilterAck.cs | 13 +++- Hermes/Socket/Requests/CreateTTSUserAck.cs | 2 +- Hermes/Socket/Requests/CreateTTSVoiceAck.cs | 2 +- Hermes/Socket/Requests/DeletePolicyAck.cs | 2 +- .../Requests/DeleteRedeemableActionAck.cs | 2 +- Hermes/Socket/Requests/DeleteRedemptionAck.cs | 2 +- Hermes/Socket/Requests/DeleteTTSFilterAck.cs | 2 +- Hermes/Socket/Requests/DeleteTTSVoiceAck.cs | 2 +- Hermes/Socket/Requests/GetChatterIdsAck.cs | 8 ++- Hermes/Socket/Requests/GetConnectionsAck.cs | 8 ++- .../Socket/Requests/GetDefaultTTSVoiceAck.cs | 7 +- Hermes/Socket/Requests/GetEmotesAck.cs | 8 ++- Hermes/Socket/Requests/GetEnabledTTSVoices.cs | 8 ++- Hermes/Socket/Requests/GetPermissionsAck.cs | 10 ++- Hermes/Socket/Requests/GetPoliciesAck.cs | 10 ++- .../Requests/GetRedeemableActionsAck.cs | 2 +- Hermes/Socket/Requests/GetRedemptionsAck.cs | 2 +- Hermes/Socket/Requests/GetTTSUsersAck.cs | 2 +- Hermes/Socket/Requests/GetTTSVoicesAck.cs | 2 +- .../Socket/Requests/GetTTSWordFiltersAck.cs | 2 +- Hermes/Socket/Requests/IRequestAck.cs | 2 +- Hermes/Socket/Requests/RequestAckManager.cs | 2 +- .../Requests/UpdateDefaultTTSVoiceAck.cs | 2 +- Hermes/Socket/Requests/UpdatePolicyAck.cs | 2 +- .../Requests/UpdateRedeemableActionAck.cs | 2 +- .../Socket/Requests/UpdateRedeemptionAck.cs | 7 +- Hermes/Socket/Requests/UpdateTTSFilterAck.cs | 2 +- Hermes/Socket/Requests/UpdateTTSUserAck.cs | 2 +- Hermes/Socket/Requests/UpdateTTSVoiceAck.cs | 2 +- .../Socket/Requests/UpdateTTSVoiceStateAck.cs | 2 +- Hermes/TTSVersion.cs | 4 +- OBS/Socket/Data/EventMessage.cs | 4 +- OBS/Socket/Data/HelloMessage.cs | 8 +-- OBS/Socket/Data/OBSSceneItem.cs | 6 +- OBS/Socket/Data/RequestBatchMessage.cs | 2 - .../Data/RequestBatchResponseMessage.cs | 4 +- OBS/Socket/Data/RequestMessage.cs | 2 +- OBS/Socket/Data/RequestResponseMessage.cs | 10 ++- OBS/Socket/Data/TransformationData.cs | 2 +- Seven/SevenApiClient.cs | 9 ++- Seven/Socket/Data/ChangeMapMessage.cs | 16 ++--- Seven/Socket/Data/DispatchMessage.cs | 4 +- Seven/Socket/Data/EndOfStreamMessage.cs | 2 +- Seven/Socket/Data/ErrorMessage.cs | 4 +- Seven/Socket/Data/ReconnectMessage.cs | 2 +- Seven/Socket/Data/ResumeMessage.cs | 2 +- Seven/Socket/Data/SevenHelloMessage.cs | 2 +- Seven/Socket/Data/SubscribeMessage.cs | 2 +- Seven/Socket/Data/UnsubscribeMessage.cs | 2 +- Seven/Socket/Handlers/EndOfStreamHandler.cs | 2 +- Seven/Socket/Handlers/ErrorHandler.cs | 6 +- Seven/UserDetails.cs | 16 ++--- TTS.cs | 29 ++++++-- .../Socket/Messages/ChannelAdBreakMessage.cs | 12 ++-- Twitch/Socket/Messages/ChannelBanMessage.cs | 20 +++--- .../Messages/ChannelChatClearMessage.cs | 6 +- .../Messages/ChannelChatClearUserMessage.cs | 6 +- .../Messages/ChannelChatDeleteMessage.cs | 2 +- Twitch/Socket/Messages/ChannelChatMessage.cs | 66 +++++++++---------- .../ChannelCustomRedemptionMessage.cs | 24 +++---- .../Socket/Messages/ChannelFollowMessage.cs | 12 ++-- Twitch/Socket/Messages/ChannelRaidMessage.cs | 12 ++-- .../Messages/ChannelResubscriptionMessage.cs | 2 +- .../Messages/ChannelSubscriptionMessage.cs | 8 +-- Twitch/Socket/Messages/ChatterMessage.cs | 6 +- Twitch/Socket/Messages/NotificationMessage.cs | 8 +-- .../Socket/Messages/SessionWelcomeMessage.cs | 6 +- .../Socket/Messages/TwitchWebsocketMessage.cs | 6 +- Twitch/Socket/TwitchWebsocketClient.cs | 4 +- User.cs | 16 ++--- Veadotube/VeadoInstanceInfo.cs | 4 +- Veadotube/VeadoMessage.cs | 22 +++---- 78 files changed, 314 insertions(+), 235 deletions(-) diff --git a/Chat/Commands/CommandManager.cs b/Chat/Commands/CommandManager.cs index 9d4586c..c0f0735 100644 --- a/Chat/Commands/CommandManager.cs +++ b/Chat/Commands/CommandManager.cs @@ -14,9 +14,8 @@ namespace TwitchChatTTS.Chat.Commands public class CommandManager : ICommandManager { private readonly User _user; - private ICommandSelector _commandSelector; + private ICommandSelector? _commandSelector; private readonly HermesSocketClient _hermes; - //private readonly TwitchWebsocketClient _twitch; private readonly IGroupPermissionManager _permissionManager; private readonly IUsagePolicy _permissionPolicy; private readonly ILogger _logger; @@ -26,7 +25,6 @@ namespace TwitchChatTTS.Chat.Commands public CommandManager( User user, [FromKeyedServices("hermes")] SocketClient hermes, - //[FromKeyedServices("twitch")] SocketClient twitch, IGroupPermissionManager permissionManager, IUsagePolicy limitManager, ILogger logger @@ -34,7 +32,6 @@ namespace TwitchChatTTS.Chat.Commands { _user = user; _hermes = (hermes as HermesSocketClient)!; - //_twitch = (twitch as TwitchWebsocketClient)!; _permissionManager = permissionManager; _permissionPolicy = limitManager; _logger = logger; @@ -43,7 +40,7 @@ namespace TwitchChatTTS.Chat.Commands public async Task Execute(string arg, ChannelChatMessage message, IEnumerable groups) { - if (string.IsNullOrWhiteSpace(arg)) + if (string.IsNullOrWhiteSpace(arg) || _commandSelector == null) return ChatCommandResult.Unknown; arg = arg.Trim(); diff --git a/Chat/Emotes/EmoteDatabase.cs b/Chat/Emotes/EmoteDatabase.cs index cc9cfa0..4752946 100644 --- a/Chat/Emotes/EmoteDatabase.cs +++ b/Chat/Emotes/EmoteDatabase.cs @@ -36,20 +36,20 @@ namespace TwitchChatTTS.Chat.Emotes public class EmoteSet { - public string Id { get; set; } - public string Name { get; set; } + public required string Id { get; set; } + public required string Name { get; set; } public int Flags { get; set; } public bool Immutable { get; set; } public bool Privileged { get; set; } - public IList Emotes { get; set; } + public required IList Emotes { get; set; } public int EmoteCount { get; set; } public int Capacity { get; set; } } public class Emote { - public string Id { get; set; } - public string Name { get; set; } + public required string Id { get; set; } + public required string Name { get; set; } public int Flags { get; set; } } } \ No newline at end of file diff --git a/Hermes/Socket/Handlers/LoginAckHandler.cs b/Hermes/Socket/Handlers/LoginAckHandler.cs index c9cd372..fb96cfb 100644 --- a/Hermes/Socket/Handlers/LoginAckHandler.cs +++ b/Hermes/Socket/Handlers/LoginAckHandler.cs @@ -4,6 +4,7 @@ using CommonSocketLibrary.Abstract; using CommonSocketLibrary.Common; using HermesSocketLibrary.Socket.Data; using Serilog; +using TwitchChatTTS.Bus; namespace TwitchChatTTS.Hermes.Socket.Handlers { @@ -11,13 +12,15 @@ namespace TwitchChatTTS.Hermes.Socket.Handlers { private readonly User _user; private readonly NightbotApiClient _nightbot; + private readonly ServiceBusCentral _bus; private readonly ILogger _logger; public int OperationCode { get; } = 2; - public LoginAckHandler(User user, NightbotApiClient nightbot, ILogger logger) + public LoginAckHandler(User user, NightbotApiClient nightbot, ServiceBusCentral bus, ILogger logger) { _user = user; _nightbot = nightbot; + _bus = bus; _logger = logger; } @@ -51,6 +54,8 @@ namespace TwitchChatTTS.Hermes.Socket.Handlers _user.TwitchConnection = message.Connections.FirstOrDefault(c => c.Default && c.Type == "twitch"); _user.NightbotConnection = message.Connections.FirstOrDefault(c => c.Default && c.Type == "nightbot"); + _bus.Send(this, "twitch id", _user.TwitchUserId); + var filters = message.WordFilters.Where(f => f.Search != null && f.Replace != null).ToList(); foreach (var filter in filters) { diff --git a/Hermes/Socket/Requests/CreatePolicyAck.cs b/Hermes/Socket/Requests/CreatePolicyAck.cs index e077ec7..f1ec60d 100644 --- a/Hermes/Socket/Requests/CreatePolicyAck.cs +++ b/Hermes/Socket/Requests/CreatePolicyAck.cs @@ -22,19 +22,19 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { var policy = JsonSerializer.Deserialize(json, _options); if (policy == null) { - _logger.Warning($"Policy data failed: null"); + _logger.Warning($"Policy JSON data is null."); return; } var group = _groups.Get(policy.GroupId.ToString()); if (group == null) { - _logger.Warning($"Policy data failed: group id not found [group id: {policy.GroupId}][policy id: {policy.Id}]"); + _logger.Warning($"Policy data is failed: group id not found [group id: {policy.GroupId}][policy id: {policy.Id}]"); return; } diff --git a/Hermes/Socket/Requests/CreateRedeemableActionAck.cs b/Hermes/Socket/Requests/CreateRedeemableActionAck.cs index 8aee692..9065e4c 100644 --- a/Hermes/Socket/Requests/CreateRedeemableActionAck.cs +++ b/Hermes/Socket/Requests/CreateRedeemableActionAck.cs @@ -19,8 +19,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Warning($"Redeemable action JSON data received is null."); + return; + } + var action = JsonSerializer.Deserialize(json, _options); if (action == null) { diff --git a/Hermes/Socket/Requests/CreateRedemptionAck.cs b/Hermes/Socket/Requests/CreateRedemptionAck.cs index 929dc49..14839ea 100644 --- a/Hermes/Socket/Requests/CreateRedemptionAck.cs +++ b/Hermes/Socket/Requests/CreateRedemptionAck.cs @@ -19,8 +19,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Warning($"Redemption JSON data received is null."); + return; + } + var redemption = JsonSerializer.Deserialize(json, _options); if (redemption == null) { diff --git a/Hermes/Socket/Requests/CreateTTSFilterAck.cs b/Hermes/Socket/Requests/CreateTTSFilterAck.cs index e5b1722..e6f091b 100644 --- a/Hermes/Socket/Requests/CreateTTSFilterAck.cs +++ b/Hermes/Socket/Requests/CreateTTSFilterAck.cs @@ -19,8 +19,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Warning($"TTS Filter JSON data received is null."); + return; + } + var filter = JsonSerializer.Deserialize(json, _options); if (filter == null) { @@ -40,7 +46,10 @@ namespace TwitchChatTTS.Hermes.Socket.Requests re.Match(string.Empty); filter.Regex = re; } - catch (Exception) { } + catch (Exception) + { + _logger.Warning($"Failed to generate a Regular Expression using '{filter.Search}' [filter id: {filter.Id}]"); + } _logger.Debug($"Filter data [filter id: {filter.Id}][search: {filter.Search}][replace: {filter.Replace}]"); _user.RegexFilters.Add(filter); diff --git a/Hermes/Socket/Requests/CreateTTSUserAck.cs b/Hermes/Socket/Requests/CreateTTSUserAck.cs index 2e63ed6..6878fe9 100644 --- a/Hermes/Socket/Requests/CreateTTSUserAck.cs +++ b/Hermes/Socket/Requests/CreateTTSUserAck.cs @@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/CreateTTSVoiceAck.cs b/Hermes/Socket/Requests/CreateTTSVoiceAck.cs index 885ab91..37437f9 100644 --- a/Hermes/Socket/Requests/CreateTTSVoiceAck.cs +++ b/Hermes/Socket/Requests/CreateTTSVoiceAck.cs @@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/DeletePolicyAck.cs b/Hermes/Socket/Requests/DeletePolicyAck.cs index a1eed48..b1196c7 100644 --- a/Hermes/Socket/Requests/DeletePolicyAck.cs +++ b/Hermes/Socket/Requests/DeletePolicyAck.cs @@ -18,7 +18,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { var data = json.Split('/'); if (data.Length != 2) diff --git a/Hermes/Socket/Requests/DeleteRedeemableActionAck.cs b/Hermes/Socket/Requests/DeleteRedeemableActionAck.cs index 44e2472..15eecf3 100644 --- a/Hermes/Socket/Requests/DeleteRedeemableActionAck.cs +++ b/Hermes/Socket/Requests/DeleteRedeemableActionAck.cs @@ -15,7 +15,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/DeleteRedemptionAck.cs b/Hermes/Socket/Requests/DeleteRedemptionAck.cs index 995f702..d7e3bd0 100644 --- a/Hermes/Socket/Requests/DeleteRedemptionAck.cs +++ b/Hermes/Socket/Requests/DeleteRedemptionAck.cs @@ -15,7 +15,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/DeleteTTSFilterAck.cs b/Hermes/Socket/Requests/DeleteTTSFilterAck.cs index 698c475..1c9affb 100644 --- a/Hermes/Socket/Requests/DeleteTTSFilterAck.cs +++ b/Hermes/Socket/Requests/DeleteTTSFilterAck.cs @@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/DeleteTTSVoiceAck.cs b/Hermes/Socket/Requests/DeleteTTSVoiceAck.cs index 6dffa7b..2732571 100644 --- a/Hermes/Socket/Requests/DeleteTTSVoiceAck.cs +++ b/Hermes/Socket/Requests/DeleteTTSVoiceAck.cs @@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/GetChatterIdsAck.cs b/Hermes/Socket/Requests/GetChatterIdsAck.cs index 9186520..a7d5883 100644 --- a/Hermes/Socket/Requests/GetChatterIdsAck.cs +++ b/Hermes/Socket/Requests/GetChatterIdsAck.cs @@ -17,8 +17,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Warning("Chatters JSON is null."); + return; + } + var chatters = JsonSerializer.Deserialize>(json, _options); if (chatters == null) { diff --git a/Hermes/Socket/Requests/GetConnectionsAck.cs b/Hermes/Socket/Requests/GetConnectionsAck.cs index 9c86bf1..0dccdf9 100644 --- a/Hermes/Socket/Requests/GetConnectionsAck.cs +++ b/Hermes/Socket/Requests/GetConnectionsAck.cs @@ -29,8 +29,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Error("Connections JSON is null."); + return; + } + var connections = JsonSerializer.Deserialize>(json, _options); if (connections == null) { diff --git a/Hermes/Socket/Requests/GetDefaultTTSVoiceAck.cs b/Hermes/Socket/Requests/GetDefaultTTSVoiceAck.cs index f2d2d17..97ebfe4 100644 --- a/Hermes/Socket/Requests/GetDefaultTTSVoiceAck.cs +++ b/Hermes/Socket/Requests/GetDefaultTTSVoiceAck.cs @@ -1,4 +1,3 @@ -using System.Text.Json; using Serilog; namespace TwitchChatTTS.Hermes.Socket.Requests @@ -7,17 +6,15 @@ namespace TwitchChatTTS.Hermes.Socket.Requests { public string Name => "get_default_tts_voice"; private readonly User _user; - private readonly JsonSerializerOptions _options; private readonly ILogger _logger; - public GetDefaultTTSVoiceAck(User user, JsonSerializerOptions options, ILogger logger) + public GetDefaultTTSVoiceAck(User user, ILogger logger) { _user = user; - _options = options; _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { string? defaultVoice = json; if (defaultVoice != null) diff --git a/Hermes/Socket/Requests/GetEmotesAck.cs b/Hermes/Socket/Requests/GetEmotesAck.cs index d36e75c..90ddd34 100644 --- a/Hermes/Socket/Requests/GetEmotesAck.cs +++ b/Hermes/Socket/Requests/GetEmotesAck.cs @@ -19,8 +19,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Warning("Emotes JSON is null."); + return; + } + var data = JsonSerializer.Deserialize>(json, _options); if (data == null) { diff --git a/Hermes/Socket/Requests/GetEnabledTTSVoices.cs b/Hermes/Socket/Requests/GetEnabledTTSVoices.cs index 88e62a9..5147a3b 100644 --- a/Hermes/Socket/Requests/GetEnabledTTSVoices.cs +++ b/Hermes/Socket/Requests/GetEnabledTTSVoices.cs @@ -17,8 +17,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Warning("TTS Voices JSON is null."); + return; + } + var enabledTTSVoices = JsonSerializer.Deserialize>(json, _options); if (enabledTTSVoices == null) { diff --git a/Hermes/Socket/Requests/GetPermissionsAck.cs b/Hermes/Socket/Requests/GetPermissionsAck.cs index 06a305d..b747633 100644 --- a/Hermes/Socket/Requests/GetPermissionsAck.cs +++ b/Hermes/Socket/Requests/GetPermissionsAck.cs @@ -26,12 +26,18 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Error("Failed to load groups & permissions: JSON is null."); + return; + } + var groupInfo = JsonSerializer.Deserialize(json, _options); if (groupInfo == null) { - _logger.Error("Failed to load groups & permissions."); + _logger.Error("Failed to load groups & permissions: object is null."); return; } diff --git a/Hermes/Socket/Requests/GetPoliciesAck.cs b/Hermes/Socket/Requests/GetPoliciesAck.cs index 3240d0a..a49f019 100644 --- a/Hermes/Socket/Requests/GetPoliciesAck.cs +++ b/Hermes/Socket/Requests/GetPoliciesAck.cs @@ -26,12 +26,18 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) + { + _logger.Error($"No policies have been found: JSON is null."); + return; + } + var policies = JsonSerializer.Deserialize>(json, _options); if (policies == null || !policies.Any()) { - _logger.Error($"No policies have been found."); + _logger.Error($"No policies have been found: object is null or empty."); return; } diff --git a/Hermes/Socket/Requests/GetRedeemableActionsAck.cs b/Hermes/Socket/Requests/GetRedeemableActionsAck.cs index 54b9dfd..3a8c223 100644 --- a/Hermes/Socket/Requests/GetRedeemableActionsAck.cs +++ b/Hermes/Socket/Requests/GetRedeemableActionsAck.cs @@ -23,7 +23,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/GetRedemptionsAck.cs b/Hermes/Socket/Requests/GetRedemptionsAck.cs index ac53b67..1e91a88 100644 --- a/Hermes/Socket/Requests/GetRedemptionsAck.cs +++ b/Hermes/Socket/Requests/GetRedemptionsAck.cs @@ -23,7 +23,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { HermesRequestData? hermesRequestData = null; if (!string.IsNullOrEmpty(requestId)) diff --git a/Hermes/Socket/Requests/GetTTSUsersAck.cs b/Hermes/Socket/Requests/GetTTSUsersAck.cs index 66d1228..b8546d8 100644 --- a/Hermes/Socket/Requests/GetTTSUsersAck.cs +++ b/Hermes/Socket/Requests/GetTTSUsersAck.cs @@ -18,7 +18,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { var users = JsonSerializer.Deserialize>(json, _options); if (users == null) diff --git a/Hermes/Socket/Requests/GetTTSVoicesAck.cs b/Hermes/Socket/Requests/GetTTSVoicesAck.cs index 5f1e360..d43648f 100644 --- a/Hermes/Socket/Requests/GetTTSVoicesAck.cs +++ b/Hermes/Socket/Requests/GetTTSVoicesAck.cs @@ -19,7 +19,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { var voices = JsonSerializer.Deserialize>(json, _options); if (voices == null) diff --git a/Hermes/Socket/Requests/GetTTSWordFiltersAck.cs b/Hermes/Socket/Requests/GetTTSWordFiltersAck.cs index 11f71a3..72a194a 100644 --- a/Hermes/Socket/Requests/GetTTSWordFiltersAck.cs +++ b/Hermes/Socket/Requests/GetTTSWordFiltersAck.cs @@ -19,7 +19,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { var wordFilters = JsonSerializer.Deserialize>(json, _options); if (wordFilters == null) diff --git a/Hermes/Socket/Requests/IRequestAck.cs b/Hermes/Socket/Requests/IRequestAck.cs index f5657b0..9b3bb2b 100644 --- a/Hermes/Socket/Requests/IRequestAck.cs +++ b/Hermes/Socket/Requests/IRequestAck.cs @@ -3,6 +3,6 @@ namespace TwitchChatTTS.Hermes.Socket.Requests public interface IRequestAck { string Name { get; } - void Acknowledge(string requestId, string json, IDictionary? requestData); + void Acknowledge(string requestId, string? json, IDictionary? requestData); } } \ No newline at end of file diff --git a/Hermes/Socket/Requests/RequestAckManager.cs b/Hermes/Socket/Requests/RequestAckManager.cs index 6d91d0c..eb50a5a 100644 --- a/Hermes/Socket/Requests/RequestAckManager.cs +++ b/Hermes/Socket/Requests/RequestAckManager.cs @@ -13,7 +13,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Fulfill(string type, string requestId, string data, IDictionary? requestData) + public void Fulfill(string type, string requestId, string? data, IDictionary? requestData) { if (!_acknowledgements.TryGetValue(type, out var ack)) { diff --git a/Hermes/Socket/Requests/UpdateDefaultTTSVoiceAck.cs b/Hermes/Socket/Requests/UpdateDefaultTTSVoiceAck.cs index 1650ab2..64f9095 100644 --- a/Hermes/Socket/Requests/UpdateDefaultTTSVoiceAck.cs +++ b/Hermes/Socket/Requests/UpdateDefaultTTSVoiceAck.cs @@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/UpdatePolicyAck.cs b/Hermes/Socket/Requests/UpdatePolicyAck.cs index 8b626be..c2f75a1 100644 --- a/Hermes/Socket/Requests/UpdatePolicyAck.cs +++ b/Hermes/Socket/Requests/UpdatePolicyAck.cs @@ -22,7 +22,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { var policy = JsonSerializer.Deserialize(json, _options); if (policy == null) diff --git a/Hermes/Socket/Requests/UpdateRedeemableActionAck.cs b/Hermes/Socket/Requests/UpdateRedeemableActionAck.cs index c989036..03adf76 100644 --- a/Hermes/Socket/Requests/UpdateRedeemableActionAck.cs +++ b/Hermes/Socket/Requests/UpdateRedeemableActionAck.cs @@ -19,7 +19,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { var action = JsonSerializer.Deserialize(json, _options); if (action == null) diff --git a/Hermes/Socket/Requests/UpdateRedeemptionAck.cs b/Hermes/Socket/Requests/UpdateRedeemptionAck.cs index f5cdea7..be2d544 100644 --- a/Hermes/Socket/Requests/UpdateRedeemptionAck.cs +++ b/Hermes/Socket/Requests/UpdateRedeemptionAck.cs @@ -19,8 +19,13 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { + if (json == null) { + _logger.Warning($"Redemption JSON data received is null."); + return; + } + var redemption = JsonSerializer.Deserialize(json, _options); if (redemption == null) { diff --git a/Hermes/Socket/Requests/UpdateTTSFilterAck.cs b/Hermes/Socket/Requests/UpdateTTSFilterAck.cs index 30c7875..9ef5787 100644 --- a/Hermes/Socket/Requests/UpdateTTSFilterAck.cs +++ b/Hermes/Socket/Requests/UpdateTTSFilterAck.cs @@ -19,7 +19,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { var filter = JsonSerializer.Deserialize(json, _options); if (filter == null) diff --git a/Hermes/Socket/Requests/UpdateTTSUserAck.cs b/Hermes/Socket/Requests/UpdateTTSUserAck.cs index dfe2e87..e52f259 100644 --- a/Hermes/Socket/Requests/UpdateTTSUserAck.cs +++ b/Hermes/Socket/Requests/UpdateTTSUserAck.cs @@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/UpdateTTSVoiceAck.cs b/Hermes/Socket/Requests/UpdateTTSVoiceAck.cs index b82d5dc..814c824 100644 --- a/Hermes/Socket/Requests/UpdateTTSVoiceAck.cs +++ b/Hermes/Socket/Requests/UpdateTTSVoiceAck.cs @@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/Socket/Requests/UpdateTTSVoiceStateAck.cs b/Hermes/Socket/Requests/UpdateTTSVoiceStateAck.cs index 1436136..c94a46c 100644 --- a/Hermes/Socket/Requests/UpdateTTSVoiceStateAck.cs +++ b/Hermes/Socket/Requests/UpdateTTSVoiceStateAck.cs @@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests _logger = logger; } - public void Acknowledge(string requestId, string json, IDictionary? requestData) + public void Acknowledge(string requestId, string? json, IDictionary? requestData) { if (requestData == null) { diff --git a/Hermes/TTSVersion.cs b/Hermes/TTSVersion.cs index 355d95d..04779d0 100644 --- a/Hermes/TTSVersion.cs +++ b/Hermes/TTSVersion.cs @@ -4,7 +4,7 @@ namespace TwitchChatTTS.Hermes { public int MajorVersion { get; set; } public int MinorVersion { get; set; } - public string Download { get; set; } - public string Changelog { get; set; } + public required string Download { get; set; } + public required string Changelog { get; set; } } } \ No newline at end of file diff --git a/OBS/Socket/Data/EventMessage.cs b/OBS/Socket/Data/EventMessage.cs index 28e075d..16a4a06 100644 --- a/OBS/Socket/Data/EventMessage.cs +++ b/OBS/Socket/Data/EventMessage.cs @@ -2,8 +2,8 @@ namespace TwitchChatTTS.OBS.Socket.Data { public class EventMessage { - public string EventType { get; set; } + public required string EventType { get; set; } public int EventIntent { get; set; } - public Dictionary EventData { get; set; } + public required Dictionary EventData { get; set; } } } \ No newline at end of file diff --git a/OBS/Socket/Data/HelloMessage.cs b/OBS/Socket/Data/HelloMessage.cs index 4217e5f..55bd4b8 100644 --- a/OBS/Socket/Data/HelloMessage.cs +++ b/OBS/Socket/Data/HelloMessage.cs @@ -2,13 +2,13 @@ namespace TwitchChatTTS.OBS.Socket.Data { public class HelloMessage { - public string ObsWebSocketVersion { get; set; } + public required string ObsWebSocketVersion { get; set; } public int RpcVersion { get; set; } - public AuthenticationMessage Authentication { get; set; } + public required AuthenticationMessage Authentication { get; set; } } public class AuthenticationMessage { - public string Challenge { get; set; } - public string Salt { get; set; } + public required string Challenge { get; set; } + public required string Salt { get; set; } } } \ No newline at end of file diff --git a/OBS/Socket/Data/OBSSceneItem.cs b/OBS/Socket/Data/OBSSceneItem.cs index 0a58a40..c6959ef 100644 --- a/OBS/Socket/Data/OBSSceneItem.cs +++ b/OBS/Socket/Data/OBSSceneItem.cs @@ -2,9 +2,9 @@ namespace TwitchChatTTS.OBS.Socket.Data { public class OBSSceneItem { - public string SourceUuid { get; set; } - public string SourceName { get; set; } - public string SourceType { get; set; } + public required string SourceUuid { get; set; } + public required string SourceName { get; set; } + public required string SourceType { get; set; } public int SceneItemId { get; set; } } } \ No newline at end of file diff --git a/OBS/Socket/Data/RequestBatchMessage.cs b/OBS/Socket/Data/RequestBatchMessage.cs index ced8708..aced93b 100644 --- a/OBS/Socket/Data/RequestBatchMessage.cs +++ b/OBS/Socket/Data/RequestBatchMessage.cs @@ -1,5 +1,3 @@ -using Newtonsoft.Json; - namespace TwitchChatTTS.OBS.Socket.Data { public class RequestBatchMessage diff --git a/OBS/Socket/Data/RequestBatchResponseMessage.cs b/OBS/Socket/Data/RequestBatchResponseMessage.cs index bc82cf8..82def5b 100644 --- a/OBS/Socket/Data/RequestBatchResponseMessage.cs +++ b/OBS/Socket/Data/RequestBatchResponseMessage.cs @@ -2,7 +2,7 @@ namespace TwitchChatTTS.OBS.Socket.Data { public class RequestBatchResponseMessage { - public string RequestId { get; set; } - public IEnumerable Results { get; set; } + public required string RequestId { get; set; } + public required IEnumerable Results { get; set; } } } \ No newline at end of file diff --git a/OBS/Socket/Data/RequestMessage.cs b/OBS/Socket/Data/RequestMessage.cs index e9bbe08..f2b0786 100644 --- a/OBS/Socket/Data/RequestMessage.cs +++ b/OBS/Socket/Data/RequestMessage.cs @@ -3,7 +3,7 @@ namespace TwitchChatTTS.OBS.Socket.Data public class RequestMessage { public string RequestType { get; set; } - public string RequestId { get; set; } + public string? RequestId { get; set; } public Dictionary RequestData { get; set; } public RequestMessage(string type, string id, Dictionary data) diff --git a/OBS/Socket/Data/RequestResponseMessage.cs b/OBS/Socket/Data/RequestResponseMessage.cs index 71e569c..c7dab00 100644 --- a/OBS/Socket/Data/RequestResponseMessage.cs +++ b/OBS/Socket/Data/RequestResponseMessage.cs @@ -1,12 +1,10 @@ -using Newtonsoft.Json; - namespace TwitchChatTTS.OBS.Socket.Data { public class RequestResponseMessage { - public string RequestType { get; set; } - public string RequestId { get; set; } - public object RequestStatus { get; set; } - public Dictionary ResponseData { get; set; } + public required string RequestType { get; set; } + public required string RequestId { get; set; } + public required object RequestStatus { get; set; } + public required Dictionary ResponseData { get; set; } } } \ No newline at end of file diff --git a/OBS/Socket/Data/TransformationData.cs b/OBS/Socket/Data/TransformationData.cs index 559af9f..f9a9efc 100644 --- a/OBS/Socket/Data/TransformationData.cs +++ b/OBS/Socket/Data/TransformationData.cs @@ -5,7 +5,7 @@ namespace TwitchChatTTS.OBS.Socket.Data public int Alignment { get; set; } public int BoundsAlignment { get; set; } public double BoundsHeight { get; set; } - public string BoundsType { get; set; } + public required string BoundsType { get; set; } public double BoundsWidth { get; set; } public int CropBottom { get; set; } public int CropLeft { get; set; } diff --git a/Seven/SevenApiClient.cs b/Seven/SevenApiClient.cs index 88745c3..9b7c680 100644 --- a/Seven/SevenApiClient.cs +++ b/Seven/SevenApiClient.cs @@ -23,10 +23,17 @@ public class SevenApiClient }); } - public async Task FetchChannelEmoteSet(string twitchId) + public async Task FetchChannelEmoteSet(long twitchId) { + if (twitchId <= 0) + { + _logger.Warning("No valid Twitch Id was given for 7tv emotes."); + return null; + } + try { + _logger.Debug($"Fetching 7tv information using Twitch Id [twitch id: {twitchId}]"); var details = await _web.GetJson($"{API_URL}/users/twitch/" + twitchId); return details?.EmoteSet; } diff --git a/Seven/Socket/Data/ChangeMapMessage.cs b/Seven/Socket/Data/ChangeMapMessage.cs index f329fe4..2ea1bd9 100644 --- a/Seven/Socket/Data/ChangeMapMessage.cs +++ b/Seven/Socket/Data/ChangeMapMessage.cs @@ -2,10 +2,10 @@ namespace TwitchChatTTS.Seven.Socket.Data { public class ChangeMapMessage { - public object Id { get; set; } + public required object Id { get; set; } public byte Kind { get; set; } public bool? Contextual { get; set; } - public object Actor { get; set; } + public required object Actor { get; set; } public IEnumerable? Added { get; set; } public IEnumerable? Updated { get; set; } public IEnumerable? Removed { get; set; } @@ -14,17 +14,17 @@ namespace TwitchChatTTS.Seven.Socket.Data } public class ChangeField { - public string Key { get; set; } + public required string Key { get; set; } public int? Index { get; set; } public bool Nested { get; set; } - public object OldValue { get; set; } - public object Value { get; set; } + public required object OldValue { get; set; } + public required object Value { get; set; } } public class EmoteField { - public string Id { get; set; } - public string Name { get; set; } - public string ActorId { get; set; } + public required string Id { get; set; } + public required string Name { get; set; } + public required string ActorId { get; set; } public int Flags { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Data/DispatchMessage.cs b/Seven/Socket/Data/DispatchMessage.cs index 6742f8d..eceee16 100644 --- a/Seven/Socket/Data/DispatchMessage.cs +++ b/Seven/Socket/Data/DispatchMessage.cs @@ -2,7 +2,7 @@ namespace TwitchChatTTS.Seven.Socket.Data { public class DispatchMessage { - public object EventType { get; set; } - public ChangeMapMessage Body { get; set; } + public required object EventType { get; set; } + public required ChangeMapMessage Body { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Data/EndOfStreamMessage.cs b/Seven/Socket/Data/EndOfStreamMessage.cs index e25b1da..0d8d49b 100644 --- a/Seven/Socket/Data/EndOfStreamMessage.cs +++ b/Seven/Socket/Data/EndOfStreamMessage.cs @@ -3,6 +3,6 @@ namespace TwitchChatTTS.Seven.Socket.Data public class EndOfStreamMessage { public int Code { get; set; } - public string Message { get; set; } + public required string Message { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Data/ErrorMessage.cs b/Seven/Socket/Data/ErrorMessage.cs index 6a9d9d4..7e27b1f 100644 --- a/Seven/Socket/Data/ErrorMessage.cs +++ b/Seven/Socket/Data/ErrorMessage.cs @@ -2,7 +2,7 @@ namespace TwitchChatTTS.Seven.Socket.Data { public class ErrorMessage { - public Exception Exception { get; set; } - public string Message { get; set; } + public Exception? Exception { get; set; } + public string? Message { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Data/ReconnectMessage.cs b/Seven/Socket/Data/ReconnectMessage.cs index c32c3e6..c7ff9be 100644 --- a/Seven/Socket/Data/ReconnectMessage.cs +++ b/Seven/Socket/Data/ReconnectMessage.cs @@ -2,6 +2,6 @@ namespace TwitchChatTTS.Seven.Socket.Data { public class ReconnectMessage { - public string Reason { get; set; } + public required string Reason { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Data/ResumeMessage.cs b/Seven/Socket/Data/ResumeMessage.cs index 3161b60..f844804 100644 --- a/Seven/Socket/Data/ResumeMessage.cs +++ b/Seven/Socket/Data/ResumeMessage.cs @@ -2,6 +2,6 @@ namespace TwitchChatTTS.Seven.Socket.Data { public class ResumeMessage { - public string SessionId { get; set; } + public required string SessionId { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Data/SevenHelloMessage.cs b/Seven/Socket/Data/SevenHelloMessage.cs index 3fc6dd0..ff11cc7 100644 --- a/Seven/Socket/Data/SevenHelloMessage.cs +++ b/Seven/Socket/Data/SevenHelloMessage.cs @@ -3,7 +3,7 @@ namespace TwitchChatTTS.Seven.Socket.Data public class SevenHelloMessage { public uint HeartbeatInterval { get; set; } - public string SessionId { get; set; } + public required string SessionId { get; set; } public int SubscriptionLimit { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Data/SubscribeMessage.cs b/Seven/Socket/Data/SubscribeMessage.cs index 51418d8..17a6cdd 100644 --- a/Seven/Socket/Data/SubscribeMessage.cs +++ b/Seven/Socket/Data/SubscribeMessage.cs @@ -2,7 +2,7 @@ namespace TwitchChatTTS.Seven.Socket.Data { public class SubscribeMessage { - public string? Type { get; set; } + public required string Type { get; set; } public IDictionary? Condition { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Data/UnsubscribeMessage.cs b/Seven/Socket/Data/UnsubscribeMessage.cs index c303562..e3f4263 100644 --- a/Seven/Socket/Data/UnsubscribeMessage.cs +++ b/Seven/Socket/Data/UnsubscribeMessage.cs @@ -2,7 +2,7 @@ namespace TwitchChatTTS.Seven.Socket.Data { public class UnsubscribeMessage { - public string Type { get; set; } + public required string Type { get; set; } public IDictionary? Condition { get; set; } } } \ No newline at end of file diff --git a/Seven/Socket/Handlers/EndOfStreamHandler.cs b/Seven/Socket/Handlers/EndOfStreamHandler.cs index a700ba7..9f8d4de 100644 --- a/Seven/Socket/Handlers/EndOfStreamHandler.cs +++ b/Seven/Socket/Handlers/EndOfStreamHandler.cs @@ -15,7 +15,7 @@ namespace TwitchChatTTS.Seven.Socket.Handlers return; var code = message.Code - 4000; - await sender.DisconnectAsync(new SocketDisconnectionEventArgs(WebSocketCloseStatus.Empty.ToString(), code.ToString())); + await sender.DisconnectAsync(new SocketDisconnectionEventArgs(message.Message, code.ToString())); } } } \ No newline at end of file diff --git a/Seven/Socket/Handlers/ErrorHandler.cs b/Seven/Socket/Handlers/ErrorHandler.cs index 239ad3e..607c2d3 100644 --- a/Seven/Socket/Handlers/ErrorHandler.cs +++ b/Seven/Socket/Handlers/ErrorHandler.cs @@ -17,13 +17,13 @@ namespace TwitchChatTTS.Seven.Socket.Handlers public Task Execute(SocketClient sender, Data data) { - if (data is not ErrorMessage message || message == null) + if (data is not ErrorMessage message || message == null || message.Exception == null && message.Message == null) return Task.CompletedTask; if (message.Exception != null) - _logger.Error(message.Exception, message.Message); + _logger.Error(message.Exception, message.Message ?? string.Empty); else - _logger.Error(message.Message); + _logger.Error(message.Message!); return Task.CompletedTask; } } diff --git a/Seven/UserDetails.cs b/Seven/UserDetails.cs index a194de1..f8e325f 100644 --- a/Seven/UserDetails.cs +++ b/Seven/UserDetails.cs @@ -4,18 +4,18 @@ namespace TwitchChatTTS.Seven { public class UserDetails { - public string Id { get; set; } - public string Platform { get; set; } - public string Username { get; set; } + public required string Id { get; set; } + public required string Platform { get; set; } + public required string DisplayName { get; set; } public int EmoteCapacity { get; set; } - public string EmoteSetId { get; set; } - public EmoteSet EmoteSet { get; set; } - public SevenUser User { get; set; } + public required string EmoteSetId { get; set; } + public required EmoteSet EmoteSet { get; set; } + public required SevenUser User { get; set; } } public class SevenUser { - public string Id { get; set; } - public string Username { get; set; } + public required string Id { get; set; } + public required string Username { get; set; } } } \ No newline at end of file diff --git a/TTS.cs b/TTS.cs index f694bba..7548113 100644 --- a/TTS.cs +++ b/TTS.cs @@ -15,6 +15,8 @@ using TwitchChatTTS.Chat.Commands; using System.Text; using TwitchChatTTS.Chat.Speech; using TwitchChatTTS.Veadotube; +using TwitchChatTTS.Bus; +using System.Reactive.Linq; namespace TwitchChatTTS { @@ -36,6 +38,7 @@ namespace TwitchChatTTS private readonly IEmoteDatabase _emotes; private readonly TTSPlayer _player; private readonly AudioPlaybackEngine _playback; + private readonly ServiceBusCentral _bus; private readonly Configuration _configuration; private readonly ILogger _logger; @@ -53,6 +56,7 @@ namespace TwitchChatTTS IEmoteDatabase emotes, TTSPlayer player, AudioPlaybackEngine playback, + ServiceBusCentral bus, Configuration configuration, ILogger logger ) @@ -68,9 +72,10 @@ namespace TwitchChatTTS _commandFactory = commandFactory; _commandManager = commandManager; _emotes = emotes; - _configuration = configuration; _player = player; _playback = playback; + _bus = bus; + _configuration = configuration; _logger = logger; } @@ -108,6 +113,22 @@ namespace TwitchChatTTS _logger.Warning("Failed to check for version updates."); } + // 7tv + var twitchTopic = _bus.GetTopic("twitch id"); + twitchTopic.FirstAsync().Subscribe(async (data) => + { + var twitchId = data.Value?.ToString(); + if (twitchId == null) + return; + + var emoteSet = await _sevenApiClient.FetchChannelEmoteSet(_user.TwitchUserId); + if (emoteSet != null) + _user.SevenEmoteSetId = emoteSet.Id; + + await InitializeEmotes(_sevenApiClient, emoteSet); + await InitializeSevenTv(); + }); + await InitializeHermesWebsocket(); _playback.AddOnMixerInputEnded((object? s, SampleProviderEventArgs e) => @@ -139,14 +160,8 @@ namespace TwitchChatTTS return; } - var emoteSet = await _sevenApiClient.FetchChannelEmoteSet(_user.TwitchUserId.ToString()); - if (emoteSet != null) - _user.SevenEmoteSetId = emoteSet.Id; - _commandManager.Update(_commandFactory); - await InitializeEmotes(_sevenApiClient, emoteSet); - await InitializeSevenTv(); await InitializeObs(); } diff --git a/Twitch/Socket/Messages/ChannelAdBreakMessage.cs b/Twitch/Socket/Messages/ChannelAdBreakMessage.cs index d3f570d..5f176d2 100644 --- a/Twitch/Socket/Messages/ChannelAdBreakMessage.cs +++ b/Twitch/Socket/Messages/ChannelAdBreakMessage.cs @@ -5,11 +5,11 @@ namespace TwitchChatTTS.Twitch.Socket.Messages public int DurationSeconds { get; set; } public DateTime StartedAt { get; set; } public bool IsAutomatic { get; set; } - public string BroadcasterUserId { get; set; } - public string BroadcasterUserLogin { get; set; } - public string BroadcasterUserName { get; set; } - public string RequesterUserId { get; set; } - public string RequesterUserLogin { get; set; } - public string RequesterUserName { get; set; } + public required string BroadcasterUserId { get; set; } + public required string BroadcasterUserLogin { get; set; } + public required string BroadcasterUserName { get; set; } + public required string RequesterUserId { get; set; } + public required string RequesterUserLogin { get; set; } + public required string RequesterUserName { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/ChannelBanMessage.cs b/Twitch/Socket/Messages/ChannelBanMessage.cs index 236f26e..d310b2a 100644 --- a/Twitch/Socket/Messages/ChannelBanMessage.cs +++ b/Twitch/Socket/Messages/ChannelBanMessage.cs @@ -2,16 +2,16 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelBanMessage { - public string UserId { get; set; } - public string UserLogin { get; set; } - public string UserName { get; set; } - public string BroadcasterUserId { get; set; } - public string BroadcasterUserLogin { get; set; } - public string BroadcasterUserName { get; set; } - public string ModeratorUserId { get; set; } - public string ModeratorUserLogin { get; set; } - public string ModeratorUserName { get; set; } - public string Reason { get; set; } + public required string UserId { get; set; } + public required string UserLogin { get; set; } + public required string UserName { get; set; } + public required string BroadcasterUserId { get; set; } + public required string BroadcasterUserLogin { get; set; } + public required string BroadcasterUserName { get; set; } + public required string ModeratorUserId { get; set; } + public required string ModeratorUserLogin { get; set; } + public required string ModeratorUserName { get; set; } + public required string Reason { get; set; } public DateTime BannedAt { get; set; } public DateTime? EndsAt { get; set; } public bool IsPermanent { get; set; } diff --git a/Twitch/Socket/Messages/ChannelChatClearMessage.cs b/Twitch/Socket/Messages/ChannelChatClearMessage.cs index 2aeaf3e..9c0086f 100644 --- a/Twitch/Socket/Messages/ChannelChatClearMessage.cs +++ b/Twitch/Socket/Messages/ChannelChatClearMessage.cs @@ -2,8 +2,8 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelChatClearMessage { - public string BroadcasterUserId { get; set; } - public string BroadcasterUserLogin { get; set; } - public string BroadcasterUserName { get; set; } + public required string BroadcasterUserId { get; set; } + public required string BroadcasterUserLogin { get; set; } + public required string BroadcasterUserName { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/ChannelChatClearUserMessage.cs b/Twitch/Socket/Messages/ChannelChatClearUserMessage.cs index c2b67a5..4e45ada 100644 --- a/Twitch/Socket/Messages/ChannelChatClearUserMessage.cs +++ b/Twitch/Socket/Messages/ChannelChatClearUserMessage.cs @@ -2,8 +2,8 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelChatClearUserMessage : ChannelChatClearMessage { - public string TargetUserId { get; set; } - public string TargetUserLogin { get; set; } - public string TargetUserName { get; set; } + public required string TargetUserId { get; set; } + public required string TargetUserLogin { get; set; } + public required string TargetUserName { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/ChannelChatDeleteMessage.cs b/Twitch/Socket/Messages/ChannelChatDeleteMessage.cs index 41f16cc..2e3aad3 100644 --- a/Twitch/Socket/Messages/ChannelChatDeleteMessage.cs +++ b/Twitch/Socket/Messages/ChannelChatDeleteMessage.cs @@ -2,6 +2,6 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelChatDeleteMessage : ChannelChatClearUserMessage { - public string MessageId { get; set; } + public required string MessageId { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/ChannelChatMessage.cs b/Twitch/Socket/Messages/ChannelChatMessage.cs index 27b42e1..3edf8bc 100644 --- a/Twitch/Socket/Messages/ChannelChatMessage.cs +++ b/Twitch/Socket/Messages/ChannelChatMessage.cs @@ -2,16 +2,16 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelChatMessage { - public string BroadcasterUserId { get; set; } - public string BroadcasterUserLogin { get; set; } - public string BroadcasterUserName { get; set; } - public string ChatterUserId { get; set; } - public string ChatterUserLogin { get; set; } - public string ChatterUserName { get; set; } - public string MessageId { get; set; } - public TwitchChatMessageInfo Message { get; set; } - public string MessageType { get; set; } - public TwitchBadge[] Badges { get; set; } + public required string BroadcasterUserId { get; set; } + public required string BroadcasterUserLogin { get; set; } + public required string BroadcasterUserName { get; set; } + public required string ChatterUserId { get; set; } + public required string ChatterUserLogin { get; set; } + public required string ChatterUserName { get; set; } + public required string MessageId { get; set; } + public required TwitchChatMessageInfo Message { get; set; } + public required string MessageType { get; set; } + public required TwitchBadge[] Badges { get; set; } public TwitchReplyInfo? Reply { get; set; } public string? ChannelPointsCustomRewardId { get; set; } public string? ChannelPointsAnimationId { get; set; } @@ -19,14 +19,14 @@ namespace TwitchChatTTS.Twitch.Socket.Messages public class TwitchChatMessageInfo { - public string Text { get; set; } - public TwitchChatFragment[] Fragments { get; set; } + public required string Text { get; set; } + public required TwitchChatFragment[] Fragments { get; set; } } public class TwitchChatFragment { - public string Type { get; set; } - public string Text { get; set; } + public required string Type { get; set; } + public required string Text { get; set; } public TwitchCheerInfo? Cheermote { get; set; } public TwitchEmoteInfo? Emote { get; set; } public TwitchMentionInfo? Mention { get; set; } @@ -34,42 +34,42 @@ namespace TwitchChatTTS.Twitch.Socket.Messages public class TwitchCheerInfo { - public string Prefix { get; set; } + public required string Prefix { get; set; } public int Bits { get; set; } public int Tier { get; set; } } public class TwitchEmoteInfo { - public string Id { get; set; } - public string EmoteSetId { get; set; } - public string OwnerId { get; set; } - public string[] Format { get; set; } + public required string Id { get; set; } + public required string EmoteSetId { get; set; } + public required string OwnerId { get; set; } + public required string[] Format { get; set; } } public class TwitchMentionInfo { - public string UserId { get; set; } - public string UserName { get; set; } - public string UserLogin { get; set; } + public required string UserId { get; set; } + public required string UserName { get; set; } + public required string UserLogin { get; set; } } public class TwitchBadge { - public string SetId { get; set; } - public string Id { get; set; } - public string Info { get; set; } + public required string SetId { get; set; } + public required string Id { get; set; } + public required string Info { get; set; } } public class TwitchReplyInfo { - public string ParentMessageId { get; set; } - public string ParentMessageBody { get; set; } - public string ParentUserId { get; set; } - public string ParentUserName { get; set; } - public string ParentUserLogin { get; set; } - public string ThreadMessageId { get; set; } - public string ThreadUserName { get; set; } - public string ThreadUserLogin { get; set; } + public required string ParentMessageId { get; set; } + public required string ParentMessageBody { get; set; } + public required string ParentUserId { get; set; } + public required string ParentUserName { get; set; } + public required string ParentUserLogin { get; set; } + public required string ThreadMessageId { get; set; } + public required string ThreadUserName { get; set; } + public required string ThreadUserLogin { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/ChannelCustomRedemptionMessage.cs b/Twitch/Socket/Messages/ChannelCustomRedemptionMessage.cs index 2bf1bed..f643fdd 100644 --- a/Twitch/Socket/Messages/ChannelCustomRedemptionMessage.cs +++ b/Twitch/Socket/Messages/ChannelCustomRedemptionMessage.cs @@ -2,23 +2,23 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelCustomRedemptionMessage { - public string BroadcasterUserId { get; set; } - public string BroadcasterUserLogin { get; set; } - public string BroadcasterUserName { get; set; } - public string Id { get; set; } - public string UserId { get; set; } - public string UserLogin { get; set; } - public string UserName { get; set; } - public string Status { get; set; } + public required string BroadcasterUserId { get; set; } + public required string BroadcasterUserLogin { get; set; } + public required string BroadcasterUserName { get; set; } + public required string Id { get; set; } + public required string UserId { get; set; } + public required string UserLogin { get; set; } + public required string UserName { get; set; } + public required string Status { get; set; } public DateTime RedeemedAt { get; set; } - public RedemptionReward Reward { get; set; } + public required RedemptionReward Reward { get; set; } } public class RedemptionReward { - public string Id { get; set; } - public string Title { get; set; } - public string Prompt { get; set; } + public required string Id { get; set; } + public required string Title { get; set; } + public required string Prompt { get; set; } public int Cost { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/ChannelFollowMessage.cs b/Twitch/Socket/Messages/ChannelFollowMessage.cs index 3522087..1a4cb6b 100644 --- a/Twitch/Socket/Messages/ChannelFollowMessage.cs +++ b/Twitch/Socket/Messages/ChannelFollowMessage.cs @@ -2,12 +2,12 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelFollowMessage { - public string BroadcasterUserId { get; set; } - public string BroadcasterUserLogin { get; set; } - public string BroadcasterUserName { get; set; } - public string UserId { get; set; } - public string UserLogin { get; set; } - public string UserName { get; set; } + public required string BroadcasterUserId { get; set; } + public required string BroadcasterUserLogin { get; set; } + public required string BroadcasterUserName { get; set; } + public required string UserId { get; set; } + public required string UserLogin { get; set; } + public required string UserName { get; set; } public DateTime FollowedAt { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/ChannelRaidMessage.cs b/Twitch/Socket/Messages/ChannelRaidMessage.cs index 0e26d36..03e3390 100644 --- a/Twitch/Socket/Messages/ChannelRaidMessage.cs +++ b/Twitch/Socket/Messages/ChannelRaidMessage.cs @@ -2,12 +2,12 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelRaidMessage { - public string FromBroadcasterUserId { get; set; } - public string FromBroadcasterUserLogin { get; set; } - public string FromBroadcasterUserName { get; set; } - public string ToBroadcasterUserId { get; set; } - public string ToBroadcasterUserLogin { get; set; } - public string ToBroadcasterUserName { get; set; } + public required string FromBroadcasterUserId { get; set; } + public required string FromBroadcasterUserLogin { get; set; } + public required string FromBroadcasterUserName { get; set; } + public required string ToBroadcasterUserId { get; set; } + public required string ToBroadcasterUserLogin { get; set; } + public required string ToBroadcasterUserName { get; set; } public int Viewers { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/ChannelResubscriptionMessage.cs b/Twitch/Socket/Messages/ChannelResubscriptionMessage.cs index 405f03f..4ed125c 100644 --- a/Twitch/Socket/Messages/ChannelResubscriptionMessage.cs +++ b/Twitch/Socket/Messages/ChannelResubscriptionMessage.cs @@ -2,7 +2,7 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChannelResubscriptionMessage : ChannelSubscriptionData { - public TwitchChatMessageInfo Message { get; set; } + public required TwitchChatMessageInfo Message { get; set; } public int CumulativeMonths { get; set; } public int StreakMonths { get; set; } public int DurationMonths { get; set; } diff --git a/Twitch/Socket/Messages/ChannelSubscriptionMessage.cs b/Twitch/Socket/Messages/ChannelSubscriptionMessage.cs index ef87e58..840696c 100644 --- a/Twitch/Socket/Messages/ChannelSubscriptionMessage.cs +++ b/Twitch/Socket/Messages/ChannelSubscriptionMessage.cs @@ -5,10 +5,10 @@ namespace TwitchChatTTS.Twitch.Socket.Messages public string? UserId { get; set; } public string? UserLogin { get; set; } public string? UserName { get; set; } - public string BroadcasterUserId { get; set; } - public string BroadcasterUserLogin { get; set; } - public string BroadcasterUserName { get; set; } - public string Tier { get; set; } + public required string BroadcasterUserId { get; set; } + public required string BroadcasterUserLogin { get; set; } + public required string BroadcasterUserName { get; set; } + public required string Tier { get; set; } } public class ChannelSubscriptionMessage : ChannelSubscriptionData diff --git a/Twitch/Socket/Messages/ChatterMessage.cs b/Twitch/Socket/Messages/ChatterMessage.cs index 0e4d879..aae2354 100644 --- a/Twitch/Socket/Messages/ChatterMessage.cs +++ b/Twitch/Socket/Messages/ChatterMessage.cs @@ -2,8 +2,8 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class ChatterMessage { - public string UserId { get; set; } - public string UserLogin { get; set; } - public string UserName { get; set; } + public required string UserId { get; set; } + public required string UserLogin { get; set; } + public required string UserName { get; set; } } } \ No newline at end of file diff --git a/Twitch/Socket/Messages/NotificationMessage.cs b/Twitch/Socket/Messages/NotificationMessage.cs index d500bfb..2cb27fe 100644 --- a/Twitch/Socket/Messages/NotificationMessage.cs +++ b/Twitch/Socket/Messages/NotificationMessage.cs @@ -2,14 +2,14 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class NotificationMessage { - public NotificationInfo Subscription { get; set; } - public object Event { get; set; } + public required NotificationInfo Subscription { get; set; } + public required object Event { get; set; } } public class NotificationInfo : EventSubscriptionMessage { - public string Id { get; set; } - public string Status { get; set; } + public required string Id { get; set; } + public required string Status { get; set; } public DateTime CreatedAt { get; set; } public object? Event { get; set; } } diff --git a/Twitch/Socket/Messages/SessionWelcomeMessage.cs b/Twitch/Socket/Messages/SessionWelcomeMessage.cs index 5a0b419..297fa7e 100644 --- a/Twitch/Socket/Messages/SessionWelcomeMessage.cs +++ b/Twitch/Socket/Messages/SessionWelcomeMessage.cs @@ -2,11 +2,11 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class SessionWelcomeMessage { - public TwitchSocketSession Session { get; set; } + public required TwitchSocketSession Session { get; set; } public class TwitchSocketSession { - public string Id { get; set; } - public string Status { get; set; } + public required string Id { get; set; } + public required string Status { get; set; } public DateTime ConnectedAt { get; set; } public int? KeepaliveTimeoutSeconds { get; set; } public string? ReconnectUrl { get; set; } diff --git a/Twitch/Socket/Messages/TwitchWebsocketMessage.cs b/Twitch/Socket/Messages/TwitchWebsocketMessage.cs index 4fde712..628454a 100644 --- a/Twitch/Socket/Messages/TwitchWebsocketMessage.cs +++ b/Twitch/Socket/Messages/TwitchWebsocketMessage.cs @@ -2,13 +2,13 @@ namespace TwitchChatTTS.Twitch.Socket.Messages { public class TwitchWebsocketMessage { - public TwitchMessageMetadata Metadata { get; set; } + public required TwitchMessageMetadata Metadata { get; set; } public object? Payload { get; set; } } public class TwitchMessageMetadata { - public string MessageId { get; set; } - public string MessageType { get; set; } + public required string MessageId { get; set; } + public required string MessageType { get; set; } public DateTime MessageTimestamp { get; set; } } diff --git a/Twitch/Socket/TwitchWebsocketClient.cs b/Twitch/Socket/TwitchWebsocketClient.cs index 6a8b2ee..e439fdd 100644 --- a/Twitch/Socket/TwitchWebsocketClient.cs +++ b/Twitch/Socket/TwitchWebsocketClient.cs @@ -20,13 +20,13 @@ namespace TwitchChatTTS.Twitch.Socket private bool _disconnected; private readonly object _lock; - public event EventHandler OnIdentified; + public event EventHandler? OnIdentified; public string UID { get; } public string URL; public bool Connected { get; private set; } public bool Identified { get; private set; } - public string SessionId { get; private set; } + public string? SessionId { get; private set; } public bool ReceivedReconnecting { get; set; } public bool TwitchReconnected { get; set; } diff --git a/User.cs b/User.cs index d69fa30..ed3504a 100644 --- a/User.cs +++ b/User.cs @@ -9,27 +9,27 @@ namespace TwitchChatTTS public class User { // Hermes user id - public string HermesUserId { get; set; } - public string HermesUsername { get; set; } + public required string HermesUserId { get; set; } + public required string HermesUsername { get; set; } public long TwitchUserId { get; set; } - public string TwitchUsername { get; set; } - public string SevenEmoteSetId { get; set; } + public required string TwitchUsername { get; set; } + public required string SevenEmoteSetId { get; set; } public long? OwnerId { get; set; } public Connection? TwitchConnection { get; set; } public Connection? NightbotConnection { get; set; } - public string DefaultTTSVoice { get; set; } + public required string DefaultTTSVoice { get; set; } // voice id -> voice name public IDictionary VoicesAvailable { get => _voicesAvailable; set { _voicesAvailable = value; VoiceNameRegex = GenerateEnabledVoicesRegex(); } } // chatter/twitch id -> voice id - public IDictionary VoicesSelected { get; set; } + public required IDictionary VoicesSelected { get; set; } // voice names public HashSet VoicesEnabled { get => _voicesEnabled; set { _voicesEnabled = value; VoiceNameRegex = GenerateEnabledVoicesRegex(); } } public IDictionary Raids { get; set; } = new Dictionary(); - public HashSet Chatters { get; set; } - public IList RegexFilters { get; set; } + public required HashSet Chatters { get; set; } + public required IList RegexFilters { get; set; } [JsonIgnore] public Regex? VoiceNameRegex { get; set; } diff --git a/Veadotube/VeadoInstanceInfo.cs b/Veadotube/VeadoInstanceInfo.cs index 5287200..8c4bc05 100644 --- a/Veadotube/VeadoInstanceInfo.cs +++ b/Veadotube/VeadoInstanceInfo.cs @@ -7,8 +7,8 @@ namespace TwitchChatTTS.Veadotube [JsonPropertyName("time")] public long Time { get; set; } [JsonPropertyName("name")] - public string Name { get; set; } + public required string Name { get; set; } [JsonPropertyName("server")] - public string Server { get; set; } + public required string Server { get; set; } } } \ No newline at end of file diff --git a/Veadotube/VeadoMessage.cs b/Veadotube/VeadoMessage.cs index c6f34ad..f899af3 100644 --- a/Veadotube/VeadoMessage.cs +++ b/Veadotube/VeadoMessage.cs @@ -4,35 +4,35 @@ namespace TwitchChatTTS.Veadotube { public class VeadoPayloadMessage { - public string Event { get; set; } - public string Type { get; set; } - public string Id { get; set; } - public string Name { get; set; } - public object Payload { get; set; } + public required string Event { get; set; } + public required string Type { get; set; } + public required string Id { get; set; } + public string? Name { get; set; } + public required object Payload { get; set; } } public class VeadoEventMessage { [JsonPropertyName("event")] - public string Event { get; set; } + public required string Event { get; set; } } public class VeadoNodeState { - public string Id { get; set; } - public string Name { get; set; } + public required string Id { get; set; } + public required string Name { get; set; } } public class VeadoNodeStateListMessage : VeadoEventMessage { - public IEnumerable States { get; set; } + public required IEnumerable States { get; set; } } public class VeadoNodeStateMessage : VeadoEventMessage { - public string State { get; set; } + public required string State { get; set; } } public class VeadoNodeThumbMessage { public int Width { get; set; } public int Height { get; set; } - public string Png { get; set; } + public required string Png { get; set; } } } \ No newline at end of file