Sakura is a hybrid XMPP/IRC bot that transports messages between both
networks. It is written in Scala and uses the Smack XMPP API by
To start it you should issue it with the following parameter:

Sakura itself takes a config file as an argument (for an
example see testconfig.xml)

* http://www.scala-lang.org/
* http://www.igniterealtime.org/projects/smack/index.jsp

Since some XMPP clients send nonconformant messages you should patch the
Smack library, otherwise Sakura will quit on these messages because of an
uncaught exception.

Here is a patch I found in the ignite forums:

# This patch file was generated by NetBeans IDE
# Following Index: paths are relative to: /home/beci/source/smacksvn/smack/trunk/source/org/jivesoftware/smack/util
# This patch can be applied using context Tools: Patch action on respective folder.
# It uses platform neutral UTF-8 encoding and \n newlines.
# Above lines and this line are ignored by the patching process.
Index: PacketParserUtils.java
--- PacketParserUtils.java Base (BASE)
+++ PacketParserUtils.java Locally Modified (Based On LOCAL)
@@ -32,6 +32,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.xmlpull.v1.XmlPullParserException;
  * Utility class that helps to parse packets. Any parsing packets method that must be shared
@@ -86,9 +87,13 @@
                 else if (elementName.equals("body")) {
                     String xmlLang = getLanguageAttribute(parser);
+                    try {
                     body = parser.nextText();
                     message.addBody(xmlLang, body);
+                    } catch (XmlPullParserException ex) {
+                        ex.printStackTrace();
+                }
\ No newline at end of file
                 else if (elementName.equals("thread")) {
                     if (thread == null) {
                         thread = parser.nextText();