Fixed a lot of compiler warnings. Fixed 7tv connection.

This commit is contained in:
Tom
2025-01-17 00:54:47 +00:00
parent b8d0e8cfd8
commit 5e33d594d2
78 changed files with 314 additions and 235 deletions

View File

@ -14,9 +14,8 @@ namespace TwitchChatTTS.Chat.Commands
public class CommandManager : ICommandManager public class CommandManager : ICommandManager
{ {
private readonly User _user; private readonly User _user;
private ICommandSelector _commandSelector; private ICommandSelector? _commandSelector;
private readonly HermesSocketClient _hermes; private readonly HermesSocketClient _hermes;
//private readonly TwitchWebsocketClient _twitch;
private readonly IGroupPermissionManager _permissionManager; private readonly IGroupPermissionManager _permissionManager;
private readonly IUsagePolicy<long> _permissionPolicy; private readonly IUsagePolicy<long> _permissionPolicy;
private readonly ILogger _logger; private readonly ILogger _logger;
@ -26,7 +25,6 @@ namespace TwitchChatTTS.Chat.Commands
public CommandManager( public CommandManager(
User user, User user,
[FromKeyedServices("hermes")] SocketClient<WebSocketMessage> hermes, [FromKeyedServices("hermes")] SocketClient<WebSocketMessage> hermes,
//[FromKeyedServices("twitch")] SocketClient<TwitchWebsocketMessage> twitch,
IGroupPermissionManager permissionManager, IGroupPermissionManager permissionManager,
IUsagePolicy<long> limitManager, IUsagePolicy<long> limitManager,
ILogger logger ILogger logger
@ -34,7 +32,6 @@ namespace TwitchChatTTS.Chat.Commands
{ {
_user = user; _user = user;
_hermes = (hermes as HermesSocketClient)!; _hermes = (hermes as HermesSocketClient)!;
//_twitch = (twitch as TwitchWebsocketClient)!;
_permissionManager = permissionManager; _permissionManager = permissionManager;
_permissionPolicy = limitManager; _permissionPolicy = limitManager;
_logger = logger; _logger = logger;
@ -43,7 +40,7 @@ namespace TwitchChatTTS.Chat.Commands
public async Task<ChatCommandResult> Execute(string arg, ChannelChatMessage message, IEnumerable<string> groups) public async Task<ChatCommandResult> Execute(string arg, ChannelChatMessage message, IEnumerable<string> groups)
{ {
if (string.IsNullOrWhiteSpace(arg)) if (string.IsNullOrWhiteSpace(arg) || _commandSelector == null)
return ChatCommandResult.Unknown; return ChatCommandResult.Unknown;
arg = arg.Trim(); arg = arg.Trim();

View File

@ -36,20 +36,20 @@ namespace TwitchChatTTS.Chat.Emotes
public class EmoteSet public class EmoteSet
{ {
public string Id { get; set; } public required string Id { get; set; }
public string Name { get; set; } public required string Name { get; set; }
public int Flags { get; set; } public int Flags { get; set; }
public bool Immutable { get; set; } public bool Immutable { get; set; }
public bool Privileged { get; set; } public bool Privileged { get; set; }
public IList<Emote> Emotes { get; set; } public required IList<Emote> Emotes { get; set; }
public int EmoteCount { get; set; } public int EmoteCount { get; set; }
public int Capacity { get; set; } public int Capacity { get; set; }
} }
public class Emote public class Emote
{ {
public string Id { get; set; } public required string Id { get; set; }
public string Name { get; set; } public required string Name { get; set; }
public int Flags { get; set; } public int Flags { get; set; }
} }
} }

View File

@ -4,6 +4,7 @@ using CommonSocketLibrary.Abstract;
using CommonSocketLibrary.Common; using CommonSocketLibrary.Common;
using HermesSocketLibrary.Socket.Data; using HermesSocketLibrary.Socket.Data;
using Serilog; using Serilog;
using TwitchChatTTS.Bus;
namespace TwitchChatTTS.Hermes.Socket.Handlers namespace TwitchChatTTS.Hermes.Socket.Handlers
{ {
@ -11,13 +12,15 @@ namespace TwitchChatTTS.Hermes.Socket.Handlers
{ {
private readonly User _user; private readonly User _user;
private readonly NightbotApiClient _nightbot; private readonly NightbotApiClient _nightbot;
private readonly ServiceBusCentral _bus;
private readonly ILogger _logger; private readonly ILogger _logger;
public int OperationCode { get; } = 2; 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; _user = user;
_nightbot = nightbot; _nightbot = nightbot;
_bus = bus;
_logger = logger; _logger = logger;
} }
@ -51,6 +54,8 @@ namespace TwitchChatTTS.Hermes.Socket.Handlers
_user.TwitchConnection = message.Connections.FirstOrDefault(c => c.Default && c.Type == "twitch"); _user.TwitchConnection = message.Connections.FirstOrDefault(c => c.Default && c.Type == "twitch");
_user.NightbotConnection = message.Connections.FirstOrDefault(c => c.Default && c.Type == "nightbot"); _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(); var filters = message.WordFilters.Where(f => f.Search != null && f.Replace != null).ToList();
foreach (var filter in filters) foreach (var filter in filters)
{ {

View File

@ -22,19 +22,19 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
var policy = JsonSerializer.Deserialize<Policy>(json, _options); var policy = JsonSerializer.Deserialize<Policy>(json, _options);
if (policy == null) if (policy == null)
{ {
_logger.Warning($"Policy data failed: null"); _logger.Warning($"Policy JSON data is null.");
return; return;
} }
var group = _groups.Get(policy.GroupId.ToString()); var group = _groups.Get(policy.GroupId.ToString());
if (group == null) 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; return;
} }

View File

@ -19,8 +19,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Warning($"Redeemable action JSON data received is null.");
return;
}
var action = JsonSerializer.Deserialize<RedeemableAction>(json, _options); var action = JsonSerializer.Deserialize<RedeemableAction>(json, _options);
if (action == null) if (action == null)
{ {

View File

@ -19,8 +19,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Warning($"Redemption JSON data received is null.");
return;
}
var redemption = JsonSerializer.Deserialize<Redemption>(json, _options); var redemption = JsonSerializer.Deserialize<Redemption>(json, _options);
if (redemption == null) if (redemption == null)
{ {

View File

@ -19,8 +19,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Warning($"TTS Filter JSON data received is null.");
return;
}
var filter = JsonSerializer.Deserialize<TTSWordFilter>(json, _options); var filter = JsonSerializer.Deserialize<TTSWordFilter>(json, _options);
if (filter == null) if (filter == null)
{ {
@ -40,7 +46,10 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
re.Match(string.Empty); re.Match(string.Empty);
filter.Regex = re; 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}]"); _logger.Debug($"Filter data [filter id: {filter.Id}][search: {filter.Search}][replace: {filter.Replace}]");
_user.RegexFilters.Add(filter); _user.RegexFilters.Add(filter);

View File

@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -18,7 +18,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
var data = json.Split('/'); var data = json.Split('/');
if (data.Length != 2) if (data.Length != 2)

View File

@ -15,7 +15,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -15,7 +15,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -17,8 +17,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Warning("Chatters JSON is null.");
return;
}
var chatters = JsonSerializer.Deserialize<IEnumerable<long>>(json, _options); var chatters = JsonSerializer.Deserialize<IEnumerable<long>>(json, _options);
if (chatters == null) if (chatters == null)
{ {

View File

@ -29,8 +29,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Error("Connections JSON is null.");
return;
}
var connections = JsonSerializer.Deserialize<IEnumerable<Connection>>(json, _options); var connections = JsonSerializer.Deserialize<IEnumerable<Connection>>(json, _options);
if (connections == null) if (connections == null)
{ {

View File

@ -1,4 +1,3 @@
using System.Text.Json;
using Serilog; using Serilog;
namespace TwitchChatTTS.Hermes.Socket.Requests namespace TwitchChatTTS.Hermes.Socket.Requests
@ -7,17 +6,15 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
{ {
public string Name => "get_default_tts_voice"; public string Name => "get_default_tts_voice";
private readonly User _user; private readonly User _user;
private readonly JsonSerializerOptions _options;
private readonly ILogger _logger; private readonly ILogger _logger;
public GetDefaultTTSVoiceAck(User user, JsonSerializerOptions options, ILogger logger) public GetDefaultTTSVoiceAck(User user, ILogger logger)
{ {
_user = user; _user = user;
_options = options;
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
string? defaultVoice = json; string? defaultVoice = json;
if (defaultVoice != null) if (defaultVoice != null)

View File

@ -19,8 +19,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Warning("Emotes JSON is null.");
return;
}
var data = JsonSerializer.Deserialize<IEnumerable<EmoteInfo>>(json, _options); var data = JsonSerializer.Deserialize<IEnumerable<EmoteInfo>>(json, _options);
if (data == null) if (data == null)
{ {

View File

@ -17,8 +17,14 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Warning("TTS Voices JSON is null.");
return;
}
var enabledTTSVoices = JsonSerializer.Deserialize<IEnumerable<string>>(json, _options); var enabledTTSVoices = JsonSerializer.Deserialize<IEnumerable<string>>(json, _options);
if (enabledTTSVoices == null) if (enabledTTSVoices == null)
{ {

View File

@ -26,12 +26,18 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Error("Failed to load groups & permissions: JSON is null.");
return;
}
var groupInfo = JsonSerializer.Deserialize<GroupInfo>(json, _options); var groupInfo = JsonSerializer.Deserialize<GroupInfo>(json, _options);
if (groupInfo == null) if (groupInfo == null)
{ {
_logger.Error("Failed to load groups & permissions."); _logger.Error("Failed to load groups & permissions: object is null.");
return; return;
} }

View File

@ -26,12 +26,18 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null)
{
_logger.Error($"No policies have been found: JSON is null.");
return;
}
var policies = JsonSerializer.Deserialize<IEnumerable<Policy>>(json, _options); var policies = JsonSerializer.Deserialize<IEnumerable<Policy>>(json, _options);
if (policies == null || !policies.Any()) 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; return;
} }

View File

@ -23,7 +23,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -23,7 +23,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
HermesRequestData? hermesRequestData = null; HermesRequestData? hermesRequestData = null;
if (!string.IsNullOrEmpty(requestId)) if (!string.IsNullOrEmpty(requestId))

View File

@ -18,7 +18,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
var users = JsonSerializer.Deserialize<IDictionary<long, string>>(json, _options); var users = JsonSerializer.Deserialize<IDictionary<long, string>>(json, _options);
if (users == null) if (users == null)

View File

@ -19,7 +19,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
var voices = JsonSerializer.Deserialize<IEnumerable<TTSVoice>>(json, _options); var voices = JsonSerializer.Deserialize<IEnumerable<TTSVoice>>(json, _options);
if (voices == null) if (voices == null)

View File

@ -19,7 +19,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
var wordFilters = JsonSerializer.Deserialize<IEnumerable<TTSWordFilter>>(json, _options); var wordFilters = JsonSerializer.Deserialize<IEnumerable<TTSWordFilter>>(json, _options);
if (wordFilters == null) if (wordFilters == null)

View File

@ -3,6 +3,6 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
public interface IRequestAck public interface IRequestAck
{ {
string Name { get; } string Name { get; }
void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData); void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData);
} }
} }

View File

@ -13,7 +13,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Fulfill(string type, string requestId, string data, IDictionary<string, object>? requestData) public void Fulfill(string type, string requestId, string? data, IDictionary<string, object>? requestData)
{ {
if (!_acknowledgements.TryGetValue(type, out var ack)) if (!_acknowledgements.TryGetValue(type, out var ack))
{ {

View File

@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -22,7 +22,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
var policy = JsonSerializer.Deserialize<Policy>(json, _options); var policy = JsonSerializer.Deserialize<Policy>(json, _options);
if (policy == null) if (policy == null)

View File

@ -19,7 +19,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
var action = JsonSerializer.Deserialize<RedeemableAction>(json, _options); var action = JsonSerializer.Deserialize<RedeemableAction>(json, _options);
if (action == null) if (action == null)

View File

@ -19,8 +19,13 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (json == null) {
_logger.Warning($"Redemption JSON data received is null.");
return;
}
var redemption = JsonSerializer.Deserialize<Redemption>(json, _options); var redemption = JsonSerializer.Deserialize<Redemption>(json, _options);
if (redemption == null) if (redemption == null)
{ {

View File

@ -19,7 +19,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
var filter = JsonSerializer.Deserialize<TTSWordFilter>(json, _options); var filter = JsonSerializer.Deserialize<TTSWordFilter>(json, _options);
if (filter == null) if (filter == null)

View File

@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -14,7 +14,7 @@ namespace TwitchChatTTS.Hermes.Socket.Requests
_logger = logger; _logger = logger;
} }
public void Acknowledge(string requestId, string json, IDictionary<string, object>? requestData) public void Acknowledge(string requestId, string? json, IDictionary<string, object>? requestData)
{ {
if (requestData == null) if (requestData == null)
{ {

View File

@ -4,7 +4,7 @@ namespace TwitchChatTTS.Hermes
{ {
public int MajorVersion { get; set; } public int MajorVersion { get; set; }
public int MinorVersion { get; set; } public int MinorVersion { get; set; }
public string Download { get; set; } public required string Download { get; set; }
public string Changelog { get; set; } public required string Changelog { get; set; }
} }
} }

View File

@ -2,8 +2,8 @@ namespace TwitchChatTTS.OBS.Socket.Data
{ {
public class EventMessage public class EventMessage
{ {
public string EventType { get; set; } public required string EventType { get; set; }
public int EventIntent { get; set; } public int EventIntent { get; set; }
public Dictionary<string, object> EventData { get; set; } public required Dictionary<string, object> EventData { get; set; }
} }
} }

View File

@ -2,13 +2,13 @@ namespace TwitchChatTTS.OBS.Socket.Data
{ {
public class HelloMessage public class HelloMessage
{ {
public string ObsWebSocketVersion { get; set; } public required string ObsWebSocketVersion { get; set; }
public int RpcVersion { get; set; } public int RpcVersion { get; set; }
public AuthenticationMessage Authentication { get; set; } public required AuthenticationMessage Authentication { get; set; }
} }
public class AuthenticationMessage { public class AuthenticationMessage {
public string Challenge { get; set; } public required string Challenge { get; set; }
public string Salt { get; set; } public required string Salt { get; set; }
} }
} }

View File

@ -2,9 +2,9 @@ namespace TwitchChatTTS.OBS.Socket.Data
{ {
public class OBSSceneItem public class OBSSceneItem
{ {
public string SourceUuid { get; set; } public required string SourceUuid { get; set; }
public string SourceName { get; set; } public required string SourceName { get; set; }
public string SourceType { get; set; } public required string SourceType { get; set; }
public int SceneItemId { get; set; } public int SceneItemId { get; set; }
} }
} }

View File

@ -1,5 +1,3 @@
using Newtonsoft.Json;
namespace TwitchChatTTS.OBS.Socket.Data namespace TwitchChatTTS.OBS.Socket.Data
{ {
public class RequestBatchMessage public class RequestBatchMessage

View File

@ -2,7 +2,7 @@ namespace TwitchChatTTS.OBS.Socket.Data
{ {
public class RequestBatchResponseMessage public class RequestBatchResponseMessage
{ {
public string RequestId { get; set; } public required string RequestId { get; set; }
public IEnumerable<object> Results { get; set; } public required IEnumerable<object> Results { get; set; }
} }
} }

View File

@ -3,7 +3,7 @@ namespace TwitchChatTTS.OBS.Socket.Data
public class RequestMessage public class RequestMessage
{ {
public string RequestType { get; set; } public string RequestType { get; set; }
public string RequestId { get; set; } public string? RequestId { get; set; }
public Dictionary<string, object> RequestData { get; set; } public Dictionary<string, object> RequestData { get; set; }
public RequestMessage(string type, string id, Dictionary<string, object> data) public RequestMessage(string type, string id, Dictionary<string, object> data)

View File

@ -1,12 +1,10 @@
using Newtonsoft.Json;
namespace TwitchChatTTS.OBS.Socket.Data namespace TwitchChatTTS.OBS.Socket.Data
{ {
public class RequestResponseMessage public class RequestResponseMessage
{ {
public string RequestType { get; set; } public required string RequestType { get; set; }
public string RequestId { get; set; } public required string RequestId { get; set; }
public object RequestStatus { get; set; } public required object RequestStatus { get; set; }
public Dictionary<string, object> ResponseData { get; set; } public required Dictionary<string, object> ResponseData { get; set; }
} }
} }

View File

@ -5,7 +5,7 @@ namespace TwitchChatTTS.OBS.Socket.Data
public int Alignment { get; set; } public int Alignment { get; set; }
public int BoundsAlignment { get; set; } public int BoundsAlignment { get; set; }
public double BoundsHeight { get; set; } public double BoundsHeight { get; set; }
public string BoundsType { get; set; } public required string BoundsType { get; set; }
public double BoundsWidth { get; set; } public double BoundsWidth { get; set; }
public int CropBottom { get; set; } public int CropBottom { get; set; }
public int CropLeft { get; set; } public int CropLeft { get; set; }

View File

@ -23,10 +23,17 @@ public class SevenApiClient
}); });
} }
public async Task<EmoteSet?> FetchChannelEmoteSet(string twitchId) public async Task<EmoteSet?> FetchChannelEmoteSet(long twitchId)
{ {
if (twitchId <= 0)
{
_logger.Warning("No valid Twitch Id was given for 7tv emotes.");
return null;
}
try try
{ {
_logger.Debug($"Fetching 7tv information using Twitch Id [twitch id: {twitchId}]");
var details = await _web.GetJson<UserDetails>($"{API_URL}/users/twitch/" + twitchId); var details = await _web.GetJson<UserDetails>($"{API_URL}/users/twitch/" + twitchId);
return details?.EmoteSet; return details?.EmoteSet;
} }

View File

@ -2,10 +2,10 @@ namespace TwitchChatTTS.Seven.Socket.Data
{ {
public class ChangeMapMessage public class ChangeMapMessage
{ {
public object Id { get; set; } public required object Id { get; set; }
public byte Kind { get; set; } public byte Kind { get; set; }
public bool? Contextual { get; set; } public bool? Contextual { get; set; }
public object Actor { get; set; } public required object Actor { get; set; }
public IEnumerable<ChangeField>? Added { get; set; } public IEnumerable<ChangeField>? Added { get; set; }
public IEnumerable<ChangeField>? Updated { get; set; } public IEnumerable<ChangeField>? Updated { get; set; }
public IEnumerable<ChangeField>? Removed { get; set; } public IEnumerable<ChangeField>? Removed { get; set; }
@ -14,17 +14,17 @@ namespace TwitchChatTTS.Seven.Socket.Data
} }
public class ChangeField { public class ChangeField {
public string Key { get; set; } public required string Key { get; set; }
public int? Index { get; set; } public int? Index { get; set; }
public bool Nested { get; set; } public bool Nested { get; set; }
public object OldValue { get; set; } public required object OldValue { get; set; }
public object Value { get; set; } public required object Value { get; set; }
} }
public class EmoteField { public class EmoteField {
public string Id { get; set; } public required string Id { get; set; }
public string Name { get; set; } public required string Name { get; set; }
public string ActorId { get; set; } public required string ActorId { get; set; }
public int Flags { get; set; } public int Flags { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace TwitchChatTTS.Seven.Socket.Data
{ {
public class DispatchMessage public class DispatchMessage
{ {
public object EventType { get; set; } public required object EventType { get; set; }
public ChangeMapMessage Body { get; set; } public required ChangeMapMessage Body { get; set; }
} }
} }

View File

@ -3,6 +3,6 @@ namespace TwitchChatTTS.Seven.Socket.Data
public class EndOfStreamMessage public class EndOfStreamMessage
{ {
public int Code { get; set; } public int Code { get; set; }
public string Message { get; set; } public required string Message { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace TwitchChatTTS.Seven.Socket.Data
{ {
public class ErrorMessage public class ErrorMessage
{ {
public Exception Exception { get; set; } public Exception? Exception { get; set; }
public string Message { get; set; } public string? Message { get; set; }
} }
} }

View File

@ -2,6 +2,6 @@ namespace TwitchChatTTS.Seven.Socket.Data
{ {
public class ReconnectMessage public class ReconnectMessage
{ {
public string Reason { get; set; } public required string Reason { get; set; }
} }
} }

View File

@ -2,6 +2,6 @@ namespace TwitchChatTTS.Seven.Socket.Data
{ {
public class ResumeMessage public class ResumeMessage
{ {
public string SessionId { get; set; } public required string SessionId { get; set; }
} }
} }

View File

@ -3,7 +3,7 @@ namespace TwitchChatTTS.Seven.Socket.Data
public class SevenHelloMessage public class SevenHelloMessage
{ {
public uint HeartbeatInterval { get; set; } public uint HeartbeatInterval { get; set; }
public string SessionId { get; set; } public required string SessionId { get; set; }
public int SubscriptionLimit { get; set; } public int SubscriptionLimit { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace TwitchChatTTS.Seven.Socket.Data
{ {
public class SubscribeMessage public class SubscribeMessage
{ {
public string? Type { get; set; } public required string Type { get; set; }
public IDictionary<string, string>? Condition { get; set; } public IDictionary<string, string>? Condition { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace TwitchChatTTS.Seven.Socket.Data
{ {
public class UnsubscribeMessage public class UnsubscribeMessage
{ {
public string Type { get; set; } public required string Type { get; set; }
public IDictionary<string, string>? Condition { get; set; } public IDictionary<string, string>? Condition { get; set; }
} }
} }

View File

@ -15,7 +15,7 @@ namespace TwitchChatTTS.Seven.Socket.Handlers
return; return;
var code = message.Code - 4000; var code = message.Code - 4000;
await sender.DisconnectAsync(new SocketDisconnectionEventArgs(WebSocketCloseStatus.Empty.ToString(), code.ToString())); await sender.DisconnectAsync(new SocketDisconnectionEventArgs(message.Message, code.ToString()));
} }
} }
} }

View File

@ -17,13 +17,13 @@ namespace TwitchChatTTS.Seven.Socket.Handlers
public Task Execute<Data>(SocketClient<WebSocketMessage> sender, Data data) public Task Execute<Data>(SocketClient<WebSocketMessage> 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; return Task.CompletedTask;
if (message.Exception != null) if (message.Exception != null)
_logger.Error(message.Exception, message.Message); _logger.Error(message.Exception, message.Message ?? string.Empty);
else else
_logger.Error(message.Message); _logger.Error(message.Message!);
return Task.CompletedTask; return Task.CompletedTask;
} }
} }

View File

@ -4,18 +4,18 @@ namespace TwitchChatTTS.Seven
{ {
public class UserDetails public class UserDetails
{ {
public string Id { get; set; } public required string Id { get; set; }
public string Platform { get; set; } public required string Platform { get; set; }
public string Username { get; set; } public required string DisplayName { get; set; }
public int EmoteCapacity { get; set; } public int EmoteCapacity { get; set; }
public string EmoteSetId { get; set; } public required string EmoteSetId { get; set; }
public EmoteSet EmoteSet { get; set; } public required EmoteSet EmoteSet { get; set; }
public SevenUser User { get; set; } public required SevenUser User { get; set; }
} }
public class SevenUser public class SevenUser
{ {
public string Id { get; set; } public required string Id { get; set; }
public string Username { get; set; } public required string Username { get; set; }
} }
} }

29
TTS.cs
View File

@ -15,6 +15,8 @@ using TwitchChatTTS.Chat.Commands;
using System.Text; using System.Text;
using TwitchChatTTS.Chat.Speech; using TwitchChatTTS.Chat.Speech;
using TwitchChatTTS.Veadotube; using TwitchChatTTS.Veadotube;
using TwitchChatTTS.Bus;
using System.Reactive.Linq;
namespace TwitchChatTTS namespace TwitchChatTTS
{ {
@ -36,6 +38,7 @@ namespace TwitchChatTTS
private readonly IEmoteDatabase _emotes; private readonly IEmoteDatabase _emotes;
private readonly TTSPlayer _player; private readonly TTSPlayer _player;
private readonly AudioPlaybackEngine _playback; private readonly AudioPlaybackEngine _playback;
private readonly ServiceBusCentral _bus;
private readonly Configuration _configuration; private readonly Configuration _configuration;
private readonly ILogger _logger; private readonly ILogger _logger;
@ -53,6 +56,7 @@ namespace TwitchChatTTS
IEmoteDatabase emotes, IEmoteDatabase emotes,
TTSPlayer player, TTSPlayer player,
AudioPlaybackEngine playback, AudioPlaybackEngine playback,
ServiceBusCentral bus,
Configuration configuration, Configuration configuration,
ILogger logger ILogger logger
) )
@ -68,9 +72,10 @@ namespace TwitchChatTTS
_commandFactory = commandFactory; _commandFactory = commandFactory;
_commandManager = commandManager; _commandManager = commandManager;
_emotes = emotes; _emotes = emotes;
_configuration = configuration;
_player = player; _player = player;
_playback = playback; _playback = playback;
_bus = bus;
_configuration = configuration;
_logger = logger; _logger = logger;
} }
@ -108,6 +113,22 @@ namespace TwitchChatTTS
_logger.Warning("Failed to check for version updates."); _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(); await InitializeHermesWebsocket();
_playback.AddOnMixerInputEnded((object? s, SampleProviderEventArgs e) => _playback.AddOnMixerInputEnded((object? s, SampleProviderEventArgs e) =>
@ -139,14 +160,8 @@ namespace TwitchChatTTS
return; return;
} }
var emoteSet = await _sevenApiClient.FetchChannelEmoteSet(_user.TwitchUserId.ToString());
if (emoteSet != null)
_user.SevenEmoteSetId = emoteSet.Id;
_commandManager.Update(_commandFactory); _commandManager.Update(_commandFactory);
await InitializeEmotes(_sevenApiClient, emoteSet);
await InitializeSevenTv();
await InitializeObs(); await InitializeObs();
} }

View File

@ -5,11 +5,11 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
public int DurationSeconds { get; set; } public int DurationSeconds { get; set; }
public DateTime StartedAt { get; set; } public DateTime StartedAt { get; set; }
public bool IsAutomatic { get; set; } public bool IsAutomatic { get; set; }
public string BroadcasterUserId { get; set; } public required string BroadcasterUserId { get; set; }
public string BroadcasterUserLogin { get; set; } public required string BroadcasterUserLogin { get; set; }
public string BroadcasterUserName { get; set; } public required string BroadcasterUserName { get; set; }
public string RequesterUserId { get; set; } public required string RequesterUserId { get; set; }
public string RequesterUserLogin { get; set; } public required string RequesterUserLogin { get; set; }
public string RequesterUserName { get; set; } public required string RequesterUserName { get; set; }
} }
} }

View File

@ -2,16 +2,16 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelBanMessage public class ChannelBanMessage
{ {
public string UserId { get; set; } public required string UserId { get; set; }
public string UserLogin { get; set; } public required string UserLogin { get; set; }
public string UserName { get; set; } public required string UserName { get; set; }
public string BroadcasterUserId { get; set; } public required string BroadcasterUserId { get; set; }
public string BroadcasterUserLogin { get; set; } public required string BroadcasterUserLogin { get; set; }
public string BroadcasterUserName { get; set; } public required string BroadcasterUserName { get; set; }
public string ModeratorUserId { get; set; } public required string ModeratorUserId { get; set; }
public string ModeratorUserLogin { get; set; } public required string ModeratorUserLogin { get; set; }
public string ModeratorUserName { get; set; } public required string ModeratorUserName { get; set; }
public string Reason { get; set; } public required string Reason { get; set; }
public DateTime BannedAt { get; set; } public DateTime BannedAt { get; set; }
public DateTime? EndsAt { get; set; } public DateTime? EndsAt { get; set; }
public bool IsPermanent { get; set; } public bool IsPermanent { get; set; }

View File

@ -2,8 +2,8 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelChatClearMessage public class ChannelChatClearMessage
{ {
public string BroadcasterUserId { get; set; } public required string BroadcasterUserId { get; set; }
public string BroadcasterUserLogin { get; set; } public required string BroadcasterUserLogin { get; set; }
public string BroadcasterUserName { get; set; } public required string BroadcasterUserName { get; set; }
} }
} }

View File

@ -2,8 +2,8 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelChatClearUserMessage : ChannelChatClearMessage public class ChannelChatClearUserMessage : ChannelChatClearMessage
{ {
public string TargetUserId { get; set; } public required string TargetUserId { get; set; }
public string TargetUserLogin { get; set; } public required string TargetUserLogin { get; set; }
public string TargetUserName { get; set; } public required string TargetUserName { get; set; }
} }
} }

View File

@ -2,6 +2,6 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelChatDeleteMessage : ChannelChatClearUserMessage public class ChannelChatDeleteMessage : ChannelChatClearUserMessage
{ {
public string MessageId { get; set; } public required string MessageId { get; set; }
} }
} }

View File

@ -2,16 +2,16 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelChatMessage public class ChannelChatMessage
{ {
public string BroadcasterUserId { get; set; } public required string BroadcasterUserId { get; set; }
public string BroadcasterUserLogin { get; set; } public required string BroadcasterUserLogin { get; set; }
public string BroadcasterUserName { get; set; } public required string BroadcasterUserName { get; set; }
public string ChatterUserId { get; set; } public required string ChatterUserId { get; set; }
public string ChatterUserLogin { get; set; } public required string ChatterUserLogin { get; set; }
public string ChatterUserName { get; set; } public required string ChatterUserName { get; set; }
public string MessageId { get; set; } public required string MessageId { get; set; }
public TwitchChatMessageInfo Message { get; set; } public required TwitchChatMessageInfo Message { get; set; }
public string MessageType { get; set; } public required string MessageType { get; set; }
public TwitchBadge[] Badges { get; set; } public required TwitchBadge[] Badges { get; set; }
public TwitchReplyInfo? Reply { get; set; } public TwitchReplyInfo? Reply { get; set; }
public string? ChannelPointsCustomRewardId { get; set; } public string? ChannelPointsCustomRewardId { get; set; }
public string? ChannelPointsAnimationId { get; set; } public string? ChannelPointsAnimationId { get; set; }
@ -19,14 +19,14 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
public class TwitchChatMessageInfo public class TwitchChatMessageInfo
{ {
public string Text { get; set; } public required string Text { get; set; }
public TwitchChatFragment[] Fragments { get; set; } public required TwitchChatFragment[] Fragments { get; set; }
} }
public class TwitchChatFragment public class TwitchChatFragment
{ {
public string Type { get; set; } public required string Type { get; set; }
public string Text { get; set; } public required string Text { get; set; }
public TwitchCheerInfo? Cheermote { get; set; } public TwitchCheerInfo? Cheermote { get; set; }
public TwitchEmoteInfo? Emote { get; set; } public TwitchEmoteInfo? Emote { get; set; }
public TwitchMentionInfo? Mention { get; set; } public TwitchMentionInfo? Mention { get; set; }
@ -34,42 +34,42 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
public class TwitchCheerInfo public class TwitchCheerInfo
{ {
public string Prefix { get; set; } public required string Prefix { get; set; }
public int Bits { get; set; } public int Bits { get; set; }
public int Tier { get; set; } public int Tier { get; set; }
} }
public class TwitchEmoteInfo public class TwitchEmoteInfo
{ {
public string Id { get; set; } public required string Id { get; set; }
public string EmoteSetId { get; set; } public required string EmoteSetId { get; set; }
public string OwnerId { get; set; } public required string OwnerId { get; set; }
public string[] Format { get; set; } public required string[] Format { get; set; }
} }
public class TwitchMentionInfo public class TwitchMentionInfo
{ {
public string UserId { get; set; } public required string UserId { get; set; }
public string UserName { get; set; } public required string UserName { get; set; }
public string UserLogin { get; set; } public required string UserLogin { get; set; }
} }
public class TwitchBadge public class TwitchBadge
{ {
public string SetId { get; set; } public required string SetId { get; set; }
public string Id { get; set; } public required string Id { get; set; }
public string Info { get; set; } public required string Info { get; set; }
} }
public class TwitchReplyInfo public class TwitchReplyInfo
{ {
public string ParentMessageId { get; set; } public required string ParentMessageId { get; set; }
public string ParentMessageBody { get; set; } public required string ParentMessageBody { get; set; }
public string ParentUserId { get; set; } public required string ParentUserId { get; set; }
public string ParentUserName { get; set; } public required string ParentUserName { get; set; }
public string ParentUserLogin { get; set; } public required string ParentUserLogin { get; set; }
public string ThreadMessageId { get; set; } public required string ThreadMessageId { get; set; }
public string ThreadUserName { get; set; } public required string ThreadUserName { get; set; }
public string ThreadUserLogin { get; set; } public required string ThreadUserLogin { get; set; }
} }
} }

View File

@ -2,23 +2,23 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelCustomRedemptionMessage public class ChannelCustomRedemptionMessage
{ {
public string BroadcasterUserId { get; set; } public required string BroadcasterUserId { get; set; }
public string BroadcasterUserLogin { get; set; } public required string BroadcasterUserLogin { get; set; }
public string BroadcasterUserName { get; set; } public required string BroadcasterUserName { get; set; }
public string Id { get; set; } public required string Id { get; set; }
public string UserId { get; set; } public required string UserId { get; set; }
public string UserLogin { get; set; } public required string UserLogin { get; set; }
public string UserName { get; set; } public required string UserName { get; set; }
public string Status { get; set; } public required string Status { get; set; }
public DateTime RedeemedAt { get; set; } public DateTime RedeemedAt { get; set; }
public RedemptionReward Reward { get; set; } public required RedemptionReward Reward { get; set; }
} }
public class RedemptionReward public class RedemptionReward
{ {
public string Id { get; set; } public required string Id { get; set; }
public string Title { get; set; } public required string Title { get; set; }
public string Prompt { get; set; } public required string Prompt { get; set; }
public int Cost { get; set; } public int Cost { get; set; }
} }
} }

View File

@ -2,12 +2,12 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelFollowMessage public class ChannelFollowMessage
{ {
public string BroadcasterUserId { get; set; } public required string BroadcasterUserId { get; set; }
public string BroadcasterUserLogin { get; set; } public required string BroadcasterUserLogin { get; set; }
public string BroadcasterUserName { get; set; } public required string BroadcasterUserName { get; set; }
public string UserId { get; set; } public required string UserId { get; set; }
public string UserLogin { get; set; } public required string UserLogin { get; set; }
public string UserName { get; set; } public required string UserName { get; set; }
public DateTime FollowedAt { get; set; } public DateTime FollowedAt { get; set; }
} }
} }

View File

@ -2,12 +2,12 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelRaidMessage public class ChannelRaidMessage
{ {
public string FromBroadcasterUserId { get; set; } public required string FromBroadcasterUserId { get; set; }
public string FromBroadcasterUserLogin { get; set; } public required string FromBroadcasterUserLogin { get; set; }
public string FromBroadcasterUserName { get; set; } public required string FromBroadcasterUserName { get; set; }
public string ToBroadcasterUserId { get; set; } public required string ToBroadcasterUserId { get; set; }
public string ToBroadcasterUserLogin { get; set; } public required string ToBroadcasterUserLogin { get; set; }
public string ToBroadcasterUserName { get; set; } public required string ToBroadcasterUserName { get; set; }
public int Viewers { get; set; } public int Viewers { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChannelResubscriptionMessage : ChannelSubscriptionData public class ChannelResubscriptionMessage : ChannelSubscriptionData
{ {
public TwitchChatMessageInfo Message { get; set; } public required TwitchChatMessageInfo Message { get; set; }
public int CumulativeMonths { get; set; } public int CumulativeMonths { get; set; }
public int StreakMonths { get; set; } public int StreakMonths { get; set; }
public int DurationMonths { get; set; } public int DurationMonths { get; set; }

View File

@ -5,10 +5,10 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
public string? UserId { get; set; } public string? UserId { get; set; }
public string? UserLogin { get; set; } public string? UserLogin { get; set; }
public string? UserName { get; set; } public string? UserName { get; set; }
public string BroadcasterUserId { get; set; } public required string BroadcasterUserId { get; set; }
public string BroadcasterUserLogin { get; set; } public required string BroadcasterUserLogin { get; set; }
public string BroadcasterUserName { get; set; } public required string BroadcasterUserName { get; set; }
public string Tier { get; set; } public required string Tier { get; set; }
} }
public class ChannelSubscriptionMessage : ChannelSubscriptionData public class ChannelSubscriptionMessage : ChannelSubscriptionData

View File

@ -2,8 +2,8 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class ChatterMessage public class ChatterMessage
{ {
public string UserId { get; set; } public required string UserId { get; set; }
public string UserLogin { get; set; } public required string UserLogin { get; set; }
public string UserName { get; set; } public required string UserName { get; set; }
} }
} }

View File

@ -2,14 +2,14 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class NotificationMessage public class NotificationMessage
{ {
public NotificationInfo Subscription { get; set; } public required NotificationInfo Subscription { get; set; }
public object Event { get; set; } public required object Event { get; set; }
} }
public class NotificationInfo : EventSubscriptionMessage public class NotificationInfo : EventSubscriptionMessage
{ {
public string Id { get; set; } public required string Id { get; set; }
public string Status { get; set; } public required string Status { get; set; }
public DateTime CreatedAt { get; set; } public DateTime CreatedAt { get; set; }
public object? Event { get; set; } public object? Event { get; set; }
} }

View File

@ -2,11 +2,11 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class SessionWelcomeMessage public class SessionWelcomeMessage
{ {
public TwitchSocketSession Session { get; set; } public required TwitchSocketSession Session { get; set; }
public class TwitchSocketSession { public class TwitchSocketSession {
public string Id { get; set; } public required string Id { get; set; }
public string Status { get; set; } public required string Status { get; set; }
public DateTime ConnectedAt { get; set; } public DateTime ConnectedAt { get; set; }
public int? KeepaliveTimeoutSeconds { get; set; } public int? KeepaliveTimeoutSeconds { get; set; }
public string? ReconnectUrl { get; set; } public string? ReconnectUrl { get; set; }

View File

@ -2,13 +2,13 @@ namespace TwitchChatTTS.Twitch.Socket.Messages
{ {
public class TwitchWebsocketMessage public class TwitchWebsocketMessage
{ {
public TwitchMessageMetadata Metadata { get; set; } public required TwitchMessageMetadata Metadata { get; set; }
public object? Payload { get; set; } public object? Payload { get; set; }
} }
public class TwitchMessageMetadata { public class TwitchMessageMetadata {
public string MessageId { get; set; } public required string MessageId { get; set; }
public string MessageType { get; set; } public required string MessageType { get; set; }
public DateTime MessageTimestamp { get; set; } public DateTime MessageTimestamp { get; set; }
} }

View File

@ -20,13 +20,13 @@ namespace TwitchChatTTS.Twitch.Socket
private bool _disconnected; private bool _disconnected;
private readonly object _lock; private readonly object _lock;
public event EventHandler<EventArgs> OnIdentified; public event EventHandler<EventArgs>? OnIdentified;
public string UID { get; } public string UID { get; }
public string URL; public string URL;
public bool Connected { get; private set; } public bool Connected { get; private set; }
public bool Identified { 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 ReceivedReconnecting { get; set; }
public bool TwitchReconnected { get; set; } public bool TwitchReconnected { get; set; }

16
User.cs
View File

@ -9,27 +9,27 @@ namespace TwitchChatTTS
public class User public class User
{ {
// Hermes user id // Hermes user id
public string HermesUserId { get; set; } public required string HermesUserId { get; set; }
public string HermesUsername { get; set; } public required string HermesUsername { get; set; }
public long TwitchUserId { get; set; } public long TwitchUserId { get; set; }
public string TwitchUsername { get; set; } public required string TwitchUsername { get; set; }
public string SevenEmoteSetId { get; set; } public required string SevenEmoteSetId { get; set; }
public long? OwnerId { get; set; } public long? OwnerId { get; set; }
public Connection? TwitchConnection { get; set; } public Connection? TwitchConnection { get; set; }
public Connection? NightbotConnection { get; set; } public Connection? NightbotConnection { get; set; }
public string DefaultTTSVoice { get; set; } public required string DefaultTTSVoice { get; set; }
// voice id -> voice name // voice id -> voice name
public IDictionary<string, string> VoicesAvailable { get => _voicesAvailable; set { _voicesAvailable = value; VoiceNameRegex = GenerateEnabledVoicesRegex(); } } public IDictionary<string, string> VoicesAvailable { get => _voicesAvailable; set { _voicesAvailable = value; VoiceNameRegex = GenerateEnabledVoicesRegex(); } }
// chatter/twitch id -> voice id // chatter/twitch id -> voice id
public IDictionary<long, string> VoicesSelected { get; set; } public required IDictionary<long, string> VoicesSelected { get; set; }
// voice names // voice names
public HashSet<string> VoicesEnabled { get => _voicesEnabled; set { _voicesEnabled = value; VoiceNameRegex = GenerateEnabledVoicesRegex(); } } public HashSet<string> VoicesEnabled { get => _voicesEnabled; set { _voicesEnabled = value; VoiceNameRegex = GenerateEnabledVoicesRegex(); } }
public IDictionary<string, RaidInfo> Raids { get; set; } = new Dictionary<string, RaidInfo>(); public IDictionary<string, RaidInfo> Raids { get; set; } = new Dictionary<string, RaidInfo>();
public HashSet<long> Chatters { get; set; } public required HashSet<long> Chatters { get; set; }
public IList<TTSWordFilter> RegexFilters { get; set; } public required IList<TTSWordFilter> RegexFilters { get; set; }
[JsonIgnore] [JsonIgnore]
public Regex? VoiceNameRegex { get; set; } public Regex? VoiceNameRegex { get; set; }

View File

@ -7,8 +7,8 @@ namespace TwitchChatTTS.Veadotube
[JsonPropertyName("time")] [JsonPropertyName("time")]
public long Time { get; set; } public long Time { get; set; }
[JsonPropertyName("name")] [JsonPropertyName("name")]
public string Name { get; set; } public required string Name { get; set; }
[JsonPropertyName("server")] [JsonPropertyName("server")]
public string Server { get; set; } public required string Server { get; set; }
} }
} }

View File

@ -4,35 +4,35 @@ namespace TwitchChatTTS.Veadotube
{ {
public class VeadoPayloadMessage public class VeadoPayloadMessage
{ {
public string Event { get; set; } public required string Event { get; set; }
public string Type { get; set; } public required string Type { get; set; }
public string Id { get; set; } public required string Id { get; set; }
public string Name { get; set; } public string? Name { get; set; }
public object Payload { get; set; } public required object Payload { get; set; }
} }
public class VeadoEventMessage public class VeadoEventMessage
{ {
[JsonPropertyName("event")] [JsonPropertyName("event")]
public string Event { get; set; } public required string Event { get; set; }
} }
public class VeadoNodeState { public class VeadoNodeState {
public string Id { get; set; } public required string Id { get; set; }
public string Name { get; set; } public required string Name { get; set; }
} }
public class VeadoNodeStateListMessage : VeadoEventMessage { public class VeadoNodeStateListMessage : VeadoEventMessage {
public IEnumerable<VeadoNodeState> States { get; set; } public required IEnumerable<VeadoNodeState> States { get; set; }
} }
public class VeadoNodeStateMessage : VeadoEventMessage { public class VeadoNodeStateMessage : VeadoEventMessage {
public string State { get; set; } public required string State { get; set; }
} }
public class VeadoNodeThumbMessage { public class VeadoNodeThumbMessage {
public int Width { get; set; } public int Width { get; set; }
public int Height { get; set; } public int Height { get; set; }
public string Png { get; set; } public required string Png { get; set; }
} }
} }