using CommonSocketLibrary.Abstract; using CommonSocketLibrary.Common; using HermesSocketLibrary.Socket.Data; using Microsoft.Extensions.DependencyInjection; using Serilog; using TwitchChatTTS.Chat.Commands.Parameters; using TwitchLib.Client.Models; namespace TwitchChatTTS.Chat.Commands { public class TTSCommand : ChatCommand { private readonly User _user; private readonly SocketClient _hermesClient; private readonly ILogger _logger; public TTSCommand( [FromKeyedServices("parameter-ttsvoicename")] ChatCommandParameter ttsVoiceParameter, [FromKeyedServices("parameter-unvalidated")] ChatCommandParameter unvalidatedParameter, User user, [FromKeyedServices("hermes")] SocketClient hermesClient, ILogger logger ) : base("tts", "Various tts commands.") { _user = user; _hermesClient = hermesClient; _logger = logger; AddParameter(ttsVoiceParameter); AddParameter(unvalidatedParameter); } public override async Task CheckPermissions(ChatMessage message, long broadcasterId) { return message.IsBroadcaster; } public override async Task Execute(IList args, ChatMessage message, long broadcasterId) { if (_user == null || _user.VoicesAvailable == null) return; var voiceName = args[0].ToLower(); var voiceId = _user.VoicesAvailable.FirstOrDefault(v => v.Value.ToLower() == voiceName).Key; var action = args[1].ToLower(); switch (action) { case "enable": await _hermesClient.Send(3, new RequestMessage() { Type = "update_tts_voice_state", Data = new Dictionary() { { "voice", voiceId }, { "state", true } } }); break; case "disable": await _hermesClient.Send(3, new RequestMessage() { Type = "update_tts_voice_state", Data = new Dictionary() { { "voice", voiceId }, { "state", false } } }); break; case "remove": await _hermesClient.Send(3, new RequestMessage() { Type = "delete_tts_voice", Data = new Dictionary() { { "voice", voiceId } } }); break; } _logger.Information($"Added a new TTS voice [voice: {voiceName}][invoker: {message.Username}][id: {message.UserId}]"); } } }