diff --git a/Program.cs b/Program.cs index da31b5e..47b5f0e 100644 --- a/Program.cs +++ b/Program.cs @@ -2,13 +2,14 @@ using Valour.Sdk.Client; using Valour.Sdk.Models; using DotNetEnv; using SkyBot; +using System.Text; Env.Load(); var token = Environment.GetEnvironmentVariable("TOKEN"); var allowedUserIds = new List { 15652354820931584 }; var ownerId = 15652354820931584; -var prefix = "s/"; +var prefix = "sd/"; var client = new ValourClient("https://api.valour.gg/"); client.SetupHttpClient(); @@ -66,6 +67,32 @@ client.MessageService.MessageReceived += async (message) => } }; + if (Utils.ContainsAny(content, $"{prefix}react")) + { + if (message.AuthorUserId != ownerId) return; + + string[] args = content.Split(' ', StringSplitOptions.RemoveEmptyEntries); + if (args.Length < 2) return; + string emoji = args[1]; + + var interceptor = new Utils.ReactionInterceptor(Console.Out); + Console.SetOut(interceptor); + + while (true) + { + interceptor.Reset(); + await message.AddReactionAsync(emoji); + if (interceptor.DetectedAlreadyExists) + { + Console.SetOut(new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = true }); + Console.WriteLine("Reaction already exists, stopping."); + break; + } + } + + Console.SetOut(new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = true }); + } + var echoprefixes = new[] { $"{prefix}echo"}; if (Utils.ContainsAny(content, echoprefixes)) { @@ -219,4 +246,4 @@ client.MessageService.MessageReceived += async (message) => }; Console.WriteLine("Listening for messages..."); -await Task.Delay(Timeout.Infinite); \ No newline at end of file +await Task.Delay(Timeout.Infinite); diff --git a/utils.cs b/utils.cs index 5412a4e..f6d3776 100644 --- a/utils.cs +++ b/utils.cs @@ -2,6 +2,7 @@ using System.Globalization; using System.Text.Json; using Valour.Sdk.Models; using Valour.Sdk.Client; +using System.Text; namespace SkyBot { @@ -105,5 +106,33 @@ namespace SkyBot initializedPlanets.Add(planet.Id); } } + + public class ReactionInterceptor : TextWriter + { + private readonly TextWriter _original; + public bool DetectedAlreadyExists { get; private set; } + public override Encoding Encoding => _original.Encoding; + + public ReactionInterceptor(TextWriter original) + { + _original = original; + } + + public void Reset() => DetectedAlreadyExists = false; + + public override void WriteLine(string value) + { + if (value?.Contains("Reaction already exists") == true) + DetectedAlreadyExists = true; + _original.WriteLine(value); + } + + public override void Write(string value) + { + if (value?.Contains("Reaction already exists") == true) + DetectedAlreadyExists = true; + _original.Write(value); + } + } }; }; \ No newline at end of file