1
1
package org .togetherjava .tjbot .commands .reminder ;
2
2
3
+ import net .dv8tion .jda .api .entities .Guild ;
3
4
import net .dv8tion .jda .api .entities .ISnowflake ;
4
5
import net .dv8tion .jda .api .entities .User ;
5
6
import net .dv8tion .jda .api .events .interaction .command .SlashCommandInteractionEvent ;
25
26
*
26
27
* <pre>
27
28
* {@code
28
- * /remind amount: 5 unit: weeks content: Hello World!
29
+ * /remind time- amount: 5 time- unit: weeks content: Hello World!
29
30
* }
30
31
* </pre>
31
32
* <p>
32
33
* Pending reminders are processed and send by {@link RemindRoutine}.
33
34
*/
34
35
public final class RemindCommand extends SlashCommandAdapter {
35
36
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" ;
39
40
40
41
private static final int MIN_TIME_AMOUNT = 1 ;
41
42
private static final int MAX_TIME_AMOUNT = 1_000 ;
42
43
private static final List <String > TIME_UNITS =
43
44
List .of ("minutes" , "hours" , "days" , "weeks" , "months" , "years" );
44
45
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 ;
46
47
47
48
private final Database database ;
48
49
@@ -78,11 +79,12 @@ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
78
79
79
80
Instant remindAt = parseWhen (timeAmount , timeUnit );
80
81
User author = event .getUser ();
82
+ Guild guild = event .getGuild ();
81
83
82
84
if (!handleIsRemindAtWithinLimits (remindAt , event )) {
83
85
return ;
84
86
}
85
- if (!handleIsUserBelowMaxPendingReminders (author , event )) {
87
+ if (!handleIsUserBelowMaxPendingReminders (author , guild , event )) {
86
88
return ;
87
89
}
88
90
@@ -92,7 +94,7 @@ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
92
94
93
95
database .write (context -> context .newRecord (PENDING_REMINDERS )
94
96
.setCreatedAt (Instant .now ())
95
- .setGuildId (event . getGuild () .getIdLong ())
97
+ .setGuildId (guild .getIdLong ())
96
98
.setChannelId (event .getChannel ().getIdLong ())
97
99
.setAuthorId (author .getIdLong ())
98
100
.setRemindAt (remindAt )
@@ -133,9 +135,10 @@ private static boolean handleIsRemindAtWithinLimits(@NotNull Instant remindAt,
133
135
}
134
136
135
137
private boolean handleIsUserBelowMaxPendingReminders (@ NotNull ISnowflake author ,
136
- @ NotNull IReplyCallback event ) {
138
+ @ NotNull ISnowflake guild , @ NotNull IReplyCallback event ) {
137
139
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 ()))));
139
142
140
143
if (pendingReminders < MAX_PENDING_REMINDERS_PER_USER ) {
141
144
return true ;
0 commit comments