package tterrag.tppibot.registry;
import java.util.Map;
import org.pircbotx.PircBotX;
import org.pircbotx.User;
import org.pircbotx.hooks.WaitForQueue;
import org.pircbotx.hooks.events.JoinEvent;
import org.pircbotx.hooks.events.NickChangeEvent;
import org.pircbotx.hooks.events.QuitEvent;
import org.pircbotx.hooks.events.WhoisEvent;
import tterrag.tppibot.Main;
import com.google.common.collect.Maps;
import com.google.common.eventbus.Subscribe;
public enum WhoisCache {
INSTANCE;
private Map<String, String> whoisCache = Maps.newHashMap();
public String getAccount(User user) {
return whoisCache.computeIfAbsent(user.getNick(), s -> addOrUpdateEntry(user));
}
@SuppressWarnings("unchecked")
public String addOrUpdateEntry(User user) {
String acct;
WaitForQueue waitForQueue = new WaitForQueue(Main.bot);
WhoisEvent<PircBotX> test = null;
try {
Main.bot.sendRaw().rawLineNow("WHOIS " + user.getNick());
test = waitForQueue.waitFor(WhoisEvent.class);
waitForQueue.close();
acct = test.getRegisteredAs();
} catch (InterruptedException ex) {
ex.printStackTrace();
acct = null;
}
whoisCache.put(user.getNick(), acct);
return acct;
}
@Subscribe
public void onJoin(JoinEvent<PircBotX> event) {
addOrUpdateEntry(event.getUser());
}
@Subscribe
public void onNickChange(NickChangeEvent<PircBotX> event) {
whoisCache.remove(event.getUser().getNick());
addOrUpdateEntry(event.getUser());
}
@Subscribe
public void onQuit(QuitEvent<PircBotX> event) {
whoisCache.remove(event.getUser().getNick());
}
}