From 07df2ed45039d93020911cb9882ea39c858f96e3 Mon Sep 17 00:00:00 2001
From: Toastie <toastie@toastiet0ast.com>
Date: Sat, 29 Mar 2025 21:20:58 +1300
Subject: [PATCH] vote has no cooldown, fixed some responses, improved voting
 logic

---
 src/EllieBot/Modules/Gambling/Gambling.cs     | 19 +--------------
 .../Modules/Gambling/VoteRewardService.cs     | 23 ++-----------------
 src/EllieBot/strings/aliases.yml              |  3 +++
 .../strings/responses/responses.en-US.json    |  1 -
 4 files changed, 6 insertions(+), 40 deletions(-)

diff --git a/src/EllieBot/Modules/Gambling/Gambling.cs b/src/EllieBot/Modules/Gambling/Gambling.cs
index e6e9392..e809b71 100644
--- a/src/EllieBot/Modules/Gambling/Gambling.cs
+++ b/src/EllieBot/Modules/Gambling/Gambling.cs
@@ -152,29 +152,12 @@ public partial class Gambling : GamblingModule<GamblingService>
             return;
         }
 
-        if (await _vrs.LastVoted(ctx.User.Id) is { } remainder)
-        {
-            // Get correct time form remainder
-            var interaction = CreateRemindMeInteraction(remainder.TotalMilliseconds);
-
-            // Removes timely button if there is a timely reminder in DB
-            if (_service.UserHasTimelyReminder(ctx.User.Id))
-            {
-                interaction = null;
-            }
-
-            var now = DateTime.UtcNow;
-            var relativeTag = TimestampTag.FromDateTime(now.Add(remainder), TimestampTagStyles.Relative);
-            await Response().Pending(strs.vote_already_claimed(relativeTag)).Interaction(interaction).SendAsync();
-            return;
-        }
-
         var (amount, msg) = await _service.GetAmountAndMessage(ctx.User.Id, reward);
 
         var prepend = GetText(strs.vote_suggest(Format.Bold(N(amount))));
         msg = prepend + "\n\n" + msg;
 
-        var inter = CreateRemindMeInteraction(6) as EllieButtonInteractionHandler;
+        var inter = CreateRemindMeInteraction(12) as EllieButtonInteractionHandler;
         var eb = CreateEmbed()
           .WithOkColor()
           .WithDescription(msg);
diff --git a/src/EllieBot/Modules/Gambling/VoteRewardService.cs b/src/EllieBot/Modules/Gambling/VoteRewardService.cs
index 06a48ad..2be7df2 100644
--- a/src/EllieBot/Modules/Gambling/VoteRewardService.cs
+++ b/src/EllieBot/Modules/Gambling/VoteRewardService.cs
@@ -10,15 +10,11 @@ public class VoteRewardService(
     GamblingConfigService gcs,
     GamblingService gs,
     CurrencyService cs,
-    IBotCache cache,
     DiscordSocketClient client,
     IMessageSenderService sender,
     IBotCreds creds
 ) : IEService, IReadyExecutor
 {
-    private TypedKey<DateTime> VoteKey(ulong userId)
-        => new($"vote:{userId}");
-
     private Server? _app;
     private IMessageChannel? _voteFeedChannel;
 
@@ -63,13 +59,6 @@ public class VoteRewardService(
         if (reward <= 0)
             return;
 
-        var key = VoteKey(userId);
-        if (!await cache.AddAsync(key, DateTime.UtcNow, expiry: TimeSpan.FromHours(6)))
-        {
-            Log.Information("User {UserId} has already voted in the last 6 hours", userId);
-            return;
-        }
-
         (reward, var msg) = await gs.GetAmountAndMessage(userId, reward);
         await cs.AddAsync(userId, reward, new("vote", requestType.ToString()));
 
@@ -79,7 +68,8 @@ public class VoteRewardService(
             {
                 var user = await client.GetUserAsync(userId);
 
-                await sender.Response(user)
+                await sender
+                    .Response(user)
                     .Confirm(strs.vote_reward(N(reward)) + "\n\n" + msg)
                     .SendAsync();
             }
@@ -108,15 +98,6 @@ public class VoteRewardService(
         });
     }
 
-    public async Task<TimeSpan?> LastVoted(ulong userId)
-    {
-        var key = VoteKey(userId);
-        var last = await cache.GetAsync(key);
-        return last.Match(
-            static x => DateTime.UtcNow.Subtract(x),
-            static _ => default(TimeSpan?));
-    }
-
     private string N(long amount)
         => CurrencyHelper.N(amount, CultureInfo.InvariantCulture, gcs.Data.Currency.Sign);
 }
diff --git a/src/EllieBot/strings/aliases.yml b/src/EllieBot/strings/aliases.yml
index aee816e..9f8d448 100644
--- a/src/EllieBot/strings/aliases.yml
+++ b/src/EllieBot/strings/aliases.yml
@@ -1661,6 +1661,9 @@ questlog:
   - questlog
   - qlog
   - myquests
+  - quest
+  - quests
+  - dailies
 fishshop:
   - fishshop
   - fishop
diff --git a/src/EllieBot/strings/responses/responses.en-US.json b/src/EllieBot/strings/responses/responses.en-US.json
index 0518c14..9eee84a 100644
--- a/src/EllieBot/strings/responses/responses.en-US.json
+++ b/src/EllieBot/strings/responses/responses.en-US.json
@@ -930,7 +930,6 @@
   "autodc_disable": "I will no longer disconnect from the voice channel when there are no more tracks to play.",
   "timely_none": "Bot owner didn't specify a timely reward.",
   "timely_already_claimed": "You've already claimed your timely reward. You can get it again {0}.",
-  "vote_already_claimed": "You've already voted. You can vote again {0}.",
   "timely": "You've claimed your {0}. You can claim again in {1}h",
   "timely_set": "Users will be able to claim {0} every {1}h",
   "timely_set_none": "Users will not be able to claim any timely currency.",