From 5e125911d46d3b3906b2f185b8705048d63709e6 Mon Sep 17 00:00:00 2001 From: skyjoshua Date: Sat, 14 Mar 2026 22:53:21 +0000 Subject: [PATCH] end of v1 --- Program.cs | 77 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 6 deletions(-) diff --git a/Program.cs b/Program.cs index 4f28428..8e63d6a 100644 --- a/Program.cs +++ b/Program.cs @@ -2,6 +2,7 @@ using Valour.Sdk.Client; using Valour.Sdk.Models; using DotNetEnv; using SkyBot; +using System.Reflection; Env.Load(); @@ -33,6 +34,7 @@ Utils.StartValourUserUpdater(); //Dictionaries var channelCache = new Dictionary(); +var messageCache = new Dictionary(); var InitializedPlanets = new HashSet(); @@ -45,8 +47,50 @@ client.PlanetService.JoinedPlanetsUpdated += async () => await Utils.InitializePlanetsAsync(client, channelCache, InitializedPlanets); }; +client.MessageService.MessageReceived += OnMessageReceived; +client.MessageService.MessageEdited += OnMessageEdit; +client.MessageService.MessageDeleted += OnMessageDelete; -client.MessageService.MessageReceived += async (message) => +async Task OnMessageDelete(Message message) +{ + try + { + var planet = await client.PlanetService.FetchPlanetAsync(message.PlanetId.Value); + var member = await planet.FetchMemberAsync(message.AuthorMemberId.Value); + Console.WriteLine($"{member.Name} deleted the message: {message.Content}"); + } + catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + Console.WriteLine(ex.StackTrace); + } +} + +async Task OnMessageEdit(Message message) +{ + try + { + var planet = await client.PlanetService.FetchPlanetAsync(message.PlanetId.Value); + var member = await planet.FetchMemberAsync(message.AuthorMemberId.Value); + + var before = messageCache.TryGetValue(message.Id, out var old) ? old : "(unknown)"; + + var after = message.Content; + + Console.WriteLine($"{member.Name} edited a message."); + Console.WriteLine($"Before: {before}"); + Console.WriteLine($"After: {after}"); + + messageCache[message.Id] = after; + + } catch (Exception ex) + { + Console.WriteLine($"Error: {ex.Message}"); + Console.WriteLine(ex.StackTrace); + } +}; + +async Task OnMessageReceived(Message message) { string content = message.Content ?? ""; long channelId = message.ChannelId; @@ -57,6 +101,7 @@ client.MessageService.MessageReceived += async (message) => if (message.AuthorUserId == client.Me.Id) return; + messageCache[message.Id] = message.Content; if (allowedUserIds.Contains(message.AuthorUserId)) { @@ -71,21 +116,41 @@ client.MessageService.MessageReceived += async (message) => if (message.AuthorUserId != ownerId) return; string[] args = content.Split(' ', StringSplitOptions.RemoveEmptyEntries); - if (args.Length < 2) return; - string emoji = args[1]; + bool useRandom = args.Length < 2; + string emoji = !useRandom ? args[1] : null; + + List allEmojis = null; + if (useRandom) + { + try + { + using var http = new HttpClient(); + var json = await http.GetStringAsync("https://unpkg.com/unicode-emoji-json@0.0.4/data-ordered-emoji.json"); + allEmojis = System.Text.Json.JsonSerializer.Deserialize>(json); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to fetch emoji list: {ex.Message}"); + await Utils.SendReplyAsync(channelCache, channelId, $"{pingMember} Failed to fetch emoji list."); + return; + } + } + + var random = new Random(); var interceptor = new Utils.ReactionInterceptor(Console.Out); Console.SetOut(interceptor); while (true) { interceptor.Reset(); - await message.AddReactionAsync(emoji); + string currentEmoji = useRandom ? allEmojis[random.Next(allEmojis.Count)] : emoji; + await message.AddReactionAsync(currentEmoji); if (interceptor.DetectedAlreadyExists) { Console.SetOut(new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = true }); - Console.WriteLine("Reaction already exists, stopping."); - break; + Console.WriteLine("Stopping react spam."); + break; } }