summaryrefslogtreecommitdiff
path: root/src/main/java/net/tylermurphy/ken/command/moderation/TempBan.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/tylermurphy/ken/command/moderation/TempBan.java')
-rw-r--r--src/main/java/net/tylermurphy/ken/command/moderation/TempBan.java109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/main/java/net/tylermurphy/ken/command/moderation/TempBan.java b/src/main/java/net/tylermurphy/ken/command/moderation/TempBan.java
new file mode 100644
index 0000000..62696ad
--- /dev/null
+++ b/src/main/java/net/tylermurphy/ken/command/moderation/TempBan.java
@@ -0,0 +1,109 @@
+package net.tylermurphy.ken.command.moderation;
+
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.Permission;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.PrivateChannel;
+import net.dv8tion.jda.api.entities.Role;
+import net.dv8tion.jda.api.exceptions.ErrorResponseException;
+import net.dv8tion.jda.api.interactions.commands.OptionType;
+import net.tylermurphy.ken.Ken;
+import net.tylermurphy.ken.command.Response;
+import net.tylermurphy.ken.command.annotation.Command;
+import net.tylermurphy.ken.command.annotation.Option;
+import net.tylermurphy.ken.command.annotation.Requirement;
+import net.tylermurphy.ken.database.ModerationTable;
+import net.tylermurphy.ken.util.Checks;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.awt.*;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+public class TempBan {
+
+ @Command(name="tempban", description="Temp ban a user and delete all messages in past 24h")
+ @Option(name="member", description="Member to temp-ban", type= OptionType.USER, required=true)
+ @Option(name="days", description="Days for temp ban", type= OptionType.INTEGER, required=true)
+ @Option(name="hours", description="Hours for temp ban", type= OptionType.INTEGER, required=true)
+ @Option(name="reason", description="Reason to temp-ban", type=OptionType.STRING, required=true)
+ @Option(name="deletemessages", description="Delete messages from past 24h", type=OptionType.BOOLEAN, required=true)
+ @Requirement(Permission.BAN_MEMBERS)
+ public Response execute(Member sender, List<Object> args, Guild guild){
+ Member target = (Member) args.get(0);
+ int days = (int) args.get(1);
+ int hours = (int) args.get(2);
+ String reason = (String) args.get(3);
+ boolean purge = (boolean) args.get(4);
+ if(target == sender){
+ return Response.error("You are not allowed to do this to yourself");
+ }
+ Role low = Checks.getHighestRole(target);
+ Role high = Checks.getHighestRole(sender);
+ if(!Checks.getRolePermission(high, low)){
+ return Response.error("You need a higher role than the target");
+ }
+ Role self = Checks.getHighestRole(guild.getSelfMember());
+ if(!Checks.getRolePermission(self, low)){
+ return Response.error("I need a higher role than the target");
+ }
+ if(hours < 0){
+ return Response.error("Hours must be 0 or greater");
+ }
+ if(days < 0){
+ return Response.error("Days must be 0 or greater");
+ }
+ if(days == 0 && hours == 0){
+ return Response.error("Time to ban cannot be 0");
+ }
+
+ try {
+ guild.retrieveBan(target).complete();
+ return Response.error("User is already banned from this server");
+ } catch (ErrorResponseException ignored) {}
+
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(new Date());
+ cal.add(Calendar.DATE, days);
+ cal.add(Calendar.HOUR, hours);
+ SimpleDateFormat format = new SimpleDateFormat("L d, y ha zz");
+ String date = format.format(cal.getTime());
+
+ ModerationTable table = Ken.getInstance().getDatabase().getModerationTable();
+ String data = table.getData(guild.getIdLong(), target.getUser().getIdLong());
+ JSONObject json = table.updateData(data);
+
+ JSONObject status = json.getJSONObject("status");
+ status.put("type", "temp-ban");
+ status.put("reason", reason);
+ status.put("until", cal.getTime().getTime());
+ json.put("status", status);
+
+ JSONArray history = json.getJSONArray("history");
+ history.put(new JSONObject().put("type", "temp-ban").put("reason", reason).put("date",new Date().getTime()));
+ json.put("history", history);
+
+ table.setData(guild.getIdLong(), target.getUser().getIdLong(), json.toString());
+
+ PrivateChannel channel = target.getUser().openPrivateChannel().complete();
+ if(channel != null){
+ EmbedBuilder builder = Ken.getInstance().getDefaultEmbed()
+ .setColor(Color.red)
+ .setTitle("**Temp Banned**")
+ .appendDescription("You have been temporarily banned from "+guild.getName()+"\n")
+ .appendDescription("`By:` " + sender.getEffectiveName()+"\n")
+ .appendDescription("`Reason:` " + reason)
+ .appendDescription("`Until:` " + date);
+ channel.sendMessageEmbeds(builder.build()).queue();
+ }
+ guild.ban(target,purge ? 1 : 0,reason).queue();
+ EmbedBuilder builder = Ken.getInstance().getDefaultEmbed()
+ .appendDescription(String.format("Temporarily banned %s for %s until %s", target.getEffectiveName(), reason, date));
+ return Response.success(builder.build());
+ }
+
+}