Added several redemption actions. Added certain login features. Fixed OBS command. Added more logging.
This commit is contained in:
@ -186,7 +186,10 @@ public class ChatMessageHandler
|
||||
var voiceId = _user.VoicesSelected[userId];
|
||||
if (_user.VoicesAvailable.TryGetValue(voiceId, out string? voiceName) && voiceName != null)
|
||||
{
|
||||
voiceSelected = voiceName;
|
||||
if (_user.VoicesEnabled.Contains(voiceName) || chatterId == _user.OwnerId || m.IsStaff)
|
||||
{
|
||||
voiceSelected = voiceName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -219,9 +222,7 @@ public class ChatMessageHandler
|
||||
private void HandlePartialMessage(int priority, string voice, string message, OnMessageReceivedArgs e)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(message))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var m = e.ChatMessage;
|
||||
var parts = sfxRegex.Split(message);
|
||||
|
@ -30,7 +30,7 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
|
||||
public override async Task<bool> CheckPermissions(ChatMessage message, long broadcasterId)
|
||||
{
|
||||
return message.IsModerator || message.IsBroadcaster;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override async Task Execute(IList<string> args, ChatMessage message, long broadcasterId)
|
||||
|
@ -1,3 +1,4 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Serilog;
|
||||
using TwitchLib.Client.Models;
|
||||
@ -8,14 +9,16 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
{
|
||||
private IDictionary<string, ChatCommand> _commands;
|
||||
private readonly TwitchBotAuth _token;
|
||||
private readonly User _user;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly ILogger _logger;
|
||||
private string CommandStartSign { get; } = "!";
|
||||
|
||||
|
||||
public ChatCommandManager(TwitchBotAuth token, IServiceProvider serviceProvider, ILogger logger)
|
||||
public ChatCommandManager(TwitchBotAuth token, User user, IServiceProvider serviceProvider, ILogger logger)
|
||||
{
|
||||
_token = token;
|
||||
_user = user;
|
||||
_serviceProvider = serviceProvider;
|
||||
_logger = logger;
|
||||
|
||||
@ -65,7 +68,11 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
if (!arg.StartsWith(CommandStartSign))
|
||||
return ChatCommandResult.Unknown;
|
||||
|
||||
string[] parts = arg.Split(" ");
|
||||
string[] parts = Regex.Matches(arg, "(?<match>[^\"\\n\\s]+|\"[^\"\\n]*\")")
|
||||
.Cast<Match>()
|
||||
.Select(m => m.Groups["match"].Value)
|
||||
.Select(m => m.StartsWith('"') && m.EndsWith('"') ? m.Substring(1, m.Length - 2) : m)
|
||||
.ToArray();
|
||||
string com = parts.First().Substring(CommandStartSign.Length).ToLower();
|
||||
string[] args = parts.Skip(1).ToArray();
|
||||
long broadcasterId = long.Parse(_token.BroadcasterId);
|
||||
@ -77,7 +84,7 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
return ChatCommandResult.Missing;
|
||||
}
|
||||
|
||||
if (!await command.CheckPermissions(message, broadcasterId) && message.UserId != "126224566" && !message.IsStaff)
|
||||
if (!await command.CheckPermissions(message, broadcasterId) && message.UserId != _user.OwnerId?.ToString() && !message.IsStaff)
|
||||
{
|
||||
_logger.Warning($"Chatter is missing permission to execute command named '{com}' [args: {arg}][chatter: {message.Username}][cid: {message.UserId}]");
|
||||
return ChatCommandResult.Permission;
|
||||
@ -108,7 +115,7 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
return ChatCommandResult.Fail;
|
||||
}
|
||||
|
||||
_logger.Information($"Executed the {com} command with the following args: " + string.Join(" ", args));
|
||||
_logger.Information($"Executed the {com} command [arguments: {arg}]");
|
||||
return ChatCommandResult.Success;
|
||||
}
|
||||
}
|
||||
|
@ -40,27 +40,45 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
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();
|
||||
var action = args[0].ToLower();
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case "sleep":
|
||||
await _manager.Send(new RequestMessage("Sleep", string.Empty, new Dictionary<string, object>() { { "sleepMillis", 10000 } }));
|
||||
break;
|
||||
case "get_scene_item_id":
|
||||
await _manager.Send(new RequestMessage("GetSceneItemId", string.Empty, new Dictionary<string, object>() { { "sceneName", "Generic" }, { "sourceName", "ABCDEF" }, { "rotation", 90 } }));
|
||||
if (args.Count < 3)
|
||||
return;
|
||||
|
||||
_logger.Debug($"Getting scene item id via chat command [args: {string.Join(" ", args)}]");
|
||||
await _manager.Send(new RequestMessage("GetSceneItemId", string.Empty, new Dictionary<string, object>() { { "sceneName", args[1] }, { "sourceName", args[2] } }));
|
||||
break;
|
||||
case "transform":
|
||||
if (args.Count < 5)
|
||||
return;
|
||||
|
||||
_logger.Debug($"Getting scene item transformation data via chat command [args: {string.Join(" ", args)}]");
|
||||
await _manager.UpdateTransformation(args[1], args[2], (d) =>
|
||||
{
|
||||
|
||||
if (args[3].ToLower() == "rotation")
|
||||
d.Rotation = int.Parse(args[4]);
|
||||
else if (args[3].ToLower() == "x")
|
||||
d.Rotation = int.Parse(args[4]);
|
||||
else if (args[3].ToLower() == "y")
|
||||
d.PositionY = int.Parse(args[4]);
|
||||
});
|
||||
await _manager.Send(new RequestMessage("Transform", string.Empty, new Dictionary<string, object>() { { "sceneName", "Generic" }, { "sceneItemId", 90 }, { "rotation", 90 } }));
|
||||
break;
|
||||
case "remove":
|
||||
await _manager.Send(new RequestMessage("Sleep", string.Empty, new Dictionary<string, object>() { { "sleepMillis", 10000 } }));
|
||||
case "sleep":
|
||||
if (args.Count < 2)
|
||||
return;
|
||||
|
||||
_logger.Debug($"Sending OBS to sleep via chat command [args: {string.Join(" ", args)}]");
|
||||
await _manager.Send(new RequestMessage("Sleep", string.Empty, new Dictionary<string, object>() { { "sleepMillis", int.Parse(args[1]) } }));
|
||||
break;
|
||||
case "visibility":
|
||||
if (args.Count < 4)
|
||||
return;
|
||||
|
||||
_logger.Debug($"Updating scene item visibility via chat command [args: {string.Join(" ", args)}]");
|
||||
await _manager.UpdateSceneItemVisibility(args[1], args[2], args[3].ToLower() == "true");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Serilog;
|
||||
using TwitchChatTTS.Twitch.Redemptions;
|
||||
using TwitchLib.Client.Models;
|
||||
|
||||
namespace TwitchChatTTS.Chat.Commands
|
||||
@ -6,13 +7,15 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
public class RefreshTTSDataCommand : ChatCommand
|
||||
{
|
||||
private readonly User _user;
|
||||
private readonly RedemptionManager _redemptionManager;
|
||||
private readonly HermesApiClient _hermesApi;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public RefreshTTSDataCommand(User user, HermesApiClient hermesApi, ILogger logger)
|
||||
public RefreshTTSDataCommand(User user, RedemptionManager redemptionManager, HermesApiClient hermesApi, ILogger logger)
|
||||
: base("refresh", "Refreshes certain TTS related data on the client.")
|
||||
{
|
||||
_user = user;
|
||||
_redemptionManager = redemptionManager;
|
||||
_hermesApi = hermesApi;
|
||||
_logger = logger;
|
||||
}
|
||||
@ -51,7 +54,13 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
break;
|
||||
case "default_voice":
|
||||
_user.DefaultTTSVoice = await _hermesApi.FetchTTSDefaultVoice();
|
||||
_logger.Information("Default Voice: " + _user.DefaultTTSVoice);
|
||||
_logger.Information("TTS Default Voice: " + _user.DefaultTTSVoice);
|
||||
break;
|
||||
case "redemptions":
|
||||
var redemptionActions = await _hermesApi.FetchRedeemableActions();
|
||||
var redemptions = await _hermesApi.FetchRedemptions();
|
||||
_redemptionManager.Initialize(redemptions, redemptionActions.ToDictionary(a => a.Name, a => a));
|
||||
_logger.Information($"Redemption Manager has been refreshed with {redemptionActions.Count()} actions & {redemptions.Count()} redemptions.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
|
||||
public override async Task<bool> CheckPermissions(ChatMessage message, long broadcasterId)
|
||||
{
|
||||
return message.IsBroadcaster;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override async Task Execute(IList<string> args, ChatMessage message, long broadcasterId)
|
||||
|
@ -32,7 +32,7 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
|
||||
public override async Task<bool> CheckPermissions(ChatMessage message, long broadcasterId)
|
||||
{
|
||||
return message.IsBroadcaster;
|
||||
return message.IsModerator || message.IsBroadcaster;
|
||||
}
|
||||
|
||||
public override async Task Execute(IList<string> args, ChatMessage message, long broadcasterId)
|
||||
@ -52,6 +52,7 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
Type = "update_tts_voice_state",
|
||||
Data = new Dictionary<string, object>() { { "voice", voiceId }, { "state", true } }
|
||||
});
|
||||
_logger.Information($"Enabled a TTS voice [voice: {voiceName}][invoker: {message.Username}][id: {message.UserId}]");
|
||||
break;
|
||||
case "disable":
|
||||
await _hermesClient.Send(3, new RequestMessage()
|
||||
@ -59,17 +60,9 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
Type = "update_tts_voice_state",
|
||||
Data = new Dictionary<string, object>() { { "voice", voiceId }, { "state", false } }
|
||||
});
|
||||
break;
|
||||
case "remove":
|
||||
await _hermesClient.Send(3, new RequestMessage()
|
||||
{
|
||||
Type = "delete_tts_voice",
|
||||
Data = new Dictionary<string, object>() { { "voice", voiceId } }
|
||||
});
|
||||
_logger.Information($"Disabled a TTS voice [voice: {voiceName}][invoker: {message.Username}][id: {message.UserId}]");
|
||||
break;
|
||||
}
|
||||
|
||||
_logger.Information($"Added a new TTS voice [voice: {voiceName}][invoker: {message.Username}][id: {message.UserId}]");
|
||||
}
|
||||
}
|
||||
}
|
@ -35,19 +35,23 @@ namespace TwitchChatTTS.Chat.Commands
|
||||
|
||||
public override async Task Execute(IList<string> args, ChatMessage message, long broadcasterId)
|
||||
{
|
||||
if (_user == null || _user.VoicesSelected == null || _user.VoicesAvailable == null)
|
||||
if (_user == null || _user.VoicesSelected == null || _user.VoicesEnabled == null)
|
||||
return;
|
||||
|
||||
long chatterId = long.Parse(message.UserId);
|
||||
var voiceName = args.First().ToLower();
|
||||
var voice = _user.VoicesAvailable.First(v => v.Value.ToLower() == voiceName);
|
||||
var enabled = _user.VoicesEnabled.Contains(voice.Value);
|
||||
|
||||
await _hermesClient.Send(3, new RequestMessage()
|
||||
if (enabled)
|
||||
{
|
||||
Type = _user.VoicesSelected.ContainsKey(chatterId) ? "update_tts_user" : "create_tts_user",
|
||||
Data = new Dictionary<string, object>() { { "chatter", chatterId }, { "voice", voice.Key } }
|
||||
});
|
||||
_logger.Information($"Updated chat TTS voice [voice: {voice.Value}][username: {message.Username}].");
|
||||
await _hermesClient.Send(3, new RequestMessage()
|
||||
{
|
||||
Type = _user.VoicesSelected.ContainsKey(chatterId) ? "update_tts_user" : "create_tts_user",
|
||||
Data = new Dictionary<string, object>() { { "chatter", chatterId }, { "voice", voice.Key } }
|
||||
});
|
||||
_logger.Debug($"Sent request to update chat TTS voice [voice: {voice.Value}][username: {message.Username}].");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user