package net.bavrd.limbs;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.vertx.java.core.Handler;
import org.vertx.java.core.eventbus.Message;
import org.vertx.java.core.json.JsonObject;
import net.bavrd.core.BavrdComponent;
import net.bavrd.core.BavrdVerticle;
import net.bavrd.core.EventEnum;
import net.bavrd.core.FaceMessage;
public class Echo extends BavrdVerticle {
private static final Pattern SAY_PATTERN = Pattern.compile("say (.*)");
private static final Pattern ECHO_PATTERN = Pattern.compile("echo (.*)");
private static final String DEFAULT_SAY_FORMAT = "%u told me to say '%m'";
protected String sayFormat;
@Override
public void startBavrd() {
sayFormat = container.config().getString("sayFormat", DEFAULT_SAY_FORMAT);
vertx.eventBus().registerHandler(EventEnum.INCOMING.vertxEndpoint, new Handler<Message<JsonObject>>() {
@Override
public void handle(Message<JsonObject> m) {
FaceMessage fm = FaceMessage.decodeFrom(m.body());
Matcher sayMatcher = SAY_PATTERN.matcher(fm.message);
if (sayMatcher.matches()) {
String text = sayFormat.replaceAll("%u", fm.userName).replaceAll("%m", sayMatcher.group(1));
FaceMessage reply = fm.reply(text);
vertx.eventBus().send(EventEnum.OUTGOING.vertxEndpoint, reply.asJson());
return;
}
Matcher echoMatcher = ECHO_PATTERN.matcher(fm.message);
if (echoMatcher.matches()) {
FaceMessage reply = fm.reply(echoMatcher.group(1));
vertx.eventBus().send(EventEnum.OUTGOING.vertxEndpoint, reply.asJson());
}
}
});
}
@Override
public BavrdComponent getType() {
return BavrdComponent.LIMB;
}
@Override
public java.util.Map<String, String> getHelp() {
Map<String, String> help = new HashMap<>();
help.put("echo X", "will echo back <code>X</code> to you");
help.put("say X", "will echo back <code>X</code> to you, inside a phrase like <i>user told me to say 'X'</i>");
return help;
}
}