Skip to content

Instantly share code, notes, and snippets.

@dlinsin
Created October 12, 2009 09:54
Show Gist options
  • Save dlinsin/208294 to your computer and use it in GitHub Desktop.
Save dlinsin/208294 to your computer and use it in GitHub Desktop.
public class Bot extends PircBot {
private boolean silentMode = false;
private Collection<NotificationService> notificationServices;
private Collection<String> messages;
private Timer messagesTimer;
static final int MESSAGE_BATCH_SIZE = 20;
static final int MESSAGE_BATCH_DELAY_MS = 60000;
@Override
protected void onMessage(String argChannel, String argSender, String argLogin, String argHostname, String argMessage) {
batchMessages(format(argSender, argMessage));
}
@Override
protected void onJoin(String argChannel, String argSender, String argLogin, String argHostname) {
User[] users = super.getUsers(argChannel);
switchSilentMode(users);
}
@Override
protected void onQuit(String argChannel, String argSender, String argLogin, String argHostname) {
User[] users = super.getUsers(argChannel);
switchSilentMode(users);
}
private void switchSilentMode(User[] argUsers) {
for (int i = 0; i < argUsers.length; i++) {
User user = argUsers[i];
if (user.getNick().equals(alterEgoName)) {
silentMode = true;
return;
}
}
silentMode = false;
}
private void batchMessages(String argMessage) {
if (messages.isEmpty()) {
messages.add(argMessage);
messagesTimer.schedule(new TimerTask() {
public void run() {
processMessages();
messagesTimer.purge();
}
}, MESSAGE_BATCH_DELAY_MS);
} else if (messages.size() < MESSAGE_BATCH_SIZE) {
messages.add(argMessage);
} else {
processMessages();
messagesTimer.purge();
}
}
private void processMessages() {
StringBuilder builder = new StringBuilder();
for (String message : messages) {
builder.append(message).append("\n");
}
sendToService("message", builder.toString());
messages.clear();
}
private void sendToService(String argTitle, String argMessage) {
for (NotificationService service : notificationServices) {
if (!silentMode) {
service.notify(argTitle, argMessage);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment