import org.jivesoftware.smack.*; import org.jivesoftware.smack.packet.*; public class GoogleTalkBot implements MessageListener { public static String PASSWORD; public static String SERVER; public static String USERNAME; public static void main(String[] args) { try { XMPPConnection conn = new XMPPConnection(SERVER); conn.connect(); conn.login(USERNAME, PASSWORD); System.out.println("# Logged in as " + conn.getUser()); Roster roster = conn.getRoster(); System.out.println("# Roster entries: " + roster.getEntryCount()); System.out.println("# Roster subscription mode: '" + roster.getSubscriptionMode() + "'"); ChatManager chatManager = conn.getChatManager(); GoogleTalkBot listener = new GoogleTalkBot(); for(RosterEntry e: roster.getEntries()) { System.out.println("# Adding " + e.getUser()); System.out.println("#\tName:\t" + e.getName()); System.out.println("#\tStatus:\t" + e.getStatus()); System.out.println("#\tType:\t" + e.getType()); for(RosterGroup g: e.getGroups()) System.out.println("#\tGroup:\t" + g.getName()); if(listener.addChat(e.getUser(), chatManager)) System.out.println("# Added chat with " + e.getUser()); else System.out.println("# Already chatting with " + e.getUser()); } System.out.println("# Done adding chats"); synchronized(listener) { listener.wait(); } conn.disconnect(); } catch(InterruptedException e) { System.err.println("Wait interrupted: " + e); } catch(XMPPException e) { System.err.println("XMPP exception: " + e); } } public GoogleTalkBot() { this.chats = new java.util.HashMap(); } public synchronized boolean addChat(String user, ChatManager chatManager) { if(this.chats.containsKey(user)) return false; this.chats.put(user, chatManager.createChat(user, this)); return true; } public synchronized void processMessage(Chat chat, Message message) { String messageText = message.getBody(); if(null == messageText) return; String user = chat.getParticipant(); java.util.Date now = new java.util.Date(); System.out.println("(" + now + ") " + user + ": " + messageText); try { if(messageText.equals("#LIST")) { String response = "Currently chatting with:"; for(String s: this.chats.keySet()) response += "\n" + s; chat.sendMessage(response); } else if(messageText.equals("#STOP")) { this.notify(); } else { String response = user + ": " + messageText; for(String s: chats.keySet()) if(!s.equals(user)) chats.get(s).sendMessage(response); } } catch(XMPPException ex) { System.err.println("Could not send message: " + ex); } } private java.util.Map chats; }