/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.techcavern.wavetact.ircCommands.dnsinfo;
import com.techcavern.wavetact.annot.IRCCMD;
import com.techcavern.wavetact.objects.IRCCommand;
import com.techcavern.wavetact.utils.GeneralUtils;
import com.techcavern.wavetact.utils.IRCUtils;
import org.apache.commons.lang3.StringUtils;
import org.pircbotx.Channel;
import org.pircbotx.PircBotX;
import org.pircbotx.User;
import org.xbill.DNS.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author jztech101
*/
@IRCCMD
public class DNSInfo extends IRCCommand {
public DNSInfo() {
super(GeneralUtils.toArray("dnsinfo di dns"), 1, "dnsinfo [domain]", "Looks up a domain for information", false);
}
@Override
public void onCommand(String command, User user, PircBotX network, String prefix, Channel channel, boolean isPrivate, int userPermLevel, String... args) throws Exception {
Resolver resolver = new SimpleResolver();
String domain = args[0];
domain = domain.replace("http://", "").replace("https://", "");
Lookup lookup = new Lookup(domain, Type.ANY);
lookup.setResolver(resolver);
lookup.setCache(null);
Record[] records = lookup.run();
if (lookup.getResult() == Lookup.SUCCESSFUL) {
List<String> results = new ArrayList<>();
for (Record rec : records) {
if (rec instanceof ARecord) {
results.add("[" + Type.string(rec.getType()) + "] " + ((ARecord) rec).getAddress().toString().replace("./", "/"));
} else if (rec instanceof NSRecord) {
results.add("[" + Type.string(rec.getType()) + "] " + ((NSRecord) rec).getTarget().toString().replace("./", "/"));
} else if (rec instanceof AAAARecord) {
results.add( "[" + Type.string(rec.getType()) + "] " + ((AAAARecord) rec).getAddress().toString().replace("./", "/"));
} else if (rec instanceof CNAMERecord) {
results.add("[" + Type.string(rec.getType()) + "] " + ((CNAMERecord) rec).getAlias() + " - " + ((CNAMERecord) rec).getTarget());
} else if (rec instanceof TXTRecord) {
results.add( "[" + Type.string(rec.getType()) + "] " + StringUtils.join(rec, " "));
} else if (rec instanceof MXRecord) {
results.add("[" + Type.string(rec.getType()) + "] " + ((MXRecord) rec).getPriority() + " - " + ((MXRecord) rec).getTarget());
} else if (rec instanceof SRVRecord) {
}
}
IRCUtils.sendMessage(user, network, channel,StringUtils.join(results, " - "), prefix);
}else{
IRCUtils.sendError(user, network, channel, "Invalid domain", prefix);
}
}
}