11package org .togetherjava .tjbot .commands .reminder ;
22
3+ import net .dv8tion .jda .api .entities .Guild ;
34import net .dv8tion .jda .api .entities .ISnowflake ;
45import net .dv8tion .jda .api .entities .User ;
56import net .dv8tion .jda .api .events .interaction .command .SlashCommandInteractionEvent ;
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 */
3435public 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