aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/xmpp/s2s/JuickBot.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick/xmpp/s2s/JuickBot.java')
-rw-r--r--src/main/java/com/juick/xmpp/s2s/JuickBot.java185
1 files changed, 80 insertions, 105 deletions
diff --git a/src/main/java/com/juick/xmpp/s2s/JuickBot.java b/src/main/java/com/juick/xmpp/s2s/JuickBot.java
index 25c75dfe..f0b71689 100644
--- a/src/main/java/com/juick/xmpp/s2s/JuickBot.java
+++ b/src/main/java/com/juick/xmpp/s2s/JuickBot.java
@@ -19,8 +19,13 @@ import java.util.regex.Pattern;
* @author ugnich
*/
public class JuickBot {
+ XMPPComponent xmpp;
+ public JuickBot(XMPPComponent xmpp, JID JuickJID) {
+ this.xmpp = xmpp;
+ this.JuickJID = JuickJID;
+ }
- public static final JID JuickJID = new JID("juick", "juick.com", "Juick");
+ public final JID JuickJID;
private static final String HELPTEXT =
"@username text - Send private message\n"
+ "*tagname Blah-blah-blah - Post a message with tag 'tagname'\n"
@@ -55,7 +60,7 @@ public class JuickBot {
+ "\n"
+ "Read more: http://juick.com/help/";
- public static boolean incomingPresence(Presence p) throws Exception {
+ public boolean incomingPresence(Presence p) throws Exception {
final String username = p.to.Username.toLowerCase();
final boolean toJuick = username.equals("juick");
@@ -64,14 +69,12 @@ public class JuickBot {
reply.from = new JID(p.to.Username, p.to.Host, null);
reply.to = new JID(p.from.Username, p.from.Host, null);
reply.type = Presence.Type.unsubscribe;
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
return true;
} else if (p.type.equals(Presence.Type.probe)) {
int uid_to = 0;
if (!toJuick) {
- synchronized (XMPPComponent.sqlSync) {
- uid_to = UserQueries.getUIDbyName(XMPPComponent.sql, username);
- }
+ uid_to = UserQueries.getUIDbyName(xmpp.sql, username);
}
if (toJuick || uid_to > 0) {
@@ -80,12 +83,12 @@ public class JuickBot {
reply.from.Resource = "Juick";
reply.to = p.from;
reply.priority = 10;
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
} else {
Presence reply = new Presence(p.to, p.from, Presence.Type.error);
reply.id = p.id;
reply.addChild(new Error(Error.Type.cancel, "item-not-found"));
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
return true;
}
return true;
@@ -94,50 +97,46 @@ public class JuickBot {
if (toJuick) {
canSubscribe = true;
} else {
- synchronized (XMPPComponent.sqlSync) {
- int uid_to = UserQueries.getUIDbyName(XMPPComponent.sql, username);
- if (uid_to > 0) {
- PMQueries.addPMinRoster(XMPPComponent.sql, uid_to, p.from.Bare());
- canSubscribe = true;
- }
+ int uid_to = UserQueries.getUIDbyName(xmpp.sql, username);
+ if (uid_to > 0) {
+ PMQueries.addPMinRoster(xmpp.sql, uid_to, p.from.Bare());
+ canSubscribe = true;
}
}
if (canSubscribe) {
Presence reply = new Presence(p.to, p.from, Presence.Type.subscribed);
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
reply.from.Resource = "Juick";
reply.priority = 10;
reply.type = null;
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
return true;
} else {
Presence reply = new Presence(p.to, p.from, Presence.Type.error);
reply.id = p.id;
reply.addChild(new Error(Error.Type.cancel, "item-not-found"));
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
return true;
}
} else if (p.type.equals(Presence.Type.unsubscribe)) {
if (!toJuick) {
- synchronized (XMPPComponent.sqlSync) {
- int uid_to = UserQueries.getUIDbyName(XMPPComponent.sql, username);
- if (uid_to > 0) {
- PMQueries.removePMinRoster(XMPPComponent.sql, uid_to, p.from.Bare());
- }
+ int uid_to = UserQueries.getUIDbyName(xmpp.sql, username);
+ if (uid_to > 0) {
+ PMQueries.removePMinRoster(xmpp.sql, uid_to, p.from.Bare());
}
}
Presence reply = new Presence(p.to, p.from, Presence.Type.unsubscribed);
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
}
return false;
}
- public static boolean incomingMessage(Message msg) throws Exception {
+ public boolean incomingMessage(Message msg) throws Exception {
if (msg.body == null || msg.body.isEmpty()) {
return true;
}
@@ -146,11 +145,9 @@ public class JuickBot {
User user_from = null;
String signuphash = "";
- synchronized (XMPPComponent.sqlSync) {
- user_from = UserQueries.getUserByJID(XMPPComponent.sql, msg.from.Bare());
- if (user_from == null) {
- signuphash = UserQueries.getSignUpHashByJID(XMPPComponent.sql, msg.from.Bare());
- }
+ user_from = UserQueries.getUserByJID(xmpp.sql, msg.from.Bare());
+ if (user_from == null) {
+ signuphash = UserQueries.getSignUpHashByJID(xmpp.sql, msg.from.Bare());
}
if (user_from == null) {
@@ -160,7 +157,7 @@ public class JuickBot {
} else {
reply.body = "Внимание, системное сообщение!\nВаш JabberID не обнаружен в списке доверенных. Для того, чтобы отправить сообщение пользователю " + username + "@juick.com, пожалуйста зарегистрируйте свой JabberID в системе: http://juick.com/signup?type=xmpp&hash=" + signuphash + "\nЕсли у вас уже есть учетная запись на Juick, вы сможете присоединить этот JabberID к ней.\n\nWarning, system message!\nYour JabberID is not found in our server's white list. To send a message to " + username + "@juick.com, please sign up: http://juick.com/signup?type=xmpp&hash=" + signuphash + "\nIf you already have an account on Juick, you will be proposed to attach this JabberID to your existing account.";
}
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
return true;
}
@@ -168,24 +165,19 @@ public class JuickBot {
return incomingMessageJuick(user_from, msg);
}
- int uid_to = 0;
- synchronized (XMPPComponent.sqlSync) {
- uid_to = UserQueries.getUIDbyName(XMPPComponent.sql, username);
- }
+ int uid_to = UserQueries.getUIDbyName(xmpp.sql, username);
if (uid_to == 0) {
Message reply = new Message(msg.to, msg.from, Message.Type.error);
reply.id = msg.id;
reply.addChild(new Error(Error.Type.cancel, "item-not-found"));
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
return true;
}
boolean success = false;
- synchronized (XMPPComponent.sqlSync) {
- if (!UserQueries.isInBLAny(XMPPComponent.sql, uid_to, user_from.getUID())) {
- success = PMQueries.createPM(XMPPComponent.sql, user_from.getUID(), uid_to, msg.body);
- }
+ if (!UserQueries.isInBLAny(xmpp.sql, uid_to, user_from.getUID())) {
+ success = PMQueries.createPM(xmpp.sql, user_from.getUID(), uid_to, msg.body);
}
if (success) {
@@ -193,29 +185,22 @@ public class JuickBot {
m.from = new JID("juick", "juick.com", null);
m.to = new JID(Integer.toString(uid_to), "push.juick.com", null);
JuickMessage jmsg = new JuickMessage();
- synchronized (XMPPComponent.sqlSync) {
- jmsg.setUser(UserQueries.getUserByUID(XMPPComponent.sql, user_from.getUID()));
- }
+ jmsg.setUser(user_from);
jmsg.setText(msg.body);
m.childs.add(jmsg);
- XMPPComponent.connRouter.router.send(m.toString());
+ xmpp.router.send(m.toString());
m.to.Host = "ws.juick.com";
- XMPPComponent.connRouter.router.send(m.toString());
+ xmpp.router.send(m.toString());
- String jid;
+ List<String> jids;
boolean inroster = false;
- synchronized (XMPPComponent.sqlSync) {
- jid = UserQueries.getJIDbyUID(XMPPComponent.sql, uid_to);
- if (jid != null) {
- inroster = PMQueries.havePMinRoster(XMPPComponent.sql, user_from.getUID(), jid);
- }
- }
-
- if (jid != null) {
+ jids = UserQueries.getJIDsbyUID(xmpp.sql, uid_to);
+ for (String jid : jids) {
Message mm = new Message();
mm.to = new JID(jid);
mm.type = Message.Type.chat;
+ inroster = PMQueries.havePMinRoster(xmpp.sql, user_from.getUID(), jid);
if (inroster) {
mm.from = new JID(jmsg.getUser().getUName(), "juick.com", "Juick");
mm.body = msg.body;
@@ -223,21 +208,20 @@ public class JuickBot {
mm.from = new JID("juick", "juick.com", "Juick");
mm.body = "Private message from @" + jmsg.getUser().getUName() + ":\n" + msg.body;
}
- XMPPComponent.sendOut(mm);
+ xmpp.sendOut(mm);
}
-
} else {
Message reply = new Message(msg.to, msg.from, Message.Type.error);
reply.id = msg.id;
reply.addChild(new Error(Error.Type.cancel, "not-allowed"));
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
}
return true;
}
private static Pattern regexPM = Pattern.compile("^\\@(\\S+)\\s+([\\s\\S]+)$");
- public static boolean incomingMessageJuick(User user_from, Message msg) throws Exception {
+ public boolean incomingMessageJuick(User user_from, Message msg) throws Exception {
String command = msg.body.trim();
int commandlen = command.length();
@@ -274,59 +258,54 @@ public class JuickBot {
return false;
}
- private static void commandPing(Message m) throws Exception {
+ private void commandPing(Message m) throws Exception {
Presence p = new Presence(JuickJID, m.from);
p.priority = 10;
- XMPPComponent.sendOut(p);
+ xmpp.sendOut(p);
Message reply = new Message(JuickJID, m.from, Message.Type.chat);
reply.body = "PONG";
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
}
- private static void commandHelp(Message m) throws Exception {
+ private void commandHelp(Message m) throws Exception {
Message reply = new Message(JuickJID, m.from, Message.Type.chat);
reply.body = HELPTEXT;
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
}
- private static void commandLogin(Message m, User user_from) throws Exception {
+ private void commandLogin(Message m, User user_from) throws Exception {
Message reply = new Message(JuickJID, m.from, Message.Type.chat);
- reply.body = "http://juick.com/login?" + UserQueries.getHashByUID(XMPPComponent.sql, user_from.getUID());
- XMPPComponent.sendOut(reply);
+ reply.body = "http://juick.com/login?" + UserQueries.getHashByUID(xmpp.sql, user_from.getUID());
+ xmpp.sendOut(reply);
}
- private static void commandPM(Message m, User user_from, String user_to, String body) throws Exception {
+ private void commandPM(Message m, User user_from, String user_to, String body) throws Exception {
int ret = 0;
int uid_to = 0;
- String jid_to = null;
+ List<String> jids_to = null;
boolean haveInRoster = false;
- synchronized (XMPPComponent.sqlSync) {
- if (user_to.indexOf('@') > 0) {
- uid_to = UserQueries.getUIDbyJID(XMPPComponent.sql, user_to);
- } else {
- uid_to = UserQueries.getUIDbyName(XMPPComponent.sql, user_to);
- }
+ if (user_to.indexOf('@') > 0) {
+ uid_to = UserQueries.getUIDbyJID(xmpp.sql, user_to);
+ } else {
+ uid_to = UserQueries.getUIDbyName(xmpp.sql, user_to);
+ }
- if (uid_to > 0) {
- if (!UserQueries.isInBLAny(XMPPComponent.sql, uid_to, user_from.getUID())) {
- if (PMQueries.createPM(XMPPComponent.sql, user_from.getUID(), uid_to, body)) {
- jid_to = UserQueries.getJIDbyUID(XMPPComponent.sql, uid_to);
- if (jid_to != null) {
- haveInRoster = PMQueries.havePMinRoster(XMPPComponent.sql, user_from.getUID(), jid_to);
- }
- ret = 200;
- } else {
- ret = 500;
- }
+ if (uid_to > 0) {
+ if (!UserQueries.isInBLAny(xmpp.sql, uid_to, user_from.getUID())) {
+ if (PMQueries.createPM(xmpp.sql, user_from.getUID(), uid_to, body)) {
+ jids_to = UserQueries.getJIDsbyUID(xmpp.sql, uid_to);
+ ret = 200;
} else {
- ret = 403;
+ ret = 500;
}
} else {
- ret = 404;
+ ret = 403;
}
+ } else {
+ ret = 404;
}
if (ret == 200) {
@@ -337,15 +316,16 @@ public class JuickBot {
jmsg.setUser(user_from);
jmsg.setText(body);
msg.childs.add(jmsg);
- XMPPComponent.connRouter.router.send(msg.toString());
+ xmpp.router.send(msg.toString());
msg.to.Host = "ws.juick.com";
- XMPPComponent.connRouter.router.send(msg.toString());
+ xmpp.router.send(msg.toString());
- if (jid_to != null) {
+ for (String jid : jids_to) {
Message mm = new Message();
- mm.to = new JID(jid_to);
+ mm.to = new JID(jid);
mm.type = Message.Type.chat;
+ haveInRoster = PMQueries.havePMinRoster(xmpp.sql, user_from.getUID(), jid);
if (haveInRoster) {
mm.from = new JID(user_from.getUName(), "juick.com", "Juick");
mm.body = body;
@@ -353,7 +333,7 @@ public class JuickBot {
mm.from = new JID("juick", "juick.com", "Juick");
mm.body = "Private message from @" + user_from.getUName() + ":\n" + body;
}
- XMPPComponent.sendOut(mm);
+ xmpp.sendOut(mm);
}
}
@@ -365,22 +345,17 @@ public class JuickBot {
reply.type = Message.Type.error;
reply.body = "Error " + ret;
}
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
}
- private static void commandBLShow(Message m, User user_from) throws Exception {
- List<User> blusers;
- List<String> bltags;
-
- synchronized (XMPPComponent.sqlSync) {
- blusers = UserQueries.getUserBLUsers(XMPPComponent.sql, user_from.getUID());
- bltags = TagQueries.getUserBLTags(XMPPComponent.sql, user_from.getUID());
- }
+ private void commandBLShow(Message m, User user_from) throws Exception {
+ List<User> blusers = UserQueries.getUserBLUsers(xmpp.sql, user_from.getUID());
+ List<String> bltags = TagQueries.getUserBLTags(xmpp.sql, user_from.getUID());
String txt = "";
if (bltags.size() > 0) {
- for (int i = 0; i < bltags.size(); i++) {
- txt += "*" + bltags.get(i) + "\n";
+ for (String bltag : bltags) {
+ txt += "*" + bltag + "\n";
}
if (blusers.size() > 0) {
@@ -388,8 +363,8 @@ public class JuickBot {
}
}
if (blusers.size() > 0) {
- for (int i = 0; i < blusers.size(); i++) {
- txt += "@" + blusers.get(i).getUName() + "\n";
+ for (User bluser : blusers) {
+ txt += "@" + bluser.getUName() + "\n";
}
}
if (txt.isEmpty()) {
@@ -398,6 +373,6 @@ public class JuickBot {
Message reply = new Message(JuickJID, m.from, Message.Type.chat);
reply.body = txt;
- XMPPComponent.sendOut(reply);
+ xmpp.sendOut(reply);
}
}