package polly.greeting;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import de.skuzzle.polly.sdk.IrcManager;
import de.skuzzle.polly.sdk.eventlistener.IrcUser;
import de.skuzzle.polly.sdk.eventlistener.MessageAdapter;
import de.skuzzle.polly.sdk.eventlistener.MessageEvent;
import de.skuzzle.polly.sdk.eventlistener.MessageListener;
import de.skuzzle.polly.sdk.eventlistener.SpotEvent;
import de.skuzzle.polly.sdk.eventlistener.UserSpottedListener;
public class DailyGreeter {
private final static Set<String> GREETINGS;
static {
final String[] greetings = MSG.greeterGreetings.split(","); //$NON-NLS-1$
GREETINGS = new HashSet<String>(Arrays.asList(greetings));
}
private final static Set<String> QUESTIONS;
static {
final String[] questions = MSG.greeterQuestions.split(","); //$NON-NLS-1$
QUESTIONS = new HashSet<String>(Arrays.asList(questions));
}
private final Set<IrcUser> greeted;
private final Set<IrcUser> answered;
private final UserSpottedListener spottedListener = new UserSpottedListener() {
@Override
public void userSpotted(SpotEvent ignore) {}
@Override
public void userLost(SpotEvent e) {
greeted.remove(e.getUser());
}
};
private final MessageListener messageListener = new MessageAdapter() {
@Override
public void publicMessage(MessageEvent e) {
this.deliverGreet(e);
}
public void privateMessage(MessageEvent e) {
this.deliverGreet(e);
};
private final void deliverGreet(MessageEvent e) {
final String msg = e.getMessage().toLowerCase();
if (greeted.contains(e.getUser())) {
if (answered.contains(e.getUser())){
return;
}
for (String question : QUESTIONS) {
String incomingQuestion = question.toLowerCase();
if (msg.equals(incomingQuestion)) {
answered.add(e.getUser());
String answer = "Gut!" + " Danke der Nachfrage " + e.getUser().getNickName() + ".";
e.getSource().sendMessage(e.getChannel(), answer, this);
return;
}
}
}
final String nick = e.getSource().getNickname().toLowerCase();
if (!msg.contains(nick)) {
return;
}
for (String greeting : GREETINGS) {
String incomingGreet = greeting.toLowerCase() + " " + nick; //$NON-NLS-1$
if (msg.contains(incomingGreet)) {
greeted.add(e.getUser());
String greet = greeting + " " + e.getUser().getNickName(); //$NON-NLS-1$
e.getSource().sendMessage(e.getChannel(), greet, this);
return;
}
}
}
};
public DailyGreeter() {
this.greeted = Collections.synchronizedSet(new HashSet<IrcUser>());
this.answered = Collections.synchronizedSet(new HashSet<IrcUser>());
}
public void deploy(IrcManager ircManager) {
ircManager.addUserSpottedListener(this.spottedListener);
ircManager.addMessageListener(this.messageListener);
}
public void undeploy(IrcManager ircManager) {
ircManager.removeUserSpottedListener(this.spottedListener);
ircManager.removeMessageListener(this.messageListener);
}
}