From a3543053347d46ea6458f7ff75811459a6b396f0 Mon Sep 17 00:00:00 2001 From: Basique Evangelist Date: Mon, 9 Dec 2019 08:53:38 +0000 Subject: [PATCH] Make TimeoutManager exit early on messaged user --- JetKarmaBot/JetKarmaBot.cs | 3 ++- .../Services/Handling/TimeoutManager.cs | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/JetKarmaBot/JetKarmaBot.cs b/JetKarmaBot/JetKarmaBot.cs index 80781fc..1d27d6e 100644 --- a/JetKarmaBot/JetKarmaBot.cs +++ b/JetKarmaBot/JetKarmaBot.cs @@ -98,9 +98,10 @@ namespace JetKarmaBot void InitChain(IContainer c) { Chain = new RequestChain(); + Chain.Add(c.GetInstance()); Chain.Add(c.GetInstance()); Chain.Add(Timeout); - Chain.Add(new SaveData()); + Chain.Add(c.GetInstance()); Chain.Add(Commands); } diff --git a/JetKarmaBot/Services/Handling/TimeoutManager.cs b/JetKarmaBot/Services/Handling/TimeoutManager.cs index 2f6faf5..e3e4237 100644 --- a/JetKarmaBot/Services/Handling/TimeoutManager.cs +++ b/JetKarmaBot/Services/Handling/TimeoutManager.cs @@ -11,6 +11,26 @@ namespace JetKarmaBot.Services.Handling [Singleton] public class TimeoutManager : IRequestHandler { + public class PreDbThrowout : IRequestHandler + { + public TimeoutManager Timeout { get; } + public PreDbThrowout(TimeoutManager timeout) + { + Timeout = timeout; + } + + public async Task Handle(RequestContext ctx, Func next) + { + int uid = ctx.EventArgs.Message.From.Id; + if (Timeout.TimeoutCache.TryGetValue(uid, out var stats)) + { + DateTime debtLimit = DateTime.Now.AddSeconds(Timeout.cfg.Timeout.DebtLimitSeconds); + if (debtLimit < stats.CooldownDate && stats.TimeoutMessaged) + return; + } + await next(ctx); + } + } public struct TimeoutStats { public DateTime CooldownDate;