Skip to content

Commit 2c97172

Browse files
committed
Store form's message channel and id as longs instead of Strings
1 parent b62574d commit 2c97172

File tree

11 files changed

+51
-41
lines changed

11 files changed

+51
-41
lines changed

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/FormInteractionManager.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ public class FormInteractionManager implements ButtonHandler, ModalHandler {
7676
public void closeForm(Guild guild, FormData form) {
7777
formsRepo.closeForm(form);
7878

79-
if (form.getMessageChannel() != null && form.getMessageId() != null) {
80-
TextChannel formChannel = guild.getTextChannelById(form.getMessageChannel());
81-
formChannel.retrieveMessageById(form.getMessageId()).queue(msg -> {
79+
if (form.isAttached()) {
80+
TextChannel formChannel = guild.getTextChannelById(form.getMessageChannel().get());
81+
formChannel.retrieveMessageById(form.getMessageId().get()).queue(msg -> {
8282
mapFormMessageButtons(msg, btn -> {
8383
String cptId = btn.getId();
8484
String[] split = ComponentIdBuilder.split(cptId);
@@ -190,9 +190,9 @@ public void mapFormMessageButtons(Message msg, Function<Button, Button> mapper)
190190
public void reopenForm(Guild guild, FormData form) {
191191
formsRepo.reopenForm(form);
192192

193-
if (form.getMessageChannel() != null && form.getMessageId() != null) {
194-
TextChannel formChannel = guild.getTextChannelById(form.getMessageChannel());
195-
formChannel.retrieveMessageById(form.getMessageId()).queue(msg -> {
193+
if (form.isAttached()) {
194+
TextChannel formChannel = guild.getTextChannelById(form.getMessageChannel().get());
195+
formChannel.retrieveMessageById(form.getMessageId().get()).queue(msg -> {
196196
mapFormMessageButtons(msg, btn -> {
197197
String cptId = btn.getId();
198198
String[] split = ComponentIdBuilder.split(cptId);

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/commands/AttachFormSubcommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void execute(SlashCommandInteractionEvent event) {
6363
}
6464
FormData form = formOpt.get();
6565

66-
if (form.getMessageChannel() != null && form.getMessageId() != null) {
66+
if (form.isAttached()) {
6767
event.getHook()
6868
.sendMessage("The form seems to already be attached to a message. Detach it before continuing.")
6969
.queue();

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/commands/CreateFormSubcommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void execute(SlashCommandInteractionEvent event) {
5252

5353
long formId = System.currentTimeMillis();
5454
FormData form = new FormData(formId, List.of(), event.getOption("title", OptionMapping::getAsString),
55-
event.getOption("submit-channel", OptionMapping::getAsChannel).getId(),
55+
event.getOption("submit-channel", OptionMapping::getAsChannel).getIdLong(),
5656
event.getOption("submit-message", null, OptionMapping::getAsString), null, null, expiration, false,
5757
event.getOption("onetime", false, OptionMapping::getAsBoolean));
5858

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/commands/DeleteFormSubcommand.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ public void execute(SlashCommandInteractionEvent event) {
4848
FormData form = formOpt.get();
4949
formsRepo.deleteForm(form);
5050

51-
if (form.getMessageChannel() != null && form.getMessageId() != null) {
51+
if (form.isAttached()) {
5252
DetachFormSubcommand.detachFromMessage(form, event.getGuild());
53+
// TODO send a warning
5354
}
5455

5556
event.getHook().sendMessage("Form deleted!").queue();

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/commands/DetachFormSubcommand.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void execute(SlashCommandInteractionEvent event) {
5454
}
5555
FormData form = formOpt.get();
5656

57-
if (form.getMessageChannel() == null && form.getMessageId() == null) {
57+
if (!form.isAttached()) {
5858
event.getHook().sendMessage("This form doesn't seem to be attached to a message").queue();
5959
return;
6060
}
@@ -80,8 +80,9 @@ public void handleAutoComplete(CommandAutoCompleteInteractionEvent event, AutoCo
8080
* @param guild guild this form is contained in
8181
*/
8282
public static void detachFromMessage(FormData form, Guild guild) {
83-
TextChannel formChannel = guild.getTextChannelById(form.getMessageChannel());
84-
formChannel.retrieveMessageById(form.getMessageId()).queue(msg -> {
83+
if(!form.isAttached()) return;
84+
TextChannel formChannel = guild.getTextChannelById(form.getMessageChannel().get());
85+
formChannel.retrieveMessageById(form.getMessageId().get()).queue(msg -> {
8586
List<ActionRow> components = msg.getActionRows().stream().map(row -> {
8687
ItemComponent[] cpts = row.getComponents().stream().filter(cpt -> {
8788
if (cpt instanceof Button btn) {

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/commands/DetailsFormSubcommand.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,10 @@ private EmbedBuilder createFormDetailsEmbed(FormData form, Guild guild) {
8080
addCodeblockField(builder, "State", form.isClosed() ? "Closed" : form.hasExpired() ? "Expired" : "Open", false);
8181

8282
builder.addField("Attached in",
83-
form.getMessageChannel() == null ? "*Not attached*" : "<#" + form.getMessageChannel() + ">", true);
83+
form.isAttached() ? "<#" + form.getMessageChannel().get() + ">" : "*Not attached*", true);
8484
builder.addField("Attached to",
85-
form.getMessageChannel() == null || form.getMessageId() == null ? "*Not attached*"
86-
: String.format("[Link](https://discord.com/channels/%s/%s/%s)", guild.getId(),
87-
form.getMessageChannel(), form.getMessageId()),
85+
form.isAttached() ? String.format("[Link](https://discord.com/channels/%s/%s/%s)", guild.getId(),
86+
form.getMessageChannel().get(), form.getMessageId().get()) : "*Not attached*",
8887
true);
8988

9089
builder.addField("Submissions channel", "<#" + form.getSubmitChannel() + ">", true);

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/commands/ModifyFormSubcommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ public void execute(SlashCommandInteractionEvent event) {
5656
FormData oldForm = formOpt.get();
5757

5858
String title = event.getOption("title", oldForm.getTitle(), OptionMapping::getAsString);
59-
String submitChannel = event.getOption("submit-channel", oldForm.getSubmitChannel(),
60-
OptionMapping::getAsString);
59+
long submitChannel = event.getOption("submit-channel", oldForm.getSubmitChannel(), OptionMapping::getAsLong);
6160
String submitMessage = event.getOption("submit-message", oldForm.getSubmitMessage(),
6261
OptionMapping::getAsString);
6362
long expiration;
@@ -72,7 +71,8 @@ public void execute(SlashCommandInteractionEvent event) {
7271
boolean onetime = event.getOption("onetime", oldForm.isOnetime(), OptionMapping::getAsBoolean);
7372

7473
FormData newForm = new FormData(oldForm.getId(), oldForm.getFields(), title, submitChannel, submitMessage,
75-
oldForm.getMessageId(), oldForm.getMessageChannel(), expiration, oldForm.isClosed(), onetime);
74+
oldForm.getMessageId().orElse(null), oldForm.getMessageChannel().orElse(null), expiration,
75+
oldForm.isClosed(), onetime);
7676

7777
formsRepo.updateForm(newForm);
7878

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/commands/RemoveFieldFormSubcommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void execute(SlashCommandInteractionEvent event) {
5252
return;
5353
}
5454

55-
if (form.getMessageChannel() != null && form.getMessageId() != null && form.getFields().size() <= 1) {
55+
if (form.isAttached() && form.getFields().size() <= 1) {
5656
event.getHook().sendMessage(
5757
"Can't remove the last field from an attached form. Detach the form before removing the field")
5858
.queue();

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/dao/FormsRepository.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ public PreparedStatement createPreparedStatement(Connection con) throws SQLExcep
218218
"insert into `forms` (title, submit_message, submit_channel, message_id, message_channel, expiration, onetime) values (?, ?, ?, ?, ?, ?, ?)");
219219
statement.setString(1, data.getTitle());
220220
statement.setString(2, data.getSubmitMessage());
221-
statement.setString(3, data.getSubmitChannel());
222-
statement.setString(4, data.getMessageId());
223-
statement.setString(5, data.getMessageChannel());
221+
statement.setLong(3, data.getSubmitChannel());
222+
statement.setObject(4, data.getMessageId().orElse(null));
223+
statement.setObject(5, data.getMessageChannel().orElse(null));
224224
statement.setLong(6, data.getExpiration());
225225
statement.setBoolean(7, data.isOnetime());
226226
return statement;
@@ -281,7 +281,7 @@ public void updateForm(FormData newData) {
281281
PreparedStatement statement = con.prepareStatement(
282282
"update `forms` set `title` = ?, `submit_channel` = ?, `submit_message` = ?, `expiration` = ?, `onetime` = ? where `form_id` = ?");
283283
statement.setString(1, newData.getTitle());
284-
statement.setString(2, newData.getSubmitChannel());
284+
statement.setLong(2, newData.getSubmitChannel());
285285
statement.setString(3, newData.getSubmitMessage());
286286
statement.setLong(4, newData.getExpiration());
287287
statement.setBoolean(5, newData.isOnetime());
@@ -296,9 +296,13 @@ private List<FormField> readFormFields(long formId) {
296296
}
297297

298298
private static FormData read(ResultSet rs, List<FormField> fields) throws SQLException {
299-
return new FormData(rs.getLong("form_id"), fields, rs.getString("title"), rs.getString("submit_channel"),
300-
rs.getString("submit_message"), rs.getString("message_id"), rs.getString("message_channel"),
301-
rs.getLong("expiration"), rs.getBoolean("closed"), rs.getBoolean("onetime"));
299+
Long messageId = rs.getLong("message_id");
300+
if (rs.wasNull()) messageId = null;
301+
Long messageChannel = rs.getLong("message_channel");
302+
if (rs.wasNull()) messageChannel = null;
303+
return new FormData(rs.getLong("form_id"), fields, rs.getString("title"), rs.getLong("submit_channel"),
304+
rs.getString("submit_message"), messageId, messageChannel, rs.getLong("expiration"),
305+
rs.getBoolean("closed"), rs.getBoolean("onetime"));
302306
}
303307

304308
private static FormField readField(ResultSet rs) throws SQLException {

src/main/java/net/discordjug/javabot/systems/staff_commands/forms/model/FormData.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Date;
55
import java.util.List;
66
import java.util.Objects;
7+
import java.util.Optional;
78

89
import net.discordjug.javabot.systems.staff_commands.forms.FormInteractionManager;
910
import net.dv8tion.jda.api.interactions.components.ActionRow;
@@ -24,10 +25,10 @@ public class FormData {
2425
private final long expiration;
2526
private final List<FormField> fields;
2627
private final long id;
27-
private final String messageId;
28-
private final String messageChannel;
28+
private final Long messageId;
29+
private final Long messageChannel;
2930
private final boolean onetime;
30-
private final String submitChannel;
31+
private final long submitChannel;
3132
private final String submitMessage;
3233
private final String title;
3334

@@ -56,12 +57,12 @@ public class FormData {
5657
* @param onetime Whether or not this form accepts one submission per
5758
* user.
5859
*/
59-
public FormData(long id, List<FormField> fields, String title, String submitChannel, String submitMessage,
60-
String messageId, String messageChannel, long expiration, boolean closed, boolean onetime) {
60+
public FormData(long id, List<FormField> fields, String title, long submitChannel, String submitMessage,
61+
Long messageId, Long messageChannel, long expiration, boolean closed, boolean onetime) {
6162
this.id = id;
6263
this.fields = Objects.requireNonNull(fields);
6364
this.title = Objects.requireNonNull(title);
64-
this.submitChannel = Objects.requireNonNull(submitChannel);
65+
this.submitChannel = submitChannel;
6566
this.submitMessage = submitMessage;
6667
this.messageId = messageId;
6768
this.messageChannel = messageChannel;
@@ -70,6 +71,10 @@ public FormData(long id, List<FormField> fields, String title, String submitChan
7071
this.onetime = onetime;
7172
}
7273

74+
public boolean isAttached() {
75+
return messageChannel != null && messageId != null;
76+
}
77+
7378
/**
7479
* Creates text components for use in the submission modal.
7580
*
@@ -95,15 +100,15 @@ public long getId() {
95100
return id;
96101
}
97102

98-
public String getMessageChannel() {
99-
return messageChannel;
103+
public Optional<Long> getMessageChannel() {
104+
return Optional.ofNullable(messageChannel);
100105
}
101106

102-
public String getMessageId() {
103-
return messageId;
107+
public Optional<Long> getMessageId() {
108+
return Optional.ofNullable(messageId);
104109
}
105110

106-
public String getSubmitChannel() {
111+
public long getSubmitChannel() {
107112
return submitChannel;
108113
}
109114

0 commit comments

Comments
 (0)