Make TimeoutManager exit early on messaged user

This commit is contained in:
Basique Evangelist 2019-12-09 08:53:38 +00:00
parent a4f94428ce
commit a354305334
Signed by untrusted user: BasiqueEvangelist
GPG Key ID: B370219149301706
2 changed files with 22 additions and 1 deletions

View File

@ -98,9 +98,10 @@ namespace JetKarmaBot
void InitChain(IContainer c)
{
Chain = new RequestChain();
Chain.Add(c.GetInstance<TimeoutManager.PreDbThrowout>());
Chain.Add(c.GetInstance<DatabaseHandler>());
Chain.Add(Timeout);
Chain.Add(new SaveData());
Chain.Add(c.GetInstance<SaveData>());
Chain.Add(Commands);
}

View File

@ -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<RequestContext, Task> 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;