After doing quite a bit of development on ArmaBot past the version available on the website, I decided to put ArmaBot away and begin work on a completely new project. There were several issues that were tough to overcome, and there was also the problem that the code had become spaghettified. Over 55,000 lines of code in 12 modules, it got the job done, but it was also a bit top-heavy. There was also one other motivating factor -- ArmaBot can't get online at work. There's a firewall at my work that prevents me from connecting to nonstandard ports; I can get onto port 443, 25, 21, and 80, but that's it.
With that, and seeing the news that Stealth is no longer going to be releasing further releases of StealthBot, he and I are working on JinxBot.
JinxBot will use a similar design pattern to that found in ArmaBot; specifically, it will be divided into well-designed, specific modules. A single assembly will be responsible for creating and maintaining connections; all connections derive from a shared base class called ConnectionProtocol, which maintains a queue of Buffer objects waiting to be sent in prioritized order. In order to use these connection objects, an external assembly will only be required to implement a single interface and then register itself for events.
JinxBot's APIs and user interface will be set up so that it can support language packs.
Beyond the connection module, JinxBot will run primarily as a Windows Service. It will enumerate over available connection profiles defined and then enumerate over each server-side plugin defined.
Commands will be able to be applied per-plugin and will automatically load their help strings. Additionally, commands will be loaded through reflection; all commands will be called with the same function interface, and when the plugin .DLL is loaded, a hashtable will store a pointer to the function that should be called when the command is executed. Security will be checked before the command is executed.
A client is run remotely. JinxBot will implement the Remote Bot Protocol (RBP) with the BNCS, BotNet, and zlib packages as documented by Skywing. Coincidentally, JinxBot *should* be able to interoperate with BinaryChat Server (BinaryChat v4) on both the server and client sides. JinxBot extensions to the RBP will allow me to use a separate utility to create additional connection profiles on the server.
The client will manage its own plugins locally, and a special enumeration will be designed to allow developers to create plugins that extend various aspects of the user interface, from additional menu items on the context menus (such as a plugin to copy chat text to UBBC) to additional collapsed tabs.
JinxBot is currently found at
http://www.sourceforge.net/projects/jinxbot/ . It is completely open-source, and currently connects to Battle.net via BNLS on Starcraft, Brood War, Warcraft II: Battle.net Edition, and Diablo II via a console. To exit the console, type "exit" and press enter.