
TjMSNLib Developers Resources
So you are interested in writing a MSN Messenger client based on TjMSNLib, this page is aimed at being a basic tutorial on using TjMSNLib.
In order to interface with TjMSNLib there is only one class that you need to extend from the library (MSNServerInterface). This class is designed to be the interface between the msn network and rest of the client.
A very basic client
This example shows how to create a very simple messenger client that prints out the names of the users on the local users contact list when the client first logs in and every time the name of a contact changes.
import java.util.ArrayList;
import java.util.HashMap;
import com.tomjudge.TjMSNLib.User;
public class MSNClient extends com.tomjudge.TjMSNLib.MSNServerInterface {
private HashMap<User, User.UpdateListener> userListeners;
public MSNClient(String username, String password) {
super();
userListeners = new HashMap<User, User.UpdateListener>();
this.signIn(username,password);
}
public void addGroup(String name, String id) {}
public void addUser(final User user) {
System.out.println("User: "+user.getHandle()+" ("+user.getPassport()+")");
User.UpdateListener list = new User.UpdateListener() {
public void blockedChanged(boolean blocked) {}
public void groupChanged(ArrayList<String> oldGroups,
ArrayList<String> groups) {}
public void handleChanged(String old, String handle) {
System.out.println("User: "+user.getHandle()+
" ("+user.getPassport()+")");
}
public void homePhoneChanged(String phh) {}
public void mbeChanged(String mbe) {}
public void messageChanged(String message) {}
public void mobChanged(String mob) {}
public void mobilePhoneChanged(String phm) {}
public void stateChanged(int state) {}
public void workPhoneChanged(String phw) {}
};
userListeners.put(user, list);
user.addListener(list);
}
public void alertFailed(int id) {}
public int alertInboudTransfer(String passport,
String file, String size) { return DECLINE; }
public int alertInboundConnection() { return DECLINE; }
public int alertOutboundConnection() { return DECLINE; }
public void alertTransferComplete(int id) {}
public java.io.File getInboudFile(String file) { return null; }
public void imRecived(int displayId, User user, String message, String format) {}
public void increaseAmountTransfered(int id, long size) {}
public void removeGroup(String id) {}
public void removeUser(User user) {
user.removeListener(userListeners.get(user));
}
public void renameGroup(String e,String s) {}
public void setClientDisplayName(String screenname) {}
public void setClientStatus(int status) {}
public void setDisplayMenus(int status) {}
public void setDisplaySigendOut() {}
public void setFileSize(int id, long size) {}
public void showError(String title, String message) {
System.out.println("ERROR: "+title+",\n\t"+message);
}
public int userAddedYou(User user) { return ACCEPT; }
public String userAddedYouGetGroup(User user) { return ""; }
public void userJoinedIm(int displayId, User user) {}
public void userTyping(int displayId, User user) {}
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("Usage: java MSNClient username password");
System.exit(2);
}
new MSNClient(args[0], args[1]);
}
}
A Mini-Bot
The following example will show how to create a mini bot that replys with ok to every message that it recives.
import com.tomjudge.TjMSNLib.User;
public class MiniBot extends MSNClient {
public MiniBot(String username, String password) {
super(username, password);
}
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("Usage: java MiniBot username password");
System.exit(2);
}
new MiniBot(args[0], args[1]);
}
public void imRecived(int displayId, User user, String message, String format) {
System.out.println("Recived message ("+user.getHandle()+"):\n"+message);
System.out.println("Sending OK as reply");
this.sendIm(displayId, "OK");
}
}
Mini-Bot MK2
This little extension to the first Mini-Bot will make the bot send the message "hey" to any user whos status changes.
import com.tomjudge.TjMSNLib.User;
import java.util.HashMap;
public class MiniBotMk2 extends MiniBot {
private HashMap<User, User.UpdateListener> userListeners =
new HashMap<User, User.UpdateListener>();
public MiniBotMk2(String username, String password) {
super(username, password);
new HashMap<User, User.UpdateListener>();
}
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("Usage: java MiniBot username password");
System.exit(2);
}
new MiniBotMk2(args[0], args[1]);
}
public void addUser(final User user) {
super.addUser(user);
User.UpdateListener list = new User.UpdateListener() {
public void blockedChanged(boolean blocked) {}
public void groupChanged(ArrayList<String> oldGroups,
ArrayList<String> groups) {}
public void handleChanged(String old, String handle) {}
public void homePhoneChanged(String phh) {}
public void mbeChanged(String mbe) {}
public void messageChanged(String message) {}
public void mobChanged(String mob) {}
public void mobilePhoneChanged(String phm) {}
public void stateChanged(int state) {
if (state != FLN) {
sendIm(requestSession(user), "Hey");
}
}
void workPhoneChanged(String phw) {}
};
userListeners.put(user, list);
user.addListener(list);
}
public void removeUser(User user) {
super.removeUser(user);
user.removeListener(userListeners.get(user));
}
}
