From 83c5ae98b165a85f456c926c07e8c86b95986456 Mon Sep 17 00:00:00 2001 From: Madpeterz <57852827+Madpeterz@users.noreply.github.com> Date: Tue, 30 Mar 2021 20:35:49 +0100 Subject: [PATCH] corrects some issues with the new adverts service --- BetterSecondbot/Adverts/advertsService.cs | 33 ++++++++++---- BetterSecondbot/Cli.cs | 7 +++ .../DiscordSupervisor/Discord-super.cs | 2 + .../DiscordSupervisor/DiscordBot.cs | 45 ++++++++++++++++++- .../DiscordSupervisor/Functions.cs | 2 +- .../Properties/PublishProfiles/Windows.pubxml | 18 ++++++++ LibreMetaverse/LibreMetaverse.XML | 6 +++ 7 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 BetterSecondbot/Properties/PublishProfiles/Windows.pubxml diff --git a/BetterSecondbot/Adverts/advertsService.cs b/BetterSecondbot/Adverts/advertsService.cs index ff23e8e..89bceed 100644 --- a/BetterSecondbot/Adverts/advertsService.cs +++ b/BetterSecondbot/Adverts/advertsService.cs @@ -1,6 +1,7 @@ using BetterSecondBot; using BetterSecondBotShared.IO; using BetterSecondBotShared.Json; +using BetterSecondBotShared.logs; using BetterSecondBotShared.Static; using Newtonsoft.Json; using OpenMetaverse; @@ -17,7 +18,8 @@ namespace BetterSecondbot.Adverts public advertsService(Cli Master, bool LoadFromDocker) { controler = Master; - if(LoadFromDocker == true) + LogFormater.Info("Starting adverts service", true); + if (LoadFromDocker == true) { loadFromDockerEnv(); } @@ -29,6 +31,7 @@ namespace BetterSecondbot.Adverts protected void loadFromDisk() { + LogFormater.Info("Loading adverts from Disk", true); advertsBlob loadedAdverts = new advertsBlob(); advertConfig demoAdvert = new advertConfig(); demoAdvert.attachment = UUID.Zero.ToString(); @@ -47,11 +50,13 @@ namespace BetterSecondbot.Adverts SimpleIO io = new SimpleIO(); if (SimpleIO.FileType(targetfile, "json") == false) { + LogFormater.Status("Creating new adverts file", true); io.WriteJsonAdverts(loadedAdverts, targetfile); return; } if (io.Exists(targetfile) == false) { + LogFormater.Status("Creating new adverts file", true); io.WriteJsonAdverts(loadedAdverts, targetfile); return; } @@ -115,10 +120,12 @@ namespace BetterSecondbot.Adverts } } groups.Add(selectedGroups); + LogFormater.Info("Loaded advert: ("+config.enabled+") "+ config.title+" "+config.days+" | "+config.hour+"h "+config.min+"m", true); } protected void loadFromDockerEnv() { + LogFormater.Info("Loading adverts from ENV", true); int loop = 1; bool found = true; while (found == true) @@ -140,7 +147,7 @@ namespace BetterSecondbot.Adverts while(exitNow == false) { exitNow = true; - string value = getEnv("advert_" + loop.ToString() + "_group_" + loop2.ToString()); + string value = getEnv("advert_" + loop2.ToString() + "_group_" + loop2.ToString()); if (helpers.notempty(value) == true) { groupentrys.Add(value); @@ -179,6 +186,10 @@ namespace BetterSecondbot.Adverts public void Tick() { DateTime moment = DateTime.Now; + if(lastTickMin == -1) + { + LogFormater.Info("Current time: "+moment.Hour.ToString()+":"+moment.Minute.ToString(), true); + } if (lastTickMin != moment.Minute) { lastTickMin = moment.Minute; @@ -193,37 +204,41 @@ namespace BetterSecondbot.Adverts int loop = 0; while (loop < titles.Count) { + bool noGo = false; if (enabled[loop] == false) { - continue; + noGo = true; } if (activeDays[loop].Contains(dayofweek) == false) { - continue; + noGo = true; } if ((activeHours[loop] != moment.Hour) && (activeHours[loop] != -1)) { - continue; + noGo = true; } if ((activeHours[loop] != moment.Minute) && (activeHours[loop] != -1)) { - continue; + noGo = true; } if (activeHours[loop] == -1) { if ((moment.Minute != 0) && (moment.Minute != 30)) { - continue; + noGo = true; } } - TriggerAdvert(loop); + if (noGo == false) + { + TriggerAdvert(loop); + } loop++; } } protected void TriggerAdvert(int advertID) { - + LogFormater.Info("Processing advert: "+advertID.ToString(), true); foreach (UUID group in groups[advertID]) { if (asNotice[advertID] == true) diff --git a/BetterSecondbot/Cli.cs b/BetterSecondbot/Cli.cs index d16759e..fffb382 100644 --- a/BetterSecondbot/Cli.cs +++ b/BetterSecondbot/Cli.cs @@ -27,10 +27,15 @@ namespace BetterSecondBot return Bot; } + public void TickAdverts() + { + Adverts.Tick(); + } protected void keep_alive() { while (Bot.KillMe == false) { + TickAdverts(); string NewStatusMessage = Bot.GetStatus(); NewStatusMessage = NewStatusMessage.Trim(); if (NewStatusMessage != Bot.LastStatusMessage) @@ -43,6 +48,7 @@ namespace BetterSecondBot } Thread.Sleep(1500); } + Adverts = null; betterAtHomeService = null; betterTracking = null; datastorage = null; @@ -68,6 +74,7 @@ namespace BetterSecondBot public Cli(JsonConfig Config, bool as_docker, bool use_self_keep_alive) { exitBot = false; + LogFormater.Info("Starting cli"); if (helpers.botRequired(Config) == true) { Bot = new SecondBot(); diff --git a/BetterSecondbot/DiscordSupervisor/Discord-super.cs b/BetterSecondbot/DiscordSupervisor/Discord-super.cs index 285197e..c5a8c3a 100644 --- a/BetterSecondbot/DiscordSupervisor/Discord-super.cs +++ b/BetterSecondbot/DiscordSupervisor/Discord-super.cs @@ -22,6 +22,7 @@ namespace BetterSecondBot.DiscordSupervisor { StatusMessageHandler(null, new BetterSecondBot.bottypes.StatusMessageEvent(false, "None")); } + string NewStatusMessage = GetStatus(); if (NewStatusMessage != LastStatusMessage) { @@ -37,6 +38,7 @@ namespace BetterSecondBot.DiscordSupervisor LastStatusMessage = NewStatusMessage; if (HasBasicBot() == true) { + controler.TickAdverts(); controler.getBot().Log2File(LogFormater.Status(LastStatusMessage, false), ConsoleLogLogLevel.Status); } else diff --git a/BetterSecondbot/DiscordSupervisor/DiscordBot.cs b/BetterSecondbot/DiscordSupervisor/DiscordBot.cs index 21537e1..1683531 100644 --- a/BetterSecondbot/DiscordSupervisor/DiscordBot.cs +++ b/BetterSecondbot/DiscordSupervisor/DiscordBot.cs @@ -6,23 +6,64 @@ using BetterSecondBotShared.Static; using Discord.WebSocket; using System.Threading.Tasks; using System.Linq; - +using System.Timers; +using BetterSecondBotShared.logs; + namespace BetterSecondBot.DiscordSupervisor { public abstract class DiscordBot : DiscordInbound { + protected Timer ReconnectTimer; protected virtual async Task StartDiscordClientService() { DiscordClient = new DiscordSocketClient(); DiscordClient.Ready += DiscordClientReady; DiscordClient.LoggedOut += DiscordClientLoggedOut; + DiscordClient.LoggedIn += DicordClientLoggedin; DiscordClient.MessageReceived += DiscordClientMessageReceived; + ReconnectTimer = new Timer(); + ReconnectTimer.Interval = 10000; + ReconnectTimer.Elapsed += ReconnectTimerEvent; + ReconnectTimer.AutoReset = false; + ReconnectTimer.Enabled = false; + LogFormater.Info("Discord is starting", true); await DiscordClient.LoginAsync(TokenType.Bot, myconfig.DiscordFull_Token); - _ = DiscordClient.StartAsync(); + + } + + protected override Task DiscordClientLoggedOut() + { + LogFormater.Info("Discord has logged out", true); + ReconnectTimer = new Timer(); + ReconnectTimer.Interval = 10000; + ReconnectTimer.Elapsed += ReconnectTimerEvent; + ReconnectTimer.AutoReset = false; + ReconnectTimer.Enabled = false; + return Task.CompletedTask; + } + + protected virtual async Task DicordClientLoggedin() + { + LogFormater.Info("Discord has logged in", true); + await DiscordClient.StartAsync().ConfigureAwait(false); + ReconnectTimer = new Timer(); + ReconnectTimer.Interval = 10000; + ReconnectTimer.Elapsed += ReconnectTimerEvent; + ReconnectTimer.AutoReset = false; + ReconnectTimer.Enabled = false; + return Task.CompletedTask; + } + + private void ReconnectTimerEvent(Object source, System.Timers.ElapsedEventArgs e) + { + ReconnectTimer.Enabled = false; + _ = StartDiscordClientService().ConfigureAwait(false); } protected virtual async Task DiscordClientReady() { + LogFormater.Info("Discord is active", true); + ReconnectTimer.Enabled = false; await DiscordClient.SetStatusAsync(Discord.UserStatus.Idle); await DiscordClient.SetGameAsync("Not connected", null, ActivityType.CustomStatus); DiscordServer = DiscordClient.GetGuild(myconfig.DiscordFull_ServerID); diff --git a/BetterSecondbot/DiscordSupervisor/Functions.cs b/BetterSecondbot/DiscordSupervisor/Functions.cs index 8ff9689..355b6f8 100644 --- a/BetterSecondbot/DiscordSupervisor/Functions.cs +++ b/BetterSecondbot/DiscordSupervisor/Functions.cs @@ -26,7 +26,7 @@ namespace BetterSecondBot.DiscordSupervisor } return false; } - protected Task DiscordClientLoggedOut() + protected virtual Task DiscordClientLoggedOut() { DiscordClientConnected = false; return Task.CompletedTask; diff --git a/BetterSecondbot/Properties/PublishProfiles/Windows.pubxml b/BetterSecondbot/Properties/PublishProfiles/Windows.pubxml new file mode 100644 index 0000000..7522d54 --- /dev/null +++ b/BetterSecondbot/Properties/PublishProfiles/Windows.pubxml @@ -0,0 +1,18 @@ + + + + + Release + Any CPU + D:\publish + FileSystem + netcoreapp3.1 + win-x64 + true + True + False + False + + \ No newline at end of file diff --git a/LibreMetaverse/LibreMetaverse.XML b/LibreMetaverse/LibreMetaverse.XML index 1a7113b..2694fc5 100644 --- a/LibreMetaverse/LibreMetaverse.XML +++ b/LibreMetaverse/LibreMetaverse.XML @@ -32227,6 +32227,12 @@ A struct containing media details + + true if avatars outside can hear any sounds avatars inside play + + + true if group members outside can hear any sounds avatars inside play + Displays a parcel object in string format