diff options
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.java | 109 |
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()); + } + +} |