package com.techcavern.wavetact.utils;
import com.techcavern.wavetact.eventListeners.ConnectListener;
import org.jooq.Record;
import org.pircbotx.Configuration;
import org.pircbotx.PircBotX;
import org.pircbotx.UtilSSLSocketFactory;
import javax.net.ssl.SSLSocketFactory;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import static com.techcavern.wavetactdb.Tables.NETWORKS;
public class ConfigUtils {
public static void registerNetworks() {
PircBotX network;
for (Record netRecord : DatabaseUtils.getNetworks()) {
network = createNetwork(netRecord.getValue(NETWORKS.SERVERPASS), netRecord.getValue(NETWORKS.NICK), netRecord.getValue(NETWORKS.SERVER), netRecord.getValue(NETWORKS.PORT), netRecord.getValue(NETWORKS.BINDHOST), netRecord.getValue(NETWORKS.NAME), netRecord.getValue(NETWORKS.SSL));
if (netRecord != null) {
Registry.WaveTact.addNetwork(network);
Registry.networks.put(netRecord.getValue(NETWORKS.NAME), network);
}
}
}
public static PircBotX createNetwork(String serverpass, String nick, String server, int port, String bindhost, String networkname, boolean SSL) {
if (nick.isEmpty() || server.isEmpty()) {
DatabaseUtils.removeNetwork(networkname);
System.out.println("Removing Server " + networkname);
return null;
} else if (IRCUtils.getNetworkByNetworkName(networkname) != null) {
DatabaseUtils.removeNetwork(networkname);
System.out.println("Removing Server " + networkname);
return null;
}
Configuration.Builder Net = new Configuration.Builder();
Net.setName(nick);
Net.setLogin(nick);
Net.setEncoding(Charset.isSupported("UTF-8") ? Charset.forName("UTF-8") : Charset.defaultCharset());
if (bindhost != null) {
try {
Net.setLocalAddress(InetAddress.getByName(bindhost));
} catch (UnknownHostException e) {
System.out.println("Failed to resolve bindhost on " + networkname);
System.exit(0);
}
}
Net.addServer(server, port);
Net.setRealName(nick);
Net.getListenerManager().addListener(new ConnectListener());
Net.setAutoReconnect(true);
if (serverpass != null) {
Net.setServerPassword(serverpass);
}
Net.setAutoReconnectAttempts(5);
Net.setAutoReconnectDelay(20000);
Net.setChannelPrefixes("#");
Net.setUserLevelPrefixes("+%@&~!");
Net.setVersion(Registry.VERSION);
if(SSL)
Net.setSocketFactory(new UtilSSLSocketFactory().trustAllCertificates());
Net.setAutoReconnect(true);
return new PircBotX(Net.buildConfiguration());
}
}