package io.shockah.skylark;
import io.shockah.skylark.plugin.BotService;
import io.shockah.skylark.plugin.PluginManager;
import io.shockah.skylark.util.ReadWriteList;
import java.util.ArrayList;
import org.pircbotx.Configuration;
import org.pircbotx.PircBotX;
public class Bot extends PircBotX {
public final BotManager manager;
public final WhoisManager whoisManager;
public final ReadWriteList<BotService> services = new ReadWriteList<>(new ArrayList<>());
public Bot(Configuration configuration, BotManager manager) {
super(configuration);
this.manager = manager;
setupServices();
whoisManager = new WhoisManager(this);
getConfiguration().getListenerManager().addListener(whoisManager);
}
public void setupServices() {
services.writeOperation(services -> {
PluginManager pluginManager = manager.serverManager.app.pluginManager;
pluginManager.botServiceFactories.iterate(factory -> {
BotService service = factory.createService(this);
services.add(service);
pluginManager.botServices.add(service);
});
});
}
@SuppressWarnings("unchecked")
public <T extends BotService> T getService(Class<T> clazz) {
return (T)services.filterFirst(service -> clazz.isInstance(service));
}
}