diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..81fbf9c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "lib/api"] + path = lib/api + url = git@github.com:ShivamMistry/speedsircapi diff --git a/lib/api b/lib/api new file mode 160000 index 0000000..674a60b --- /dev/null +++ b/lib/api @@ -0,0 +1 @@ +Subproject commit 674a60bc4589d945ac169f3c153933098eee2a56 diff --git a/pom.xml b/pom.xml index c262fc1..bf441b3 100644 --- a/pom.xml +++ b/pom.xml @@ -84,6 +84,25 @@ + + org.codehaus.mojo + build-helper-maven-plugin + 1.7 + + + add-source + generate-sources + + add-source + + + + lib/api/src + + + + + org.apache.maven.plugins maven-dependency-plugin diff --git a/run.sh b/run.sh index d9e05d9..17b7815 100755 --- a/run.sh +++ b/run.sh @@ -8,5 +8,6 @@ git pull >> git.log mvn clean package nohup java -cp `cat target/classpath.cp`:target/FreeVoteBot-1.0.0.jar org.freecode.irc.votebot.BootStrap > /dev/null 2>&1 & #nohup java -cp `cat target/classpath.cp`:target/FreeVoteBot-1.0.0.jar org.freecode.irc.votebot.BootStrap & +#java -cp `cat target/classpath.cp`:target/FreeVoteBot-1.0.0.jar org.freecode.irc.votebot.BootStrap pid=$! echo $pid > freevotepid diff --git a/src/main/java/org/freecode/irc/CtcpRequest.java b/src/main/java/org/freecode/irc/CtcpRequest.java deleted file mode 100644 index d9a9ebf..0000000 --- a/src/main/java/org/freecode/irc/CtcpRequest.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.freecode.irc; - -/** - * User: Shivam - * Date: 25/07/13 - * Time: 14:23 - */ -public class CtcpRequest extends Privmsg { - public static final char CTCP = '\u0001'; - private final String command; - private final String arguments; - - public CtcpRequest(String rawLine, IrcConnection connection) { - super(rawLine, connection); - String message = getMessage(); - if (message.charAt(0) == CTCP && message.charAt(message.length() - 1) == CTCP) { - message = message.replace(String.valueOf(CTCP), "").trim(); - String[] sstr = message.split(" ", 2); - if (sstr.length > 0) { - command = sstr[0]; - arguments = sstr.length > 1 ? sstr[1] : null; - } else { - throw new IllegalArgumentException("Not a valid CTCP request"); - } - } else { - throw new IllegalArgumentException("Not a valid CTCP request"); - } - } - - public CtcpRequest(IrcConnection connection, String target, String command, String arguments) { - super(target, CTCP + command + " " + arguments + CTCP, connection); - this.command = command; - this.arguments = arguments; - } - - public String getCommand() { - return command; - } - - public String getArguments() { - return arguments; - } - - public static boolean isCtcpRequest(final String raw) { - String[] parts = raw.split(" ", 4); - if (parts.length == 4 && parts[1].equalsIgnoreCase("PRIVMSG")) { - String msg = parts[3]; - if (msg.startsWith(":")) { - msg = msg.substring(1); - } - return msg.charAt(0) == CTCP && msg.charAt(msg.length() - 1) == CTCP; - } - return false; - } -} diff --git a/src/main/java/org/freecode/irc/CtcpResponse.java b/src/main/java/org/freecode/irc/CtcpResponse.java deleted file mode 100644 index 98bc446..0000000 --- a/src/main/java/org/freecode/irc/CtcpResponse.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.freecode.irc; - -import static org.freecode.irc.CtcpRequest.CTCP; - -/** - * User: Shivam - * Date: 28/07/13 - * Time: 21:48 - */ -public class CtcpResponse extends Notice { - - private final String command; - private final String response; - - public CtcpResponse(String rawLine, IrcConnection connection) { - super(rawLine, connection); - String message = getMessage(); - if (message.charAt(0) == CTCP && message.charAt(message.length() - 1) == CTCP) { - message = message.replace(String.valueOf(CTCP), "").trim(); - String[] sstr = message.split(" ", 2); - if (sstr.length > 0) { - command = sstr[0]; - response = sstr.length > 1 ? sstr[1] : null; - } else { - throw new IllegalArgumentException("Not a valid CTCP response"); - } - } else { - throw new IllegalArgumentException("Not a valid CTCP response"); - } - } - - public CtcpResponse(IrcConnection connection, final String target, final String command, final String response) { - super(target, CTCP + command + " " + response + CTCP, connection); - this.command = command; - this.response = response; - } - public String getCommand() { - return command; - } - - public String getResponse() { - return response; - } - - - public static boolean isCtcpResponse(final String raw) { - String[] parts = raw.split(" ", 4); - if (parts.length == 4 && parts[1].equalsIgnoreCase("NOTICE")) { - String msg = parts[3]; - if (msg.startsWith(":")) { - msg = msg.substring(1); - } - return msg.charAt(0) == CTCP && msg.charAt(msg.length() - 1) == CTCP; - } - return false; - } -} diff --git a/src/main/java/org/freecode/irc/IrcConnection.java b/src/main/java/org/freecode/irc/IrcConnection.java deleted file mode 100644 index c1ec022..0000000 --- a/src/main/java/org/freecode/irc/IrcConnection.java +++ /dev/null @@ -1,172 +0,0 @@ -package org.freecode.irc; - -import org.freecode.irc.event.internal.*; - -import java.io.*; -import java.net.Socket; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.*; - -/** - * User: Shivam - * Date: 16/06/13 - * Time: 22:30 - */ -public class IrcConnection implements Runnable { - - private BufferedReader reader; - private BufferedWriter writer; - private Socket socket; - private String host; - private int port; - private volatile List listeners; - private volatile List delegateListeners; - private ScheduledExecutorService executor; - private Future readerFuture; - public static final int ERR_NICKNAMEINUSE = 433; - private ConcurrentLinkedQueue rawLines = new ConcurrentLinkedQueue<>(); - private final ScheduledFuture writerFuture; - - public IrcConnection(final String host, final int port) throws IOException { - this.host = host; - this.port = port; - this.socket = new Socket(host, port); - reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); - writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); - listeners = new LinkedList<>(); - delegateListeners = new LinkedList<>(); - executor = Executors.newScheduledThreadPool(2); - addListener(new RawPrivateMessageProcessor(this)); - addListener(new RawNoticeProcessor(this)); - addListener(new RawJoinProcessor(this)); - readerFuture = executor.scheduleAtFixedRate(this, 100L, 100L, TimeUnit.MILLISECONDS); - writerFuture = executor.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - if (socket.isOutputShutdown()) { - writerFuture.cancel(true); - return; - } - if (!rawLines.isEmpty()) { - String s = rawLines.poll(); - System.out.println("Out: " + s); - try { - writer.write(s); - writer.newLine(); - writer.flush(); - } catch (IOException e) { - e.printStackTrace(); - } - - } - } - }, 100L, 100L, TimeUnit.MILLISECONDS); - } - - public void joinChannel(String channel) { - try { - sendRaw("JOIN :" + channel); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void addListener(final DelegateListener listener) { - delegateListeners.add(listener); - } - - public void removeListener(final DelegateListener listener) { - delegateListeners.remove(listener); - } - - - public void addListener(final RawIrcListener listener) { - listeners.add(listener); - } - - public void removeListener(final RawIrcListener listener) { - listeners.remove(listener); - } - - public void register(final String nick, final String user, final String realName) throws IOException { - sendRaw("NICK " + nick); - sendRaw("USER " + user + " 0 * :" + realName); - } - - public List getDelegates(Class type) { - List list = new LinkedList<>(); - for (DelegateListener l : delegateListeners) { - if (type.isAssignableFrom(l.getClass())) { - list.add(type.cast(l)); - } - } - return list; - } - - public void sendMessage(String target, String message) { - try { - sendRaw(String.format("PRIVMSG %s :%s", target, message)); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void sendRaw(String s) throws IOException { - if (s.endsWith("\n")) { - s = s.replaceAll("[\n\r]", ""); - } - if (!socket.isOutputShutdown()) { - rawLines.offer(s); - } - } - - - public void run() { - if (socket.isInputShutdown()) { - readerFuture.cancel(true); - } else { - - try { - String raw = reader.readLine(); - System.out.println(raw); - if (!Character.isLetterOrDigit(raw.charAt(0))) { - raw = raw.substring(1); - } - if (raw.startsWith("PING ")) { - sendRaw(raw.replaceFirst("PING", "PONG")); - } else { - for (RawIrcListener listener : listeners) { - if (listener.qualifies(raw)) { - listener.execute(raw); - } - } - } - - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - - public void send(final Transmittable transmittable) { - try { - sendRaw(transmittable.getRaw()); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void sendNotice(String target, String message) { - try { - sendRaw(String.format("NOTICE %s :%s", target, message)); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public BufferedWriter getWriter() { - return writer; - } -} diff --git a/src/main/java/org/freecode/irc/Notice.java b/src/main/java/org/freecode/irc/Notice.java deleted file mode 100644 index cf860aa..0000000 --- a/src/main/java/org/freecode/irc/Notice.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.freecode.irc; - -/** - * User: Shivam - * Date: 28/07/13 - * Time: 21:42 - */ -public class Notice extends Transmittable { - - private final String target; - private final String message; - private final String senderMask; - private final String user; - private final String nick; - private final String host; - private final IrcConnection connection; - - public Notice(String rawLine, IrcConnection connection) { - this.connection = connection; - final String[] parts = rawLine.split(" ", 4); - senderMask = parts[0]; - if(senderMask.contains("!")) { - nick = senderMask.substring(0, senderMask.indexOf('!')); - user = senderMask.substring(senderMask.indexOf('!') + 1, senderMask.indexOf('@')); - host = senderMask.substring(senderMask.indexOf('@') + 1); - } else { - nick = senderMask; - user = null; - host = null; - } - message = parts[3].substring(1); - target = parts[2]; - } - - public Notice(final String target, final String message, final IrcConnection connection) { - this.connection = connection; - this.message = message; - this.target = target; - this.senderMask = null; - this.user = null; - this.nick = null; - this.host = null; - } - public String getTarget() { - return target; - } - - public String getMessage() { - return message; - } - - public String getSenderMask() { - return senderMask; - } - - public String getUser() { - return user; - } - - public String getNick() { - return nick; - } - - public String getHost() { - return host; - } - - public IrcConnection getIrcConnection() { - return connection; - } - - public String getRaw() { - return String.format("NOTICE %s :%s", target, message); - } - - public String getCommand() { - return "NOTICE"; - } -} diff --git a/src/main/java/org/freecode/irc/Privmsg.java b/src/main/java/org/freecode/irc/Privmsg.java deleted file mode 100644 index 0fe5fca..0000000 --- a/src/main/java/org/freecode/irc/Privmsg.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.freecode.irc; - -/** - * User: Shivam - * Date: 17/06/13 - * Time: 00:48 - */ -public class Privmsg extends Transmittable { - private final String target; - private final String message; - private final String senderMask; - private final String user; - private final String nick; - private final String host; - private final IrcConnection connection; - - public Privmsg(final String rawLine, final IrcConnection connection) { - this.connection = connection; - final String[] parts = rawLine.split(" ", 4); - senderMask = parts[0]; - if(senderMask.contains("!")) { - nick = senderMask.substring(0, senderMask.indexOf('!')); - user = senderMask.substring(senderMask.indexOf('!') + 1, senderMask.indexOf('@')); - host = senderMask.substring(senderMask.indexOf('@') + 1); - } else { - nick = senderMask; - user = null; - host = null; - } - message = parts[3].substring(1); - target = parts[2]; - } - - public Privmsg(final String target, final String message, final IrcConnection connection) { - this.connection = connection; - this.message = message; - this.target = target; - this.senderMask = null; - this.user = null; - this.nick = null; - this.host = null; - } - - public String getTarget() { - return target; - } - - public String getMessage() { - return message; - } - - public String getSenderMask() { - return senderMask; - } - - public String getUser() { - return user; - } - - public String getNick() { - return nick; - } - - public String getHost() { - return host; - } - - public IrcConnection getIrcConnection() { - return connection; - } - - public String getRaw() { - return String.format("PRIVMSG %s :%s", target, message); - } - - public String getCommand() { - return "PRIVMSG"; - } - - public void send(String msg) { - String target1 = getTarget(); - if(Character.isLetter(target1.charAt(0))) { - target1 = getNick(); - } - getIrcConnection().send(new Privmsg(target1, msg, connection)); - } -} diff --git a/src/main/java/org/freecode/irc/Transmittable.java b/src/main/java/org/freecode/irc/Transmittable.java deleted file mode 100644 index 222b652..0000000 --- a/src/main/java/org/freecode/irc/Transmittable.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.freecode.irc; - -/** - * User: Shivam - * Date: 28/07/13 - * Time: 21:40 - */ -public abstract class Transmittable { - public abstract String getRaw(); - public abstract String getCommand(); - public boolean isNotice(){ - return this instanceof Notice; - } - - public boolean isPrivmsg() { - return this instanceof Privmsg; - } - - public Privmsg asPrivmsg() { - return isPrivmsg() ? (Privmsg) this : null; - } - - public Notice asNotice() { - return isNotice() ? (Notice) this : null; - } - -} diff --git a/src/main/java/org/freecode/irc/event/CtcpRequestListener.java b/src/main/java/org/freecode/irc/event/CtcpRequestListener.java deleted file mode 100644 index 038cc67..0000000 --- a/src/main/java/org/freecode/irc/event/CtcpRequestListener.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.freecode.irc.event; - -import org.freecode.irc.CtcpRequest; -import org.freecode.irc.event.internal.DelegateListener; - -/** - * User: Shivam - * Date: 28/07/13 - * Time: 20:44 - */ -public interface CtcpRequestListener extends DelegateListener { - - public void onCtcpRequest(CtcpRequest request); -} diff --git a/src/main/java/org/freecode/irc/event/CtcpResponseListener.java b/src/main/java/org/freecode/irc/event/CtcpResponseListener.java deleted file mode 100644 index 3113053..0000000 --- a/src/main/java/org/freecode/irc/event/CtcpResponseListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.freecode.irc.event; - -import org.freecode.irc.CtcpResponse; -import org.freecode.irc.event.internal.DelegateListener; - -/** - * User: Shivam - * Date: 29/07/13 - * Time: 15:57 - */ -public interface CtcpResponseListener extends DelegateListener { - public void onCtcpResponse(CtcpResponse response); -} diff --git a/src/main/java/org/freecode/irc/event/JoinListener.java b/src/main/java/org/freecode/irc/event/JoinListener.java deleted file mode 100644 index ddafa99..0000000 --- a/src/main/java/org/freecode/irc/event/JoinListener.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.freecode.irc.event; - -import org.freecode.irc.event.internal.DelegateListener; - -/** - * Created by shivam on 26/04/14. - */ -public interface JoinListener extends DelegateListener { - - public void onJoin(String channel, String nick, String mask); -} diff --git a/src/main/java/org/freecode/irc/event/NoticeListener.java b/src/main/java/org/freecode/irc/event/NoticeListener.java deleted file mode 100644 index f521f20..0000000 --- a/src/main/java/org/freecode/irc/event/NoticeListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.freecode.irc.event; - -import org.freecode.irc.Notice; -import org.freecode.irc.event.internal.DelegateListener; - -/** - * User: Shivam - * Date: 29/07/13 - * Time: 15:56 - */ -public interface NoticeListener extends DelegateListener { - public void onNotice(Notice n); -} diff --git a/src/main/java/org/freecode/irc/event/NumericListener.java b/src/main/java/org/freecode/irc/event/NumericListener.java deleted file mode 100644 index 5b3643c..0000000 --- a/src/main/java/org/freecode/irc/event/NumericListener.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.freecode.irc.event; - -import org.freecode.irc.IrcConnection; -import org.freecode.irc.event.internal.RawIrcListener; - -/** - * User: Shivam - * Date: 16/06/13 - * Time: 23:12 - */ -public abstract class NumericListener extends RawIrcListener { - public NumericListener(IrcConnection connection) { - super(connection); - } - - public abstract int getNumeric(); - - @Override - public boolean qualifies(final String raw) { - String[] parts = raw.split(" "); - return parts.length > 2 && parts[1].matches("\\d+") && Integer.parseInt(parts[1]) == getNumeric(); - } -} diff --git a/src/main/java/org/freecode/irc/event/PrivateMessageListener.java b/src/main/java/org/freecode/irc/event/PrivateMessageListener.java deleted file mode 100644 index 352f9dd..0000000 --- a/src/main/java/org/freecode/irc/event/PrivateMessageListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.freecode.irc.event; - -import org.freecode.irc.Privmsg; -import org.freecode.irc.event.internal.DelegateListener; - -/** - * User: Shivam - * Date: 17/06/13 - * Time: 01:02 - */ -public interface PrivateMessageListener extends DelegateListener { - public void onPrivmsg(Privmsg privmsg); -} diff --git a/src/main/java/org/freecode/irc/event/internal/DelegateListener.java b/src/main/java/org/freecode/irc/event/internal/DelegateListener.java deleted file mode 100644 index eea0747..0000000 --- a/src/main/java/org/freecode/irc/event/internal/DelegateListener.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.freecode.irc.event.internal; - -/** - * User: Shivam - * Date: 17/06/13 - * Time: 00:55 - */ -public interface DelegateListener { -} diff --git a/src/main/java/org/freecode/irc/event/internal/RawIrcListener.java b/src/main/java/org/freecode/irc/event/internal/RawIrcListener.java deleted file mode 100644 index 835f2c3..0000000 --- a/src/main/java/org/freecode/irc/event/internal/RawIrcListener.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.freecode.irc.event.internal; - -import org.freecode.irc.IrcConnection; - -/** - * User: Shivam - * Date: 16/06/13 - * Time: 23:09 - */ -public abstract class RawIrcListener { - - protected IrcConnection connection; - - public RawIrcListener(IrcConnection connection) { - this.connection = connection; - } - - public abstract boolean qualifies(final String rawLine); - - public abstract void execute(final String rawLine); -} diff --git a/src/main/java/org/freecode/irc/event/internal/RawJoinProcessor.java b/src/main/java/org/freecode/irc/event/internal/RawJoinProcessor.java deleted file mode 100644 index 183c546..0000000 --- a/src/main/java/org/freecode/irc/event/internal/RawJoinProcessor.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.freecode.irc.event.internal; - -import org.freecode.irc.IrcConnection; -import org.freecode.irc.event.JoinListener; - -/** - * Created by shivam on 26/04/14. - */ -public class RawJoinProcessor extends RawIrcListener { - - public RawJoinProcessor(IrcConnection connection) { - super(connection); - } - - public boolean qualifies(String rawLine) { - String[] parts = rawLine.split(" ", 3); - return parts.length == 3 && parts[1].equalsIgnoreCase("join"); - } - - public void execute(String rawLine) { - String[] parts = rawLine.split(" ", 3); - String mask = parts[0]; - String channel = parts[2].startsWith(":") ? parts[2].substring(1) : - parts[2]; - String nick = mask.contains("!") ? mask.split("!")[0] : mask; - for (JoinListener listener : connection.getDelegates(JoinListener.class)) { - listener.onJoin(channel, nick, mask); - } - - } -} diff --git a/src/main/java/org/freecode/irc/event/internal/RawLineProcessor.java b/src/main/java/org/freecode/irc/event/internal/RawLineProcessor.java deleted file mode 100644 index c1be75a..0000000 --- a/src/main/java/org/freecode/irc/event/internal/RawLineProcessor.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.freecode.irc.event.internal; - -import org.freecode.irc.IrcConnection; - -/** - * User: Shivam - * Date: 17/06/13 - * Time: 00:53 - */ -public abstract class RawLineProcessor extends RawIrcListener { - - public RawLineProcessor(IrcConnection connection) { - super(connection); - } -} diff --git a/src/main/java/org/freecode/irc/event/internal/RawNoticeProcessor.java b/src/main/java/org/freecode/irc/event/internal/RawNoticeProcessor.java deleted file mode 100644 index 6fecbf9..0000000 --- a/src/main/java/org/freecode/irc/event/internal/RawNoticeProcessor.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.freecode.irc.event.internal; - -import org.freecode.irc.CtcpResponse; -import org.freecode.irc.IrcConnection; -import org.freecode.irc.Notice; -import org.freecode.irc.event.CtcpResponseListener; -import org.freecode.irc.event.NoticeListener; - -/** - * User: Shivam - * Date: 29/07/13 - * Time: 15:51 - */ -public class RawNoticeProcessor extends RawLineProcessor { - - public RawNoticeProcessor(IrcConnection connection) { - super(connection); - } - - public boolean qualifies(String rawLine) { - final String[] parts = rawLine.split(" ", 4); - return parts.length == 4 && parts[1].equals("NOTICE"); - } - - public void execute(String rawLine) { - if (CtcpResponse.isCtcpResponse(rawLine)) { - CtcpResponse ctcpResponse = new CtcpResponse(rawLine, connection); - for (CtcpResponseListener listener : connection.getDelegates(CtcpResponseListener.class)) { - listener.onCtcpResponse(ctcpResponse); - } - } else { - Notice n = new Notice(rawLine, connection); - for (NoticeListener listener : connection.getDelegates(NoticeListener.class)) { - listener.onNotice(n); - - } - - } - } -} diff --git a/src/main/java/org/freecode/irc/event/internal/RawPrivateMessageProcessor.java b/src/main/java/org/freecode/irc/event/internal/RawPrivateMessageProcessor.java deleted file mode 100644 index 429d86e..0000000 --- a/src/main/java/org/freecode/irc/event/internal/RawPrivateMessageProcessor.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.freecode.irc.event.internal; - -import org.freecode.irc.CtcpRequest; -import org.freecode.irc.IrcConnection; -import org.freecode.irc.Privmsg; -import org.freecode.irc.event.CtcpRequestListener; -import org.freecode.irc.event.PrivateMessageListener; - -/** - * User: Shivam - * Date: 16/06/13 - * Time: 23:57 - */ -public class RawPrivateMessageProcessor extends RawLineProcessor { - - - public RawPrivateMessageProcessor(IrcConnection connection) { - super(connection); - } - - public boolean qualifies(String rawLine) { - final String[] parts = rawLine.split(" ", 4); - return parts.length == 4 && parts[1].equals("PRIVMSG"); //&& !CtcpRequest.isCtcpRequest(rawLine); //&& parts[3].startsWith(":"); - } - - public void execute(String rawLine) { - if (!CtcpRequest.isCtcpRequest(rawLine)) { - final Privmsg privmsg = new Privmsg(rawLine, connection); - for (PrivateMessageListener listener : connection.getDelegates(PrivateMessageListener.class)) { - listener.onPrivmsg(privmsg); - } - } else { - final CtcpRequest request = new CtcpRequest(rawLine, connection); - for (CtcpRequestListener listener : connection.getDelegates(CtcpRequestListener.class)) { - listener.onCtcpRequest(request); - } - } - } -} diff --git a/src/main/java/org/freecode/irc/votebot/FreeVoteBot.java b/src/main/java/org/freecode/irc/votebot/FreeVoteBot.java index f8bccab..95612ec 100644 --- a/src/main/java/org/freecode/irc/votebot/FreeVoteBot.java +++ b/src/main/java/org/freecode/irc/votebot/FreeVoteBot.java @@ -1,13 +1,14 @@ package org.freecode.irc.votebot; -import org.freecode.irc.CtcpRequest; -import org.freecode.irc.CtcpResponse; -import org.freecode.irc.IrcConnection; -import org.freecode.irc.Privmsg; -import org.freecode.irc.event.CtcpRequestListener; -import org.freecode.irc.event.JoinListener; -import org.freecode.irc.event.NumericListener; -import org.freecode.irc.event.PrivateMessageListener; +import com.speed.irc.connection.Server; +import com.speed.irc.event.channel.ChannelUserEvent; +import com.speed.irc.event.channel.ChannelUserListener; +import com.speed.irc.event.channel.ModeChangedEvent; +import com.speed.irc.event.message.PrivateMessageEvent; +import com.speed.irc.event.message.PrivateMessageListener; +import com.speed.irc.event.message.RawMessageEvent; +import com.speed.irc.event.message.RawMessageListener; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.AdminModule; import org.freecode.irc.votebot.api.FVBModule; import org.freecode.irc.votebot.dao.PollDAO; @@ -31,14 +32,14 @@ * Date: 17/06/13 * Time: 00:05 */ -public class FreeVoteBot implements PrivateMessageListener, JoinListener { +public class FreeVoteBot implements PrivateMessageListener, ChannelUserListener { public static final String CHANNEL_SOURCE = "#freecode"; private String[] channels; private String nick, realName, serverHost, user; private int port; private ScriptModuleLoader sml; - private IrcConnection connection; + private Server connection; private String version; private ExpiryQueue expiryQueue = new ExpiryQueue<>(1500L); @@ -47,6 +48,7 @@ public class FreeVoteBot implements PrivateMessageListener, JoinListener { private VoteDAO voteDAO; public ScheduledExecutorService pollExecutor; public HashMap pollFutures; + public static final int ERR_NICKNAMEINUSE = 433; private KVStore kvStore; @@ -89,49 +91,31 @@ public void init() { } private void registerUser() { - try { - connection.register(nick, user, realName); - } catch (IOException e) { - e.printStackTrace(); - } - connection.addListener(this); + connection.register(nick, user, realName); + connection.getEventManager().addListener(this); } private void addNickInUseListener() { - NumericListener nickInUse = new NumericListener(connection) { - public int getNumeric() { - return IrcConnection.ERR_NICKNAMEINUSE; - } + RawMessageListener nickInUse = new RawMessageListener() { - public void execute(String rawLine) { - FreeVoteBot.this.nick = FreeVoteBot.this.nick + "_"; - try { - connection.sendRaw("NICK " + FreeVoteBot.this.nick); - } catch (IOException e) { - e.printStackTrace(); - } - } - }; - connection.addListener(nickInUse); + public void rawMessageReceived(RawMessageEvent e) { + if(e.getMessage().getCommand().equalsIgnoreCase(String.valueOf(ERR_NICKNAMEINUSE))) { + FreeVoteBot.this.nick = FreeVoteBot.this.nick + "_"; + connection.sendRaw("NICK " + FreeVoteBot.this.nick); + + } + } + }; + connection.getEventManager().addListener(nickInUse); } private void addCTCPRequestListener() { - connection.addListener(new CtcpRequestListener() { - public void onCtcpRequest(CtcpRequest request) { - if (request.getCommand().equals("VERSION")) { - request.getIrcConnection().send(new CtcpResponse(request.getIrcConnection(), - request.getNick(), "VERSION", "FreeVoteBot " + version + " by " + CHANNEL_SOURCE + " on irc.rizon.net")); - } else if (request.getCommand().equals("PING")) { - request.getIrcConnection().send(new CtcpResponse(request.getIrcConnection(), - request.getNick(), "PING", request.getArguments())); - } - } - }); + connection.setCtcpReply("VERSION", "FreeVoteBot " + version); } private void connectToIRCServer() { try { - connection = new IrcConnection(serverHost, port); + connection = new Server(serverHost, port, true); } catch (IOException e) { e.printStackTrace(); } @@ -144,7 +128,7 @@ private void identifyToNickServ() { BufferedReader read = new BufferedReader(new FileReader(pass)); String s = read.readLine(); if (s != null) { - connection.send(new Privmsg("NickServ", "identify " + s, connection)); + connection.sendMessage(new Privmsg("identify " + s, null, connection.getUser("NickServ"))); } read.close(); } catch (IOException e) { @@ -160,25 +144,7 @@ private void joinChannels() { } public void onPrivmsg(final Privmsg privmsg) { - if (privmsg.getNick().equalsIgnoreCase(nick)) { - return; - } - String sender = privmsg.getNick().toLowerCase(); - if (expiryQueue.contains(sender) || !expiryQueue.insert(sender)) { - return; - } - - for (FVBModule module : moduleList) { - try { - if (module.isEnabled() && module.canRun(privmsg)) { - module.process(privmsg); - return; - } - } catch (Exception e) { - privmsg.send(e.getMessage()); - } - } } @@ -252,7 +218,7 @@ public ScriptModuleLoader getScriptModuleLoader() { public void sendMsg(String s) { for (String channel : channels) { - connection.sendMessage(channel, s); + connection.sendMessage(new Privmsg(s,null, connection.getChannel(channel))); } } @@ -278,7 +244,88 @@ private DateFormat getDateFormatter() { return dateFormat; } - static class PollVotes implements Comparable { + @Override + public void messageReceived(PrivateMessageEvent e) { + Privmsg privmsg = e.getMessage(); + if (privmsg.getSender().equalsIgnoreCase(nick)) { + return; + } + + String sender = privmsg.getSender().toLowerCase(); + if (expiryQueue.contains(sender) || !expiryQueue.insert(sender)) { + return; + } + + for (FVBModule module : moduleList) { + try { + if (module.isEnabled() && module.canRun(privmsg)) { + module.process(privmsg); + return; + } + } catch (Exception e1) { + privmsg.getConversable().sendMessage(e1.getMessage()); + } + } + } + + public void channelUserJoined(ChannelUserEvent e) { + String nick = e.getUser().getNick(); + String channel = e.getChannel().getName(); + try { + Poll[] openPolls = pollDAO.getOpenPolls(); + Poll[] pollsNotVotedIn = voteDAO.getPollsNotVotedIn(openPolls, nick); + PollVotes[] pollVotes = new PollVotes[pollsNotVotedIn.length]; + for (int i = 0; i < pollsNotVotedIn.length; i++) { + Poll poll = pollsNotVotedIn[i]; + String question = poll.getQuestion(); + int id = poll.getId(); + long expiry = poll.getExpiry(); + Date date = new Date(expiry); + Vote[] votes = voteDAO.getVotesOnPoll(id); + String msg = String.format("Open poll #%d: \"%s\", ends: %s, votes: %d", id, question, getDateFormatter().format(date), votes.length); + pollVotes[i] = new PollVotes(votes.length, msg); + } + if (pollVotes.length == 0) { + e.getUser().sendNotice("No new polls to vote in!"); + } else { + Arrays.sort(pollVotes); + e.getUser().sendNotice("Trending polls list:"); + if (pollVotes.length >= 3) { + e.getUser().sendNotice(pollVotes[0].question); + e.getUser().sendNotice(pollVotes[1].question); + e.getUser().sendNotice(pollVotes[2].question); + } else { + for (PollVotes p : pollVotes) { + e.getUser().sendNotice(p.question); + } + } + } + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + + public void channelUserParted(ChannelUserEvent e) { + + } + + public void channelUserModeChanged(ModeChangedEvent e) { + + } + + public void channelUserKicked(ChannelUserEvent e) { + + } + + public void channelUserNickChanged(ChannelUserEvent e) { + + } + + public void channelUserQuit(ChannelUserEvent e) { + + } + + static class PollVotes implements Comparable { int votes; String question; @@ -292,40 +339,7 @@ public int compareTo(PollVotes o) { } } - @Override public void onJoin(String channel, String nick, String mask) { - System.out.println(nick + " joins " + channel); - try { - Poll[] openPolls = pollDAO.getOpenPolls(); - Poll[] pollsNotVotedIn = voteDAO.getPollsNotVotedIn(openPolls, nick); - PollVotes[] pollVotes = new PollVotes[pollsNotVotedIn.length]; - for (int i = 0; i < pollsNotVotedIn.length; i++) { - Poll poll = pollsNotVotedIn[i]; - String question = poll.getQuestion(); - int id = poll.getId(); - long expiry = poll.getExpiry(); - Date date = new Date(expiry); - Vote[] votes = voteDAO.getVotesOnPoll(id); - String msg = String.format("Open poll #%d: \"%s\", ends: %s, votes: %d", id, question, getDateFormatter().format(date), votes.length); - pollVotes[i] = new PollVotes(votes.length, msg); - } - if (pollVotes.length == 0) { - connection.sendNotice(nick, "No new polls to vote in!"); - } else { - Arrays.sort(pollVotes); - connection.sendNotice(nick, "Trending polls list:"); - if (pollVotes.length >= 3) { - connection.sendNotice(nick, pollVotes[0].question); - connection.sendNotice(nick, pollVotes[1].question); - connection.sendNotice(nick, pollVotes[2].question); - } else { - for (PollVotes p : pollVotes) { - connection.sendNotice(nick, p.question); - } - } - } - } catch (SQLException e) { - e.printStackTrace(); - } + } } diff --git a/src/main/java/org/freecode/irc/votebot/NoticeFilter.java b/src/main/java/org/freecode/irc/votebot/NoticeFilter.java index 31f27a3..e7a4d1c 100644 --- a/src/main/java/org/freecode/irc/votebot/NoticeFilter.java +++ b/src/main/java/org/freecode/irc/votebot/NoticeFilter.java @@ -1,8 +1,9 @@ package org.freecode.irc.votebot; -import org.freecode.irc.IrcConnection; -import org.freecode.irc.Notice; -import org.freecode.irc.event.NoticeListener; +import com.speed.irc.connection.Server; +import com.speed.irc.event.message.NoticeEvent; +import com.speed.irc.event.message.NoticeListener; +import com.speed.irc.types.Notice; /** * User: Shivam @@ -14,15 +15,15 @@ public abstract class NoticeFilter implements NoticeListener { static class NoticeFilterQueue extends ExpiryQueue { - private final IrcConnection connection; + private final Server connection; - public NoticeFilterQueue(long defaultExpiry, IrcConnection connection) { + public NoticeFilterQueue(long defaultExpiry, Server connection) { super(defaultExpiry); this.connection = connection; } public void onRemoval(NoticeFilter notice) { - connection.removeListener(notice); + connection.getEventManager().removeListener(notice); } } @@ -39,7 +40,7 @@ public NoticeFilter() { this(true); } - public static void setFilterQueue(IrcConnection connection, long delay) { + public static void setFilterQueue(Server connection, long delay) { queue = new NoticeFilterQueue(delay, connection); } @@ -47,9 +48,10 @@ public static void setFilterQueue(IrcConnection connection, long delay) { public abstract void run(Notice notice); - public void onNotice(Notice n) { - if (accept(n)) { - run(n); + @Override + public void noticeReceived(NoticeEvent n) { + if (accept(n.getNotice())) { + run(n.getNotice()); } } } diff --git a/src/main/java/org/freecode/irc/votebot/api/AdminModule.java b/src/main/java/org/freecode/irc/votebot/api/AdminModule.java index 5d53ecb..e05cd28 100644 --- a/src/main/java/org/freecode/irc/votebot/api/AdminModule.java +++ b/src/main/java/org/freecode/irc/votebot/api/AdminModule.java @@ -1,8 +1,7 @@ package org.freecode.irc.votebot.api; -import org.freecode.irc.Notice; -import org.freecode.irc.Privmsg; -import org.freecode.irc.Transmittable; +import com.speed.irc.types.Notice; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.FreeVoteBot; import org.freecode.irc.votebot.NoticeFilter; @@ -30,9 +29,8 @@ public String getCapitalisedName() { protected abstract Right[] getRights(); @Override - public final void process(Transmittable trns) { - final Privmsg privmsg = (Privmsg) trns; - privmsg.getIrcConnection().addListener(new NoticeFilter() { + public final void process(final Privmsg privmsg) { + privmsg.getConversable().getServer().getEventManager().addListener(new NoticeFilter() { public boolean accept(Notice notice) { Pattern pattern = Pattern.compile("\u0002(.+?)\u0002"); Matcher matcher = pattern.matcher(notice.getMessage()); @@ -40,18 +38,18 @@ public boolean accept(Notice notice) { String access = matcher.group(1); for (Right right : getRights()) { if (right.getCapitalisedName().equals(access)) { - return notice.getNick().equals("ChanServ") && notice.getMessage().contains("Main nick:") && notice.getMessage().contains("\u0002" + privmsg.getNick() + "\u0002"); + return notice.getSenderNick().equals("ChanServ") && notice.getMessage().contains("Main nick:") && notice.getMessage().contains("\u0002" + privmsg.getSender() + "\u0002"); } } } if (notice.getMessage().equals("Permission denied.")) - notice.getIrcConnection().removeListener(this); + privmsg.getConversable().getServer().getEventManager().removeListener(this); return false; } public void run(Notice notice) { processMessage(privmsg); - privmsg.getIrcConnection().removeListener(this); + privmsg.getConversable().getServer().getEventManager().removeListener(this); } }); diff --git a/src/main/java/org/freecode/irc/votebot/api/CommandModule.java b/src/main/java/org/freecode/irc/votebot/api/CommandModule.java index 8adc088..82c7ba1 100644 --- a/src/main/java/org/freecode/irc/votebot/api/CommandModule.java +++ b/src/main/java/org/freecode/irc/votebot/api/CommandModule.java @@ -1,56 +1,56 @@ package org.freecode.irc.votebot.api; -import org.freecode.irc.Privmsg; -import org.freecode.irc.Transmittable; +import com.speed.irc.connection.Server; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.FreeVoteBot; import java.util.regex.Matcher; import java.util.regex.Pattern; public abstract class CommandModule extends FVBModule { - private final Pattern COMMAND_PATTERN; - private final Pattern NAME_PATTERN, PARAMETER_PATTERN; - - public CommandModule() { - char c = getCommandCharacter(); - this.COMMAND_PATTERN = Pattern.compile(String.format("(%s([^ ]+))|(%s(.+?) (.+))", c, c)); - this.PARAMETER_PATTERN = Pattern.compile(getParameterRegex()); - this.NAME_PATTERN = Pattern.compile(getName()); - } - - @Override - public boolean canRun(Transmittable trns) { - if (!trns.isPrivmsg()) - return false; - String msg = trns.asPrivmsg().getMessage(); - Matcher matcher = COMMAND_PATTERN.matcher(msg); - if (matcher.matches()) { - if (matcher.group(4) == null || matcher.group(4).isEmpty()) { - return NAME_PATTERN.matcher(matcher.group(2)).matches(); - } else { - return NAME_PATTERN.matcher(matcher.group(4)).matches() && - PARAMETER_PATTERN.matcher(matcher.group(5)).matches(); - } - } - return false; - } - - @Override - public void process(Transmittable trns) { - processMessage((Privmsg) trns); - } - - protected void askChanServForUserCreds(Privmsg privmsg) { - privmsg.getIrcConnection().send(new Privmsg("ChanServ", "WHY " + FreeVoteBot.CHANNEL_SOURCE + " " + privmsg.getNick(), privmsg.getIrcConnection())); - } - - public abstract void processMessage(Privmsg privmsg); - - protected String getParameterRegex() { - return ".*"; - } - - protected char getCommandCharacter() { - return '!'; - } + private final Pattern COMMAND_PATTERN; + private final Pattern NAME_PATTERN, PARAMETER_PATTERN; + + public CommandModule() { + char c = getCommandCharacter(); + this.COMMAND_PATTERN = Pattern.compile(String.format("(%s([^ ]+))|(%s(.+?) (.+))", c, c)); + this.PARAMETER_PATTERN = Pattern.compile(getParameterRegex()); + this.NAME_PATTERN = Pattern.compile(getName()); + } + + @Override + public boolean canRun(Privmsg trns) { + String msg = trns.getMessage(); + Matcher matcher = COMMAND_PATTERN.matcher(msg); + if (matcher.matches()) { + if (matcher.group(4) == null || matcher.group(4).isEmpty()) { + return NAME_PATTERN.matcher(matcher.group(2)).matches(); + } else { + return NAME_PATTERN.matcher(matcher.group(4)).matches() && + PARAMETER_PATTERN.matcher(matcher.group(5)).matches(); + } + } + return false; + } + + @Override + public void process(Privmsg trns) { + processMessage(trns); + } + + protected void askChanServForUserCreds(Privmsg privmsg) { + Server server = privmsg.getConversable().getServer(); + server.sendMessage(new Privmsg("WHY " + FreeVoteBot.CHANNEL_SOURCE + " " + + privmsg.getSender(), null, server.getUser("ChanServ"))); + } + + public abstract void processMessage(Privmsg privmsg); + + protected String getParameterRegex() { + return ".*"; + } + + protected char getCommandCharacter() { + return '!'; + } } diff --git a/src/main/java/org/freecode/irc/votebot/api/FVBModule.java b/src/main/java/org/freecode/irc/votebot/api/FVBModule.java index 79953ed..ac3e7cd 100644 --- a/src/main/java/org/freecode/irc/votebot/api/FVBModule.java +++ b/src/main/java/org/freecode/irc/votebot/api/FVBModule.java @@ -1,14 +1,14 @@ package org.freecode.irc.votebot.api; -import org.freecode.irc.Transmittable; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.KVStore; public abstract class FVBModule implements Runnable { private volatile boolean enabled = true; - public abstract boolean canRun(final Transmittable trns); + public abstract boolean canRun(final Privmsg trns); - public abstract void process(final Transmittable trns); + public abstract void process(final Privmsg trns); public abstract String getName(); diff --git a/src/main/java/org/freecode/irc/votebot/modules/admin/CreatePollModule.java b/src/main/java/org/freecode/irc/votebot/modules/admin/CreatePollModule.java index c65278d..045662c 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/admin/CreatePollModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/admin/CreatePollModule.java @@ -1,11 +1,10 @@ package org.freecode.irc.votebot.modules.admin; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.PollExpiryAnnouncer; import org.freecode.irc.votebot.api.AdminModule; import org.freecode.irc.votebot.dao.PollDAO; -import java.sql.SQLException; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -29,7 +28,7 @@ public void processMessage(final Privmsg privmsg) { lifeSpan = parseExpiry(parts[1]); question = parts[2]; } catch (IllegalArgumentException e) { - privmsg.getIrcConnection().send(new Privmsg(privmsg.getTarget(), e.getMessage(), privmsg.getIrcConnection())); + privmsg.getConversable().sendMessage(e.getMessage()); throw e; } } else { @@ -38,14 +37,14 @@ public void processMessage(final Privmsg privmsg) { } if (question.isEmpty() || question.length() < 5) { - privmsg.getIrcConnection().send(new Privmsg(privmsg.getTarget(), "Question is too short.", privmsg.getIrcConnection())); + privmsg.getConversable().sendMessage("Question is too short."); return; } try { final long expiration = System.currentTimeMillis() + lifeSpan; - int id = pollDAO.addNewPoll(question.trim(), expiration, privmsg.getNick()); - privmsg.getIrcConnection().send(new Privmsg(privmsg.getTarget(), "Created poll, type !vote " + id + " yes/no/abstain to vote.", privmsg.getIrcConnection())); + int id = pollDAO.addNewPoll(question.trim(), expiration, privmsg.getSender()); + privmsg.getConversable().sendMessage("Created poll, type !vote " + id + " yes/no/abstain to vote."); PollExpiryAnnouncer exp = new PollExpiryAnnouncer(expiration, id, getFvb()); ScheduledFuture future = getFvb().pollExecutor.scheduleAtFixedRate(exp, 5000L, 500L, TimeUnit.MILLISECONDS); exp.setFuture(future); diff --git a/src/main/java/org/freecode/irc/votebot/modules/admin/JoinChannelModule.java b/src/main/java/org/freecode/irc/votebot/modules/admin/JoinChannelModule.java index ee71a10..00c8311 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/admin/JoinChannelModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/admin/JoinChannelModule.java @@ -1,6 +1,6 @@ package org.freecode.irc.votebot.modules.admin; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.AdminModule; /** @@ -13,7 +13,7 @@ public class JoinChannelModule extends AdminModule { @Override public void processMessage(Privmsg privmsg) { String msg = privmsg.getMessage().substring(2).trim(); - privmsg.getIrcConnection().joinChannel(msg); + privmsg.getConversable().getServer().joinChannel(msg); } @Override diff --git a/src/main/java/org/freecode/irc/votebot/modules/admin/LoadModules.java b/src/main/java/org/freecode/irc/votebot/modules/admin/LoadModules.java index 4f82552..308e7a2 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/admin/LoadModules.java +++ b/src/main/java/org/freecode/irc/votebot/modules/admin/LoadModules.java @@ -1,12 +1,12 @@ package org.freecode.irc.votebot.modules.admin; +import com.speed.irc.types.Privmsg; import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.PullResult; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.storage.file.FileRepositoryBuilder; -import org.freecode.irc.Privmsg; import org.freecode.irc.votebot.ScriptModuleLoader; import org.freecode.irc.votebot.api.AdminModule; import org.freecode.irc.votebot.api.ExternalModule; @@ -59,7 +59,7 @@ protected Right[] getRights() { public void processMessage(Privmsg privmsg) { String command = privmsg.getMessage().substring(getName().length() + 1).trim(); if (git == null || repository == null) { - privmsg.send("Failed to load git repositories"); + privmsg.getConversable().sendMessage("Failed to load git repositories"); if (!command.equalsIgnoreCase("clean")) { return; } @@ -67,32 +67,32 @@ public void processMessage(Privmsg privmsg) { if (command.equalsIgnoreCase("pull")) { try { PullResult result = git.pull().call(); - privmsg.send(result.isSuccessful() ? "Successfully pulled." : "Failed to pull."); + privmsg.getConversable().sendMessage(result.isSuccessful() ? "Successfully pulled." : "Failed to pull."); } catch (GitAPIException e) { - privmsg.send(e.getMessage()); + privmsg.getConversable().sendMessage(e.getMessage()); } } else if (command.equalsIgnoreCase("clean")) { try { git = cloneRepo(); repository = git.getRepository(); - privmsg.send("Successfully cleaned"); + privmsg.getConversable().sendMessage("Successfully cleaned"); } catch (Exception e) { - privmsg.send(e.getMessage()); + privmsg.getConversable().sendMessage(e.getMessage()); } } else if (command.equalsIgnoreCase("reload")) { try { getFvb().removeModules(loadedModules); loadedModules.addAll(Arrays.asList(loadModules())); getFvb().addModules(loadedModules); - privmsg.send("Successfully reloaded"); + privmsg.getConversable().sendMessage("Successfully reloaded"); } catch (Exception e) { - privmsg.send("Error reloading: " + e.getMessage()); + privmsg.getConversable().sendMessage("Error reloading: " + e.getMessage()); } } else if (command.startsWith("load ")) { String name = command.substring(5).trim(); if (name.matches(".*[^\\w].*")) { //contains a symbol that isn't a word - privmsg.send("Invalid name!"); + privmsg.getConversable().sendMessage("Invalid name!"); } else { File file = new File(MODULES_DIR, name.concat(".py")); if (file.exists()) { @@ -101,21 +101,21 @@ public void processMessage(Privmsg privmsg) { .loadFromFile(file); loadedModules.add(module); if (getFvb().addModule(module)) - privmsg.send("Successfully added module"); + privmsg.getConversable().sendMessage("Successfully added module"); else - privmsg.send("Failed to add module"); + privmsg.getConversable().sendMessage("Failed to add module"); } catch (IOException | ScriptException e) { - privmsg.send("Error loading module: " + e.getMessage()); + privmsg.getConversable().sendMessage("Error loading module: " + e.getMessage()); } } else { - privmsg.send("File does not exist!"); + privmsg.getConversable().sendMessage("File does not exist!"); } } } else if (command.startsWith("remove ")) { String name = command.substring(6).trim(); if (name.matches(".*[^\\w].*")) { //contains a symbol that isn't a word - privmsg.send("Invalid name!"); + privmsg.getConversable().sendMessage("Invalid name!"); } else { ExternalModule module = null; for (ExternalModule ext : loadedModules) { @@ -127,9 +127,9 @@ public void processMessage(Privmsg privmsg) { if (module != null) { loadedModules.remove(module); if (getFvb().removeModule(module)) { - privmsg.send("Successfully removed"); + privmsg.getConversable().sendMessage("Successfully removed"); } else { - privmsg.send("Failed to remove"); + privmsg.getConversable().sendMessage("Failed to remove"); } } } diff --git a/src/main/java/org/freecode/irc/votebot/modules/admin/OpenClosePollModule.java b/src/main/java/org/freecode/irc/votebot/modules/admin/OpenClosePollModule.java index b7df115..b538869 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/admin/OpenClosePollModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/admin/OpenClosePollModule.java @@ -1,6 +1,6 @@ package org.freecode.irc.votebot.modules.admin; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.PollExpiryAnnouncer; import org.freecode.irc.votebot.api.AdminModule; import org.freecode.irc.votebot.dao.PollDAO; @@ -31,7 +31,7 @@ public void processMessage(Privmsg privmsg) { } try { if (pollDAO.setStatusOfPoll(id, state) > 0) { - privmsg.send("Poll #" + id + " " + action + "."); + privmsg.getConversable().sendMessage("Poll #" + id + " " + action + "."); if (action.equalsIgnoreCase("closed")) { Future future = getFvb().pollFutures.get(id); if (future != null) { diff --git a/src/main/java/org/freecode/irc/votebot/modules/admin/RebuildModule.java b/src/main/java/org/freecode/irc/votebot/modules/admin/RebuildModule.java index 85003db..bb81d4a 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/admin/RebuildModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/admin/RebuildModule.java @@ -1,6 +1,6 @@ package org.freecode.irc.votebot.modules.admin; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.AdminModule; import java.io.BufferedReader; @@ -16,74 +16,68 @@ */ public class RebuildModule extends AdminModule { - private String idAbbrev; - private String idDescribe; - - public static final String LAST_ID = "pre-rebuild.commit.id.abbrev"; - - public void init() { - String last = readString(LAST_ID); - if (idAbbrev.equalsIgnoreCase(last)) return; - - int commits = countCommitsSince(last); - getFvb().sendMsg("Running " + idDescribe + ", " + commits + " new commits since last run (" + last + ")"); - - store(LAST_ID, idAbbrev); - } - - @Override - public void processMessage(Privmsg privmsg) { - try (BufferedWriter writer = privmsg.getIrcConnection().getWriter()) { - writer.write("QUIT :Rebuilding!\r\n"); - writer.flush(); - } catch (IOException e) { - e.printStackTrace(); - } - - try (BufferedReader reader = executeRebuild()) { - String line; - while ((line = reader.readLine()) != null) { - System.out.println(line); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - - private static int countCommitsSince(String idAbbrev) { - try { - Process p = Runtime.getRuntime().exec(new String[]{ - "/bin/sh", "-c", "git rev-list " + idAbbrev + "..HEAD | wc -l" - }); - String line = new BufferedReader(new InputStreamReader(p.getInputStream())).readLine(); - return Integer.parseInt(line); - } catch (IOException | NumberFormatException e) { - e.printStackTrace(); - } - - return -1; - } - - private static BufferedReader executeRebuild() throws IOException { - Process p = Runtime.getRuntime().exec("./run.sh &"); - return new BufferedReader(new InputStreamReader(p.getInputStream())); - } - - @Override - public String getName() { - return "rebuild"; - } - - protected Right[] getRights() { - return new Right[]{Right.FOUNDER}; - } - - public void setIdAbbrev(String idAbbrev) { - this.idAbbrev = idAbbrev; - } - - public void setIdDescribe(String idDescribe) { - this.idDescribe = idDescribe; - } + private String idAbbrev; + private String idDescribe; + + public static final String LAST_ID = "pre-rebuild.commit.id.abbrev"; + + public void init() { + String last = readString(LAST_ID); + if (idAbbrev.equalsIgnoreCase(last)) return; + + int commits = countCommitsSince(last); + getFvb().sendMsg("Running " + idDescribe + ", " + commits + " new commits since last run (" + last + ")"); + + store(LAST_ID, idAbbrev); + } + + @Override + public void processMessage(Privmsg privmsg) { + privmsg.getConversable().getServer().quit("REBUILDING"); + try (BufferedReader reader = executeRebuild()) { + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static int countCommitsSince(String idAbbrev) { + try { + Process p = Runtime.getRuntime().exec(new String[]{ + "/bin/sh", "-c", "git rev-list " + idAbbrev + "..HEAD | wc -l" + }); + String line = new BufferedReader(new InputStreamReader(p.getInputStream())).readLine(); + return Integer.parseInt(line); + } catch (IOException | NumberFormatException e) { + e.printStackTrace(); + } + + return -1; + } + + private static BufferedReader executeRebuild() throws IOException { + Process p = Runtime.getRuntime().exec("./run.sh &"); + return new BufferedReader(new InputStreamReader(p.getInputStream())); + } + + @Override + public String getName() { + return "rebuild"; + } + + protected Right[] getRights() { + return new Right[]{Right.FOUNDER}; + } + + public void setIdAbbrev(String idAbbrev) { + this.idAbbrev = idAbbrev; + } + + public void setIdDescribe(String idDescribe) { + this.idDescribe = idDescribe; + } } diff --git a/src/main/java/org/freecode/irc/votebot/modules/admin/SendMessageModule.java b/src/main/java/org/freecode/irc/votebot/modules/admin/SendMessageModule.java index 601f512..8baa8a5 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/admin/SendMessageModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/admin/SendMessageModule.java @@ -1,6 +1,6 @@ package org.freecode.irc.votebot.modules.admin; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.AdminModule; /** @@ -19,7 +19,8 @@ public void processMessage(Privmsg privmsg) { if(msg.trim().isEmpty()) { return; } - privmsg.getIrcConnection().send(new Privmsg(target, msg, privmsg.getIrcConnection())); + privmsg.getConversable().getServer(). + sendMessage(new Privmsg(msg, null, privmsg.getConversable().getServer().getUser(target))); } @Override diff --git a/src/main/java/org/freecode/irc/votebot/modules/admin/WorkingDirectoryModule.java b/src/main/java/org/freecode/irc/votebot/modules/admin/WorkingDirectoryModule.java index 5525756..48e587e 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/admin/WorkingDirectoryModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/admin/WorkingDirectoryModule.java @@ -1,6 +1,6 @@ package org.freecode.irc.votebot.modules.admin; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.AdminModule; import java.io.BufferedReader; @@ -11,7 +11,9 @@ public class WorkingDirectoryModule extends AdminModule { @Override public void processMessage(Privmsg privmsg) { try (BufferedReader reader = executePwd()) { - privmsg.getIrcConnection().send(new Privmsg(privmsg.getNick(), "PWD: " + reader.readLine(), privmsg.getIrcConnection())); + privmsg.getConversable().getServer().sendMessage( + new Privmsg("PWD: " + reader.readLine(), null, + privmsg.getConversable().getServer().getUser(privmsg.getSender()))); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/org/freecode/irc/votebot/modules/common/PollsModule.java b/src/main/java/org/freecode/irc/votebot/modules/common/PollsModule.java index 0e11fa0..c2a9034 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/common/PollsModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/common/PollsModule.java @@ -1,7 +1,8 @@ package org.freecode.irc.votebot.modules.common; -import org.freecode.irc.Notice; -import org.freecode.irc.Privmsg; +import com.speed.irc.connection.Server; +import com.speed.irc.types.Notice; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.CommandModule; import org.freecode.irc.votebot.dao.PollDAO; import org.freecode.irc.votebot.dao.VoteDAO; @@ -24,19 +25,20 @@ public void processMessage(Privmsg privmsg) { try { Poll[] polls = pollDAO.getOpenPolls(); String[] params = privmsg.getMessage().split(" "); + Server server = privmsg.getConversable().getServer(); - if (params.length != 1) { - polls = voteDAO.getPollsNotVotedIn(polls, privmsg.getNick()); + if (params.length != 1) { + polls = voteDAO.getPollsNotVotedIn(polls, privmsg.getSender()); } if (polls.length == 0) { String message = params.length == 1 ? "No active polls to view!" : "No polls to vote in!"; - privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), message, privmsg.getIrcConnection())); + server.sendNotice(new Notice(message, null, privmsg.getSender(), server)); return; } String message = params.length == 1 ? "List of polls:" : "List of polls not voted in:"; - privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), message, privmsg.getIrcConnection())); + server.sendNotice(new Notice(message, null, privmsg.getSender(), server)); for (Poll poll : polls) { Vote[] votes = voteDAO.getVotesOnPoll(poll.getId()); @@ -56,11 +58,11 @@ public void processMessage(Privmsg privmsg) { String msg = "Poll #" + poll.getId() + ": " + poll.getQuestion() + " Ends: " + getDateFormatter().format(new Date(poll.getExpiry())) + " Created by: " + poll.getCreator() + " Yes: " + yes + " No: " + no + " Abstain: " + abstain; - privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), msg, privmsg.getIrcConnection())); + server.sendNotice(new Notice(msg, null, privmsg.getSender(), server)); } - privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), "End list of polls.", privmsg.getIrcConnection())); + server.sendNotice(new Notice("End list of polls", null, privmsg.getSender(), server)); } catch (SQLException e) { - privmsg.send(e.getMessage()); + privmsg.getConversable().sendMessage(e.getMessage()); } } diff --git a/src/main/java/org/freecode/irc/votebot/modules/common/StoreTestModule.java b/src/main/java/org/freecode/irc/votebot/modules/common/StoreTestModule.java index 001283a..362975e 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/common/StoreTestModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/common/StoreTestModule.java @@ -1,6 +1,6 @@ package org.freecode.irc.votebot.modules.common; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.CommandModule; public class StoreTestModule extends CommandModule { @@ -11,11 +11,11 @@ public void processMessage(Privmsg privmsg) { if (command.equalsIgnoreCase("test")) { String lastSender; if ((lastSender = readString("sender.last")) == null) { - privmsg.send("Successful test!"); + privmsg.getConversable().sendMessage("Successful test!"); } else { - privmsg.send("Successful test! Last tester was: " + lastSender); + privmsg.getConversable().sendMessage("Successful test! Last tester was: " + lastSender); } - store("sender.last", privmsg.getNick()); + store("sender.last", privmsg.getSender()); } else if (command.startsWith("set ")) { try { String[] args = command.substring(4).trim().split(" "); @@ -23,7 +23,7 @@ public void processMessage(Privmsg privmsg) { String value = args[1]; store(key, value); - privmsg.send(key + ": " + readJson(key)); + privmsg.getConversable().sendMessage(key + ": " + readJson(key)); } catch (Exception e) { e.printStackTrace(); } @@ -31,7 +31,7 @@ public void processMessage(Privmsg privmsg) { try { String key = command.substring(4).trim(); - privmsg.send(key + ": " + readJson(key)); + privmsg.getConversable().sendMessage(key + ": " + readJson(key)); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/org/freecode/irc/votebot/modules/common/TestModule.java b/src/main/java/org/freecode/irc/votebot/modules/common/TestModule.java index 9610f27..fc37518 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/common/TestModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/common/TestModule.java @@ -1,6 +1,6 @@ package org.freecode.irc.votebot.modules.common; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.CommandModule; public class TestModule extends CommandModule { @@ -8,12 +8,12 @@ public class TestModule extends CommandModule { public void processMessage(Privmsg privmsg) { String lastSender; if ((lastSender = readString("sender.last")) == null) { - privmsg.send("Successful test!"); + privmsg.getConversable().sendMessage("Successful test!"); } else { //lastSender = new Gson().fromJson(lastSender, String.class); - privmsg.send("Successful test! Last tester was: " + lastSender); + privmsg.getConversable().sendMessage("Successful test! Last tester was: " + lastSender); } - store("sender.last", privmsg.getNick()); + store("sender.last", privmsg.getSender()); } public String getName() { diff --git a/src/main/java/org/freecode/irc/votebot/modules/common/VersionModule.java b/src/main/java/org/freecode/irc/votebot/modules/common/VersionModule.java index 0393924..aed92ef 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/common/VersionModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/common/VersionModule.java @@ -1,6 +1,6 @@ package org.freecode.irc.votebot.modules.common; -import org.freecode.irc.Privmsg; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.api.CommandModule; public class VersionModule extends CommandModule { @@ -13,9 +13,9 @@ public class VersionModule extends CommandModule { public void processMessage(Privmsg privmsg) { String[] params = privmsg.getMessage().split(" "); if (params.length == 1) { - privmsg.send("Version: " + version); + privmsg.getConversable().sendMessage("Version: " + version); } else { - privmsg.send("Version: " + version + ", last commit \"" + + privmsg.getConversable().sendMessage("Version: " + version + ", last commit \"" + commitMessage + "\" by " + commitAuthor + ", " + commitTime); } } diff --git a/src/main/java/org/freecode/irc/votebot/modules/common/VoteModule.java b/src/main/java/org/freecode/irc/votebot/modules/common/VoteModule.java index 8f9d863..c6272c1 100644 --- a/src/main/java/org/freecode/irc/votebot/modules/common/VoteModule.java +++ b/src/main/java/org/freecode/irc/votebot/modules/common/VoteModule.java @@ -1,7 +1,8 @@ package org.freecode.irc.votebot.modules.common; -import org.freecode.irc.Notice; -import org.freecode.irc.Privmsg; +import com.speed.irc.connection.Server; +import com.speed.irc.types.Notice; +import com.speed.irc.types.Privmsg; import org.freecode.irc.votebot.NoticeFilter; import org.freecode.irc.votebot.api.CommandModule; import org.freecode.irc.votebot.dao.PollDAO; @@ -23,172 +24,175 @@ */ public class VoteModule extends CommandModule { - private PollDAO pollDAO; - private VoteDAO voteDAO; - - public void processMessage(Privmsg privmsg) { - String message = privmsg.getMessage(); - if (message.startsWith("!v ") || message.startsWith("!vote ")) { - final String msg = privmsg.getMessage().substring(privmsg.getMessage().indexOf(' ')).trim(); - System.out.println(msg); - final String[] split = msg.split(" ", 2); - if (split.length == 2) { - String ids = split[0]; - String vote = split[1].toLowerCase(); - final int nId; - switch (vote) { - case "yes": - nId = 0; - break; - case "no": - nId = 1; - break; - case "abstain": - nId = 2; - break; - default: - return; - } - if (!ids.matches("\\d+")) { - return; - } - final int id = Integer.parseInt(ids); - vote(nId, id, privmsg); - } else if (split.length == 1) { - String id = split[0]; - if (!id.matches("\\d+")) { - return; - } - try { - - int pollId = Integer.parseInt(id); - Poll poll = pollDAO.getPoll(pollId); - - if (poll != null) { - String expiry = getDateFormatter().format(new Date(poll.getExpiry())); - String closed = poll.isClosed() ? "Closed" : "Open"; - if (System.currentTimeMillis() >= poll.getExpiry()) { - closed = "Expired"; - } - - Vote[] votes = voteDAO.getVotesOnPoll(pollId); - int yes = 0, no = 0, abstain = 0; - for (Vote vote : votes) { - int answerIndex = vote.getAnswerIndex(); - if (answerIndex == 0) { - yes++; - } else if (answerIndex == 1) { - no++; - } else if (answerIndex == 2) { - abstain++; - } - } - - boolean open = closed.equals("Open"); - privmsg.send("Poll #" + poll.getId() + ": " + poll.getQuestion() + - " Created by: " + poll.getCreator() + - " Yes: " + yes + " No: " + no + " Abstain: " + abstain + - " Status: \u00030" + (open ? "3" : "4") + closed + "\u0003" + - (open ? " Ends: " : " Ended: ") + expiry); - - } - } catch (SQLException e) { - privmsg.send(e.getMessage()); - } - } - - } else if (message.startsWith("!y ")) { - String id = message.replace("!y", "").trim(); - if (id.matches("\\d+")) { - voteYes(Integer.parseInt(id), privmsg); - } - } else if (message.startsWith("!n ")) { - String id = message.replace("!n", "").trim(); - if (id.matches("\\d+")) { - voteNo(Integer.parseInt(id), privmsg); - } - } else if (message.startsWith("!a ")) { - String id = message.replace("!a", "").trim(); - if (id.matches("\\d+")) { - voteAbstain(Integer.parseInt(id), privmsg); - } - } - } - - private void voteYes(final int pollId, final Privmsg privmsg) { - vote(0, pollId, privmsg); - } - - private void voteNo(final int pollId, final Privmsg privmsg) { - vote(1, pollId, privmsg); - } - - private void voteAbstain(final int pollId, final Privmsg privmsg) { - vote(2, pollId, privmsg); - } - - private void vote(final int answerIndex, final int pollId, final Privmsg privmsg) { - - privmsg.getIrcConnection().addListener(new NoticeFilter() { - public boolean accept(Notice notice) { - if (notice.getNick().equals("ChanServ") && notice.getMessage().equals("Permission denied.")) { - notice.getIrcConnection().removeListener(this); - return false; - } - return notice.getNick().equals("ChanServ") && notice.getMessage().contains("Main nick:") && notice.getMessage().contains(privmsg.getNick()); - } - - public void run(Notice notice) { - try { - String mainNick = notice.getMessage().substring(notice.getMessage().indexOf("Main nick:") + 10).trim(); - System.out.println(mainNick); - - Poll poll = pollDAO.getPoll(pollId); - if (poll != null) { - long time = poll.getExpiry(); - if (System.currentTimeMillis() < time && !poll.isClosed()) { - Vote vote = voteDAO.getUsersVoteOnPoll(mainNick, pollId); - if (vote != null) { - if (vote.getAnswerIndex() == answerIndex) { - privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), "You've already voted with this option!", privmsg.getIrcConnection())); - } else { - vote.setAnswerIndex(answerIndex); - voteDAO.updateUsersVote(vote); - privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), "Vote updated.", privmsg.getIrcConnection())); - } - } else { - voteDAO.addUsersVote(mainNick, pollId, answerIndex); - privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), "Vote cast.", privmsg.getIrcConnection())); - } - } else { - privmsg.getIrcConnection().send(new Notice(privmsg.getNick(), "Voting is closed for this poll.", privmsg.getIrcConnection())); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - privmsg.getIrcConnection().removeListener(this); - } - }); - - askChanServForUserCreds(privmsg); - } - - private DateFormat getDateFormatter() { - DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.UK); - dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/London")); - return dateFormat; - } - - public String getName() { - return "(vote|v|y|n|a)"; - } - - public void setPollDAO(PollDAO pollDAO) { - this.pollDAO = pollDAO; - } - - public void setVoteDAO(VoteDAO voteDAO) { - this.voteDAO = voteDAO; - } + private PollDAO pollDAO; + private VoteDAO voteDAO; + + public void processMessage(Privmsg privmsg) { + String message = privmsg.getMessage(); + if (message.startsWith("!v ") || message.startsWith("!vote ")) { + final String msg = privmsg.getMessage().substring(privmsg.getMessage().indexOf(' ')).trim(); + System.out.println(msg); + final String[] split = msg.split(" ", 2); + if (split.length == 2) { + String ids = split[0]; + String vote = split[1].toLowerCase(); + final int nId; + switch (vote) { + case "yes": + nId = 0; + break; + case "no": + nId = 1; + break; + case "abstain": + nId = 2; + break; + default: + return; + } + if (!ids.matches("\\d+")) { + return; + } + final int id = Integer.parseInt(ids); + vote(nId, id, privmsg); + } else if (split.length == 1) { + String id = split[0]; + if (!id.matches("\\d+")) { + return; + } + try { + + int pollId = Integer.parseInt(id); + Poll poll = pollDAO.getPoll(pollId); + + if (poll != null) { + String expiry = getDateFormatter().format(new Date(poll.getExpiry())); + String closed = poll.isClosed() ? "Closed" : "Open"; + if (System.currentTimeMillis() >= poll.getExpiry()) { + closed = "Expired"; + } + + Vote[] votes = voteDAO.getVotesOnPoll(pollId); + int yes = 0, no = 0, abstain = 0; + for (Vote vote : votes) { + int answerIndex = vote.getAnswerIndex(); + if (answerIndex == 0) { + yes++; + } else if (answerIndex == 1) { + no++; + } else if (answerIndex == 2) { + abstain++; + } + } + + boolean open = closed.equals("Open"); + privmsg.getConversable().sendMessage("Poll #" + poll.getId() + ": " + poll.getQuestion() + + " Created by: " + poll.getCreator() + + " Yes: " + yes + " No: " + no + " Abstain: " + abstain + + " Status: \u00030" + (open ? "3" : "4") + closed + "\u0003" + + (open ? " Ends: " : " Ended: ") + expiry); + + } + } catch (SQLException e) { + privmsg.getConversable().sendMessage(e.getMessage()); + } + } + + } else if (message.startsWith("!y ")) { + String id = message.replace("!y", "").trim(); + if (id.matches("\\d+")) { + voteYes(Integer.parseInt(id), privmsg); + } + } else if (message.startsWith("!n ")) { + String id = message.replace("!n", "").trim(); + if (id.matches("\\d+")) { + voteNo(Integer.parseInt(id), privmsg); + } + } else if (message.startsWith("!a ")) { + String id = message.replace("!a", "").trim(); + if (id.matches("\\d+")) { + voteAbstain(Integer.parseInt(id), privmsg); + } + } + } + + private void voteYes(final int pollId, final Privmsg privmsg) { + vote(0, pollId, privmsg); + } + + private void voteNo(final int pollId, final Privmsg privmsg) { + vote(1, pollId, privmsg); + } + + private void voteAbstain(final int pollId, final Privmsg privmsg) { + vote(2, pollId, privmsg); + } + + private void vote(final int answerIndex, final int pollId, final Privmsg privmsg) { + + privmsg.getConversable().getServer().getEventManager().addListener(new NoticeFilter() { + public boolean accept(Notice notice) { + if (notice.getSenderNick().equals("ChanServ") && notice.getMessage().equals("Permission denied.")) { + notice.getServer().getEventManager().removeListener(this); + return false; + } + return notice.getSenderNick().equals("ChanServ") && notice.getMessage().contains("Main nick:") && notice.getMessage().contains(privmsg.getSender()); + } + + public void run(Notice notice) { + try { + String mainNick = notice.getMessage().substring(notice.getMessage().indexOf("Main nick:") + 10).trim(); + System.out.println(mainNick); + Server server = privmsg.getConversable().getServer(); + Poll poll = pollDAO.getPoll(pollId); + if (poll != null) { + long time = poll.getExpiry(); + if (System.currentTimeMillis() < time && !poll.isClosed()) { + Vote vote = voteDAO.getUsersVoteOnPoll(mainNick, pollId); + if (vote != null) { + if (vote.getAnswerIndex() == answerIndex) { + server.sendNotice(new Notice("You've already voted with this option!", null, privmsg.getSender(), server)); + } else { + vote.setAnswerIndex(answerIndex); + voteDAO.updateUsersVote(vote); + server.sendNotice(new Notice("Vote updated!", null, privmsg.getSender(), server)); + + } + } else { + voteDAO.addUsersVote(mainNick, pollId, answerIndex); + server.sendNotice(new Notice("Vote cast!s", null, privmsg.getSender(), server)); + + } + } else { + server.sendNotice(new Notice("Voting is closed for this poll.", null, privmsg.getSender(), server)); + + } + } + } catch (Exception e) { + e.printStackTrace(); + } + privmsg.getConversable().getServer().getEventManager().removeListener(this); + } + }); + + askChanServForUserCreds(privmsg); + } + + private DateFormat getDateFormatter() { + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.UK); + dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/London")); + return dateFormat; + } + + public String getName() { + return "(vote|v|y|n|a)"; + } + + public void setPollDAO(PollDAO pollDAO) { + this.pollDAO = pollDAO; + } + + public void setVoteDAO(VoteDAO voteDAO) { + this.voteDAO = voteDAO; + } } diff --git a/src/main/resources/properties/freevotebot.properties b/src/main/resources/properties/freevotebot.properties index 1ded562..c2163b6 100644 --- a/src/main/resources/properties/freevotebot.properties +++ b/src/main/resources/properties/freevotebot.properties @@ -5,7 +5,7 @@ user.realName=FreeVoteBot # IRC Server Properties ircServer.host=irc.rizon.net -ircServer.port=6667 +ircServer.port=6697 ircServer.channels=#freecode # Database Properties