Skip to content

Commit b8a270d

Browse files
committed
Bugfix with remind-command mixing reminders across guilds
1 parent 755cc4a commit b8a270d

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

application/src/main/java/org/togetherjava/tjbot/commands/reminder/RemindCommand.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.togetherjava.tjbot.commands.reminder;
22

3+
import net.dv8tion.jda.api.entities.Guild;
34
import net.dv8tion.jda.api.entities.ISnowflake;
45
import net.dv8tion.jda.api.entities.User;
56
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
@@ -25,24 +26,24 @@
2526
*
2627
* <pre>
2728
* {@code
28-
* /remind amount: 5 unit: weeks content: Hello World!
29+
* /remind time-amount: 5 time-unit: weeks content: Hello World!
2930
* }
3031
* </pre>
3132
* <p>
3233
* Pending reminders are processed and send by {@link RemindRoutine}.
3334
*/
3435
public final class RemindCommand extends SlashCommandAdapter {
3536
private static final String COMMAND_NAME = "remind";
36-
private static final String TIME_AMOUNT_OPTION = "time-amount";
37-
private static final String TIME_UNIT_OPTION = "time-unit";
38-
private static final String CONTENT_OPTION = "content";
37+
static final String TIME_AMOUNT_OPTION = "time-amount";
38+
static final String TIME_UNIT_OPTION = "time-unit";
39+
static final String CONTENT_OPTION = "content";
3940

4041
private static final int MIN_TIME_AMOUNT = 1;
4142
private static final int MAX_TIME_AMOUNT = 1_000;
4243
private static final List<String> TIME_UNITS =
4344
List.of("minutes", "hours", "days", "weeks", "months", "years");
4445
private static final Period MAX_TIME_PERIOD = Period.ofYears(3);
45-
private static final int MAX_PENDING_REMINDERS_PER_USER = 100;
46+
static final int MAX_PENDING_REMINDERS_PER_USER = 100;
4647

4748
private final Database database;
4849

@@ -78,11 +79,12 @@ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
7879

7980
Instant remindAt = parseWhen(timeAmount, timeUnit);
8081
User author = event.getUser();
82+
Guild guild = event.getGuild();
8183

8284
if (!handleIsRemindAtWithinLimits(remindAt, event)) {
8385
return;
8486
}
85-
if (!handleIsUserBelowMaxPendingReminders(author, event)) {
87+
if (!handleIsUserBelowMaxPendingReminders(author, guild, event)) {
8688
return;
8789
}
8890

@@ -92,7 +94,7 @@ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
9294

9395
database.write(context -> context.newRecord(PENDING_REMINDERS)
9496
.setCreatedAt(Instant.now())
95-
.setGuildId(event.getGuild().getIdLong())
97+
.setGuildId(guild.getIdLong())
9698
.setChannelId(event.getChannel().getIdLong())
9799
.setAuthorId(author.getIdLong())
98100
.setRemindAt(remindAt)
@@ -133,9 +135,10 @@ private static boolean handleIsRemindAtWithinLimits(@NotNull Instant remindAt,
133135
}
134136

135137
private boolean handleIsUserBelowMaxPendingReminders(@NotNull ISnowflake author,
136-
@NotNull IReplyCallback event) {
138+
@NotNull ISnowflake guild, @NotNull IReplyCallback event) {
137139
int pendingReminders = database.read(context -> context.fetchCount(PENDING_REMINDERS,
138-
PENDING_REMINDERS.AUTHOR_ID.equal(author.getIdLong())));
140+
PENDING_REMINDERS.AUTHOR_ID.equal(author.getIdLong())
141+
.and(PENDING_REMINDERS.GUILD_ID.equal(guild.getIdLong()))));
139142

140143
if (pendingReminders < MAX_PENDING_REMINDERS_PER_USER) {
141144
return true;

0 commit comments

Comments
 (0)