package com.mcmoddev.bot.command; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.HashMap; import java.util.Map; import com.mcmoddev.bot.util.Utilities; import sx.blah.discord.handle.obj.IChannel; import sx.blah.discord.handle.obj.IMessage; import sx.blah.discord.util.EmbedBuilder; public class CommandPruneChannels extends CommandAdmin { @Override public void processCommand (IMessage message, String[] params) { final LocalDateTime current = LocalDateTime.now(); final int minDaysOfInactivity = params.length == 2 ? Integer.parseInt(params[1]) : 7; final EmbedBuilder embed = new EmbedBuilder(); final Map<String, Integer> channels = new HashMap<>(); for (final IChannel channel : message.getGuild().getChannels()) { if (channel.getName().equalsIgnoreCase("getting-started")) continue; try { final IMessage latest = channel.getMessages().getLatestMessage(); if (latest != null) { final int daysSinceUsed = Math.toIntExact(ChronoUnit.DAYS.between(latest.getCreationDate(), current)); if (daysSinceUsed >= minDaysOfInactivity) channels.put("#" + channel.getName(), daysSinceUsed); } } catch (final ArrayIndexOutOfBoundsException e) { channels.put("#" + channel.getName(), -1); } } embed.ignoreNullEmptyFields(); embed.withColor((int) (Math.random() * 0x1000000)); embed.withDesc(Utilities.mapToString(Utilities.sortByValue(channels, true))); Utilities.sendMessage(message.getChannel(), "The following channels have not been used in " + minDaysOfInactivity + " days.", embed.build()); } @Override public String getDescription () { return "Lists all channels which have not been used in 7 days. You can change the amount of days to look for by adding a number to the end of the command."; } }