Sending messages between bots should't be that hard. Right now I'm simply making a class library, the bot base / plugin can use a class called "Fellowship" to receive and send messages. It's looking something like this:
var fellowship = new Fellowship();
After that, the object will internally start some threaded tasks that search for the "leader" bot using C# sockets and links themselves to him, being assigned an ID and all. Messages right now consist of a sender endpoint, string arguments, and an enumeration "MessageType". The "fellowship" object then offers the following:
fellowship.Leader : Returns the name of the leader.
fellowship.PartyMembers : Returns a list with the name of all linked members.
fellowship.Send( message ) : Sends a message to the leader.
fellowship.Broadcast( message ) : Used by the leader bot to broadcast messages to all linked members.
fellowship.HasMessage() : A boolean that is set to true whenever this fellowship object has received a message for you.
fellowship.NextMessage() : Returns the next message in the queue of received messages.
The Fellowship class takes care of all the threading and synchronization locks so you don't have to worry about it. I'm thinking of making the Fellowship a service in a plugin with a static singleton instance (there shouldn't be more than one Fellowship object per bot process anyways) so that other plugins or routines can use the NextMessage() method to do whatever they do with the message received, or use the Broadcast() method to send stuff if they're the leader.
All the stuff about making a dungeon bot can come later, right now I'm just working on the communication service.
