Skip to content

Commit 7215d71

Browse files
authored
Improve Null Safety, Add More Logging
1 parent fd166df commit 7215d71

File tree

4 files changed

+44
-9
lines changed

4 files changed

+44
-9
lines changed

src/main/java/io/codemc/bot/commands/CmdApplication.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import net.dv8tion.jda.api.entities.MessageEmbed;
3131
import net.dv8tion.jda.api.entities.Role;
3232
import net.dv8tion.jda.api.entities.User;
33+
import net.dv8tion.jda.api.entities.MessageEmbed.Footer;
3334
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
3435
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
3536
import net.dv8tion.jda.api.exceptions.ErrorHandler;
@@ -88,28 +89,36 @@ public static void handle(CodeMCBot bot, InteractionHook hook, Guild guild, long
8889
}
8990

9091
MessageEmbed embed = embeds.get(0);
91-
if(embed.getFooter() == null || embed.getFields().isEmpty()){
92+
Footer footer = embed.getFooter();
93+
if(footer == null || embed.getFields().isEmpty()){
9294
CommandUtil.EmbedReply.from(hook).error("Embed does not have a footer or any Embed Fields.").send();
9395
return;
9496
}
95-
96-
String userId = embed.getFooter().getText().trim();
97-
if(userId == null || userId.isEmpty()){
97+
98+
String footerText = footer.getText();
99+
if(footerText == null || footerText.isEmpty()){
98100
CommandUtil.EmbedReply.from(hook).error("Embed does not have a valid footer.").send();
99101
return;
100102
}
101-
103+
104+
String userId = footerText.trim();
102105
String userLink = null;
103106
String repoLink = null;
104107
for(MessageEmbed.Field field : embed.getFields()){
105-
if(field.getName() == null || field.getValue() == null)
108+
String name = field.getName();
109+
if(name == null || field.getValue() == null)
106110
continue;
107111

108-
if(field.getName().equalsIgnoreCase("user/organisation:")){
112+
if(name.equalsIgnoreCase("user/organisation:")){
109113
userLink = field.getValue();
110114
}else
111-
if(field.getName().equalsIgnoreCase("repository:")){
115+
if(name.equalsIgnoreCase("repository:")){
112116
String link = field.getValue();
117+
if (link == null || link.isEmpty()) {
118+
CommandUtil.EmbedReply.from(hook).error("Repository field is empty!").send();
119+
return;
120+
}
121+
113122
String url = link.substring(link.indexOf("(") + 1, link.indexOf(")"));
114123

115124
repoLink = url.isEmpty() ? link : url;

src/main/java/io/codemc/bot/commands/CmdCodeMC.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,10 @@ public void withHookReply(InteractionHook hook, SlashCommandEvent event, Guild g
234234

235235
long id = dbUser.getDiscord();
236236
Member user = guild.getMemberById(id);
237+
if (user == null) {
238+
CommandUtil.EmbedReply.from(hook).success("Successfully removed " + username + " from the CodeMC Services!").send();
239+
return;
240+
}
237241

238242
Role authorRole = guild.getRoleById(bot.getConfigHandler().getLong("author_role"));
239243
if (authorRole == null) {

src/main/java/io/codemc/bot/config/ConfigHandler.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ public class ConfigHandler{
3636

3737
private final Logger logger = LoggerFactory.getLogger(ConfigHandler.class);
3838
private final File file = new File("./config.json");
39+
private boolean loaded = false;
3940

4041
private ConfigurationNode node = null;
4142

4243
public ConfigHandler(){}
4344

4445
public boolean loadConfig(){
46+
if (loaded) return reloadConfig();
4547
logger.info("Loading config.json...");
4648

4749
if(!file.exists()){
@@ -59,6 +61,7 @@ public boolean loadConfig(){
5961
}
6062
}
6163

64+
loaded = true;
6265
return reloadConfig();
6366
}
6467

@@ -102,4 +105,12 @@ public List<String> getStringList(Object... path){
102105
return Collections.emptyList();
103106
}
104107
}
108+
109+
public void set(Object value, Object... path){
110+
try{
111+
node.node(path).set(value);
112+
}catch(SerializationException ex){
113+
logger.error("Unable to set value in Configuration!", ex);
114+
}
115+
}
105116
}

src/main/java/io/codemc/bot/listeners/ButtonListener.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@
3232
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
3333
import net.dv8tion.jda.api.interactions.modals.Modal;
3434
import org.jetbrains.annotations.NotNull;
35+
import org.slf4j.Logger;
36+
import org.slf4j.LoggerFactory;
3537

3638
import java.util.List;
3739

3840
public class ButtonListener extends ListenerAdapter{
3941

4042
private final CodeMCBot bot;
43+
private final Logger logger = LoggerFactory.getLogger(ButtonListener.class);
4144

4245
public ButtonListener(CodeMCBot bot){
4346
this.bot = bot;
@@ -61,6 +64,7 @@ public void onButtonInteraction(@NotNull ButtonInteractionEvent event){
6164

6265
if(acceptApplicationRoles.isEmpty() || denyApplicationRoles.isEmpty()){
6366
CommandUtil.EmbedReply.from(event).error("No roles for accepting or denying applications set!").send();
67+
logger.error("No roles for accepting or denying applications set!");
6468
return;
6569
}
6670

@@ -69,8 +73,15 @@ public void onButtonInteraction(@NotNull ButtonInteractionEvent event){
6973
CommandUtil.EmbedReply.from(event).error("Cannot get Member from Server!").send();
7074
return;
7175
}
76+
77+
String id = event.getButton().getId();
78+
if (id == null) {
79+
CommandUtil.EmbedReply.from(event).error("Received Button Interaction with no ID!").send();
80+
logger.error("Received Button Interaction with no ID!");
81+
return;
82+
}
7283

73-
String[] values = event.getButton().getId().split(":");
84+
String[] values = id.split(":");
7485
if(values.length < 4 || !values[0].equals("application")){
7586
CommandUtil.EmbedReply.from(event).error("Received non-application button event!").send();
7687
return;

0 commit comments

Comments
 (0)