diff --git a/Behaver.cs b/Behaver.cs index 7fa9a17..33665a0 100644 --- a/Behaver.cs +++ b/Behaver.cs @@ -43,16 +43,19 @@ public class Behaver public async Task ActOn(Message message) { + var matchingUACs = Rememberer.MatchUACs(message); var behaviorsActedOn = new List(); foreach (var behavior in Behaviors) { - if (behavior.ShouldAct(message)) + //if (!behavior.ShouldAct(message, matchingUACs)) //TODO: this way + if(!behavior.ShouldAct(message)) { - behavior.ActOn(message); - message.ActedOn = true; - behaviorsActedOn.Add(behavior.ToString()); - Console.WriteLine("acted on, moving forward"); + continue; } + behavior.ActOn(message); + message.ActedOn = true; + behaviorsActedOn.Add(behavior.ToString()); + Console.WriteLine("acted on, moving forward"); } if (message.ActedOn == false && message.MentionsMe && message.Content.Contains('?') && !Behaver.Instance.SelfAccounts.Any(acc => acc.Id == message.Author.Id)) { @@ -66,11 +69,11 @@ public class Behaver behaviorsActedOn.Add("generic question fallback"); } Rememberer.RememberMessage(message); - ForwardToKafka(message, behaviorsActedOn); + ForwardToKafka(message, behaviorsActedOn, matchingUACs); return message.ActedOn; } - internal void ForwardToKafka(Message message, List actedOnBy) + internal void ForwardToKafka(Message message, List actedOnBy, List matchingUACs) { var kafkaesque = new chat_message() { @@ -92,7 +95,7 @@ public class Behaver ChannelName = message.Channel.DisplayName, ChannelProtoocl = message.Channel.Protocol, - UAC_Matches = null, + UAC_Matches = matchingUACs.Select(uac => uac.Id).ToList(), BehavedOnBy = actedOnBy }; Telefranz.Instance.ProduceMessage(kafkaesque); diff --git a/ConsoleService.cs b/ConsoleService.cs index be73c9e..f962c8f 100644 --- a/ConsoleService.cs +++ b/ConsoleService.cs @@ -14,10 +14,10 @@ namespace vassago { Shared.DBConnectionString = aspConfig["DBConnectionString"]; Shared.SetupSlashCommands = aspConfig["SetupSlashCommands"]?.ToLower() == "true"; + Shared.API_URL = new Uri(aspConfig["API_URL"]); DiscordTokens = aspConfig.GetSection("DiscordTokens").Get>(); TwitchConfigs = aspConfig.GetSection("TwitchConfigs").Get>(); Conversion.Converter.Load(aspConfig["ExchangePairsLocation"]); - Telefranz.Configure(aspConfig["KafkaName"], aspConfig["KafkaBootstrap"]); vassago.Behavior.Webhook.SetupWebhooks(aspConfig.GetSection("Webhooks")); } diff --git a/Models/Message.cs b/Models/Message.cs index 367ab61..3c909c7 100644 --- a/Models/Message.cs +++ b/Models/Message.cs @@ -23,7 +23,6 @@ public class Message public Account Author { get; set; } public Channel Channel { get; set; } - //TODO: these are nicities to make it OOP, but it couples them with their respective platform interfaces (and connections!) [NonSerialized] public Func Reply; diff --git a/ProtocolInterfaces/DiscordInterface/DiscordInterface.cs b/ProtocolInterfaces/DiscordInterface/DiscordInterface.cs index 455eccf..607f9eb 100644 --- a/ProtocolInterfaces/DiscordInterface/DiscordInterface.cs +++ b/ProtocolInterfaces/DiscordInterface/DiscordInterface.cs @@ -209,6 +209,7 @@ public class DiscordInterface var m = Rememberer.SearchMessage(mi => mi.ExternalId == dMessage.Id.ToString() && mi.Protocol == PROTOCOL) ?? new() { + //I don't understand why messages need to have their Ids specified but no other entity does. shrug dot emoji Id = Guid.NewGuid(), Protocol = PROTOCOL }; diff --git a/ProtocolInterfaces/TwitchInterface/TwitchInterface.cs b/ProtocolInterfaces/TwitchInterface/TwitchInterface.cs index a83246a..a356e0d 100644 --- a/ProtocolInterfaces/TwitchInterface/TwitchInterface.cs +++ b/ProtocolInterfaces/TwitchInterface/TwitchInterface.cs @@ -291,6 +291,7 @@ public class TwitchInterface var m = Rememberer.SearchMessage(mi => mi.ExternalId == whisperMessage.MessageId && mi.Protocol == PROTOCOL) ?? new() { + Id = Guid.NewGuid(), Protocol = PROTOCOL, Timestamp = (DateTimeOffset)DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc) }; diff --git a/Rememberer.cs b/Rememberer.cs index b3da02d..4634b7e 100644 --- a/Rememberer.cs +++ b/Rememberer.cs @@ -179,6 +179,17 @@ public static class Rememberer dbAccessSemaphore.Release(); return toReturn; } + public static List MatchUACs(Message message) + { + var msgId = message.Id; + var accId = message.Author.Id; + var usrId = message.Author.IsUser.Id; + var chId = message.Channel.Id; + + return SearchUACs(uac => uac.AccountInChannels.FirstOrDefault(aic => aic.Id == accId) != null + || uac.Users.FirstOrDefault(usr => usr.Id == usrId) != null + || uac.Channels.FirstOrDefault(ch => ch.Id == chId) != null); + } public static List SearchUACs(Expression> predicate) { List toReturn; diff --git a/appsettings.json b/appsettings.json index 5362219..35fb96e 100644 --- a/appsettings.json +++ b/appsettings.json @@ -23,5 +23,6 @@ } ], "KafkaBootstrap":"http://localhost:9092", - "KafkaName":"vassago" + "KafkaName":"vassago", + "API_URL": "http://localhost:5093/api" }