diff --git a/Behaver.cs b/Behaver.cs index db4b4ca..7fa9a17 100644 --- a/Behaver.cs +++ b/Behaver.cs @@ -1,5 +1,7 @@ namespace vassago; -#pragma warning disable 4014 //the "not awaited" error +#pragma warning disable 4014 +using gray_messages.chat; +using franz;//the "not awaited" error using vassago.Behavior; using vassago.Models; using System; @@ -41,12 +43,14 @@ public class Behaver public async Task ActOn(Message message) { + var behaviorsActedOn = new List(); foreach (var behavior in Behaviors) { if (behavior.ShouldAct(message)) { behavior.ActOn(message); message.ActedOn = true; + behaviorsActedOn.Add(behavior.ToString()); Console.WriteLine("acted on, moving forward"); } } @@ -59,10 +63,41 @@ public class Behaver }; await message.Channel.SendMessage(responses[Shared.r.Next(responses.Count)]); message.ActedOn = true; + behaviorsActedOn.Add("generic question fallback"); } + Rememberer.RememberMessage(message); + ForwardToKafka(message, behaviorsActedOn); return message.ActedOn; } + internal void ForwardToKafka(Message message, List actedOnBy) + { + var kafkaesque = new chat_message() + { + Api_Uri = Shared.API_URL, + MessageId = message.Id, + + MessageContent = message.Content, + MentionsMe = message.MentionsMe, + Timestamp = message.Timestamp, + AttachmentCount = (uint)(message.Attachments?.Count() ?? 0), + + AccountId = message.Author.Id, + AccountName = message.Author.DisplayName, + + UserId = message.Author.IsUser.Id, + UserName = message.Author.IsUser.DisplayName, + + ChannelId = message.Channel.Id, + ChannelName = message.Channel.DisplayName, + ChannelProtoocl = message.Channel.Protocol, + + UAC_Matches = null, + BehavedOnBy = actedOnBy + }; + Telefranz.Instance.ProduceMessage(kafkaesque); + } + internal bool IsSelf(Guid AccountId) { var acc = Rememberer.SearchAccount(a => a.Id == AccountId); diff --git a/ConsoleService.cs b/ConsoleService.cs index a1694fd..be73c9e 100644 --- a/ConsoleService.cs +++ b/ConsoleService.cs @@ -1,5 +1,6 @@ namespace vassago { + using franz; using Microsoft.EntityFrameworkCore; using vassago; using vassago.Models; @@ -16,6 +17,8 @@ namespace vassago 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/FranzMessage.cs b/Models/FranzMessage.cs new file mode 100644 index 0000000..12a40c3 --- /dev/null +++ b/Models/FranzMessage.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using franz; +using gray_messages; + +namespace gray_messages.chat +{ + public class chat_message : gray_messages.message + { + //expect this to be the same every time + public Uri Api_Uri { get; set; } + public Guid MessageId { get; set; } + public string MessageContent { get; set; } + public bool MentionsMe { get; set; } + public DateTimeOffset Timestamp { get; set; } + public uint AttachmentCount { get; set; } + + public Guid AccountId { get; set; } + public string AccountName { get; set; } + + public Guid UserId { get; set; } + public string UserName { get; set; } + + public Guid ChannelId { get; set; } + public string ChannelName { get; set; } + public string ChannelProtoocl { get; set; } + + public List UAC_Matches { get; set; } + public List BehavedOnBy { get; set; } + } +} diff --git a/ProtocolInterfaces/DiscordInterface/DiscordInterface.cs b/ProtocolInterfaces/DiscordInterface/DiscordInterface.cs index 7698838..455eccf 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() { + Id = Guid.NewGuid(), Protocol = PROTOCOL }; diff --git a/Shared.cs b/Shared.cs index 6c4b66d..15068d4 100644 --- a/Shared.cs +++ b/Shared.cs @@ -11,4 +11,5 @@ public static class Shared public static string DBConnectionString { get; set; } public static HttpClient HttpClient { get; internal set; } = new HttpClient(); public static bool SetupSlashCommands { get; set; } + public static Uri API_URL {get;set;} } diff --git a/appsettings.json b/appsettings.json index bab73e9..5362219 100644 --- a/appsettings.json +++ b/appsettings.json @@ -21,5 +21,7 @@ "Trigger": "test", "Uri": "http://localhost" } - ] + ], + "KafkaBootstrap":"http://localhost:9092", + "KafkaName":"vassago" } diff --git a/vassago.csproj b/vassago.csproj index 5b6d803..7ceaff9 100644 --- a/vassago.csproj +++ b/vassago.csproj @@ -10,6 +10,7 @@ + runtime; build; native; contentfiles; analyzers; buildtransitive