import com.github.masahitojp.botan.Botan;
import com.github.masahitojp.botan.adapter.SlackRTMAdapter;
import com.github.masahitojp.botan.brain.mapdb.MapDBBrain;
import com.github.masahitojp.botan.exception.BotanException;
import com.google.common.base.Strings;
import models.ConfigReader;
import models.Database;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Optional;
public class Bootstrap {
private static Logger log = LoggerFactory.getLogger(Bootstrap.class);
private Optional<Botan> botStoppable = Optional.empty();
public Bootstrap() {
}
public int startUp() throws IOException {
log.info("slack-capybara start.");
// DB
Database.initialize();
// bot env
final ConfigReader reader = ConfigReader.getInstance();
if(Strings.isNullOrEmpty(reader.getSlackApiToken())) {
throw new IllegalArgumentException("slack.api.token is null or empty");
}
final Botan botan;
botan = new Botan
.BotanBuilder()
.setAdapter(new SlackRTMAdapter(reader.getSlackApiToken()))
.setBrain(new MapDBBrain(reader.getKvsURI(), reader.getKvsName()))
.build();
this.botStoppable = Optional.ofNullable(botan);
return 0;
}
public void stop() {
log.info("slack-capybara stop");
botStoppable.ifPresent(botan -> {
try {
botan.stop();
} catch (final Exception e) {
log.warn("", e);
}
});
Database.dispose();
}
public static void main(final String[] args) throws IOException {
final Bootstrap bootstrap = new Bootstrap();
bootstrap.startUp();
java.lang.Runtime.getRuntime().addShutdownHook(
new Thread() {
@Override
public void run() {
bootstrap.stop();
}
}
);
bootstrap.botStoppable.ifPresent(botan -> {
try {
botan.start();
} catch (final BotanException e) {
log.warn("", e);
}
});
}
}