From fb1e010d7895a99a1ba742f5106bc5b4d50024b2 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Sun, 9 Jun 2024 11:10:57 +0100 Subject: [PATCH 1/2] Add PurgeClaims timer --- src/buttonEvents/Claim.ts | 8 ++++++++ src/client/client.ts | 7 +++++-- src/contracts/AppBaseEntity.ts | 6 ++++++ src/timers/PurgeClaims.ts | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 src/timers/PurgeClaims.ts diff --git a/src/buttonEvents/Claim.ts b/src/buttonEvents/Claim.ts index 4f7f5ae..04c7f7f 100644 --- a/src/buttonEvents/Claim.ts +++ b/src/buttonEvents/Claim.ts @@ -20,6 +20,14 @@ export default class Claim extends ButtonEvent { const droppedBy = interaction.customId.split(" ")[3]; const userId = interaction.user.id; + const whenDropped = interaction.message.createdAt; + const lastClaimableDate = new Date(Date.now() - (1000 * 60 * 5)); // 5 minutes ago + + if (whenDropped < lastClaimableDate) { + await interaction.channel.send(`${interaction.user}, Cards can only be claimed within 5 minutes of it being dropped!`); + return; + } + AppLogger.LogSilly("Button/Claim", `Parameters: cardNumber=${cardNumber}, claimId=${claimId}, droppedBy=${droppedBy}, userId=${userId}`); const user = await User.FetchOneById(User, userId) || new User(userId, CardConstants.StartingCurrency); diff --git a/src/client/client.ts b/src/client/client.ts index 384843d..117bdb9 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -16,6 +16,7 @@ import { SeriesMetadata } from "../contracts/SeriesMetadata"; import AppLogger from "./appLogger"; import TimerHelper from "../helpers/TimerHelper"; import GiveCurrency from "../timers/GiveCurrency"; +import PurgeClaims from "../timers/PurgeClaims"; export class CoreClient extends Client { private static _commandItems: ICommandItem[]; @@ -79,8 +80,10 @@ export class CoreClient extends Client { .then(() => { AppLogger.LogInfo("Client", "App Data Source Initialised"); - const timerId = this._timerHelper.AddTimer("*/20 * * * *", "Europe/London", GiveCurrency, false); - this._timerHelper.StartTimer(timerId); + this._timerHelper.AddTimer("*/20 * * * *", "Europe/London", GiveCurrency, false); + this._timerHelper.AddTimer("0 0 * * *", "Europe/London", PurgeClaims, false); + + this._timerHelper.StartAllTimers(); }) .catch(err => { AppLogger.LogError("Client", "App Data Source Initialisation Failed"); diff --git a/src/contracts/AppBaseEntity.ts b/src/contracts/AppBaseEntity.ts index 3eb9684..43bed74 100644 --- a/src/contracts/AppBaseEntity.ts +++ b/src/contracts/AppBaseEntity.ts @@ -39,6 +39,12 @@ export default class AppBaseEntity { await repository.remove(entity); } + public static async RemoveMany(target: EntityTarget, entity: T[]): Promise { + const repository = AppDataSource.getRepository(target); + + await repository.remove(entity); + } + public static async FetchAll(target: EntityTarget, relations?: string[]): Promise { const repository = AppDataSource.getRepository(target); diff --git a/src/timers/PurgeClaims.ts b/src/timers/PurgeClaims.ts new file mode 100644 index 0000000..c689e1b --- /dev/null +++ b/src/timers/PurgeClaims.ts @@ -0,0 +1,14 @@ +import AppLogger from "../client/appLogger"; +import Claim from "../database/entities/app/Claim"; + +export default async function PurgeClaims() { + const claims = await Claim.FetchAll(Claim); + + const whenLastClaimable = new Date(Date.now() - (1000 * 60 * 5)); // 5 minutes ago + + const expiredClaims = claims.filter(x => x.WhenCreated < whenLastClaimable); + + await Claim.RemoveMany(Claim, expiredClaims); + + AppLogger.LogDebug("Timers/PurgeClaims", `Purged ${expiredClaims.length} claims from the database`); +} \ No newline at end of file -- 2.43.4 From 2988ced7f835fe156a4a3992146786b512eadd3a Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Sat, 15 Jun 2024 20:55:10 +0100 Subject: [PATCH 2/2] Update logging level to info --- src/timers/PurgeClaims.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timers/PurgeClaims.ts b/src/timers/PurgeClaims.ts index c689e1b..a0ed9d0 100644 --- a/src/timers/PurgeClaims.ts +++ b/src/timers/PurgeClaims.ts @@ -10,5 +10,5 @@ export default async function PurgeClaims() { await Claim.RemoveMany(Claim, expiredClaims); - AppLogger.LogDebug("Timers/PurgeClaims", `Purged ${expiredClaims.length} claims from the database`); + AppLogger.LogInfo("Timers/PurgeClaims", `Purged ${expiredClaims.length} claims from the database`); } \ No newline at end of file -- 2.43.4