From 588c93b87de69fc940758657a583359ce09e483b Mon Sep 17 00:00:00 2001 From: Daan Boerlage Date: Sat, 30 Oct 2021 14:47:56 +0200 Subject: [PATCH] Check the users previous roll in the /roll command --- src/Web/Commands/Roll.cs | 32 ++++++++++++++++++++++++++++---- src/Web/Commands/RollTimeout.cs | 9 +++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/Web/Commands/RollTimeout.cs diff --git a/src/Web/Commands/Roll.cs b/src/Web/Commands/Roll.cs index 352e5fa..211faef 100644 --- a/src/Web/Commands/Roll.cs +++ b/src/Web/Commands/Roll.cs @@ -1,16 +1,26 @@ -using System.Collections.Generic; +using System; using System.Threading.Tasks; +using Geekbot.Core.Database; using Geekbot.Core.Interactions; using Geekbot.Core.Interactions.ApplicationCommand; using Geekbot.Core.Interactions.Request; -using Geekbot.Core.Interactions.Resolved; using Geekbot.Core.Interactions.Response; +using Geekbot.Core.KvInMemoryStore; using Geekbot.Core.RandomNumberGenerator; namespace Geekbot.Web.Commands { public class Roll : InteractionBase { + private readonly IKvInMemoryStore _kvInMemoryStore; + private readonly IRandomNumberGenerator _randomNumberGenerator; + + public Roll(IKvInMemoryStore kvInMemoryStore, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator) + { + _kvInMemoryStore = kvInMemoryStore; + _randomNumberGenerator = randomNumberGenerator; + } + public override Command GetCommandInfo() { return new Command() @@ -36,13 +46,27 @@ namespace Geekbot.Web.Commands var guessOption = interaction.Data.Options.Find(o => o.Name == "guess"); var guess = guessOption.Value.GetInt32(); - var number = new RandomNumberGenerator().Next(1, 100); + var number = _randomNumberGenerator.Next(1, 100); var replyContent = ""; if (guess <= 100 && guess > 0) { - replyContent = $"{interaction?.Member?.User?.Mention}, you rolled {number}, your guess was {guess}"; + var kvKey = $"{interaction.GuildId}:{interaction.Member.User.Id}:RollsPrevious"; + var prevRoll = _kvInMemoryStore.Get(kvKey); + + if (prevRoll?.LastGuess == guess && prevRoll?.GuessedOn.AddDays(1) > DateTime.Now) + { + replyContent = string.Format( + ":red_circle: {0}, you can't guess the same number again, guess another number or wait {1}", + interaction.Member.Nick ?? interaction.Member.User.Username, + prevRoll.GuessedOn.AddDays(1)); + } + else + { + _kvInMemoryStore.Set(kvKey, new RollTimeout {LastGuess = guess, GuessedOn = DateTime.Now}); + replyContent = $"{interaction.Member?.User?.Mention}, you rolled {number}, your guess was {guess}"; + } } else { diff --git a/src/Web/Commands/RollTimeout.cs b/src/Web/Commands/RollTimeout.cs new file mode 100644 index 0000000..5b23873 --- /dev/null +++ b/src/Web/Commands/RollTimeout.cs @@ -0,0 +1,9 @@ +using System; + +namespace Geekbot.Web.Commands; + +public record RollTimeout +{ + public int LastGuess { get; set; } + public DateTime GuessedOn { get; set; } +} \ No newline at end of file