package de.skuzzle.polly.core.eventhandler;
import org.jibble.pircbot.Colors;
import de.skuzzle.polly.core.internal.users.UserManagerImpl;
import de.skuzzle.polly.sdk.IrcManager;
import de.skuzzle.polly.sdk.eventlistener.MessageEvent;
import de.skuzzle.polly.sdk.eventlistener.MessageType;
import de.skuzzle.polly.sdk.exceptions.AlreadySignedOnException;
import de.skuzzle.polly.sdk.exceptions.UnknownUserException;
public class FreenodeAutoLoginProvider implements AutoLoginProvider {
private final static String INFORMATION_OF = "information on "; //$NON-NLS-1$
@Override
public boolean supportsNetwork(String server) {
return server.toLowerCase().contains("freenode"); //$NON-NLS-1$
}
@Override
public void requestAuthentification(String forUser, IrcManager irc) {
irc.sendRawCommand("NICKSERV INFO " + forUser); //$NON-NLS-1$
}
@Override
public boolean processMessageEvent(MessageEvent e, UserManagerImpl users)
throws AlreadySignedOnException, UnknownUserException {
if (e.getType() != MessageType.NOTICE) {
return false;
} else if (!e.getUser().getNickName().toLowerCase().equals("nickserv")) { //$NON-NLS-1$
return false;
}
final int i = e.getMessage().toLowerCase().indexOf(INFORMATION_OF);
if (i != -1) {
final int start = i + INFORMATION_OF.length();
final int j = e.getMessage().indexOf(" ", start + 1); //$NON-NLS-1$
if (j < 0) {
return false;
}
final String forUser = Colors.removeFormattingAndColors(
e.getMessage().substring(start, j));
users.logonWithoutPassword(forUser);
return true;
}
return false;
}
@Override
public String toString() {
return "FreenodeAutoLoginProvider"; //$NON-NLS-1$
}
}