DesertBus/txircd — pull request #160 by ElementalAlchemist (2013-07-11 19:24:13+00:00)
Title: Server-to-server protocol

There are a few changes that go beyond the scope of s2s along with some bug fixes, but for the most part, most things relate to s2s in some way.

The major changes:
- **Addition of a server-to-server protocol.** Obviously.
- **Removal of various user/channel lists.** These lists were found to be unnecessary or not useful enough to be worth the added overhead of making sure they're synced and everything.
- **Removal of `IRCD.localusers`.** It turned out this list was fully unnecessary, as all the uses of it were either checking whether a user was on the local server (more efficient to check `user.server == self.ircd.name`) or for LUSERS (which counts various things and iterates through `IRCD.users` anyway).
- **Removal of `IRCUser.channels`.** This list did get used, but would've been a huge pain to synchronize across servers (or at least to ensure its accuracy). Most uses of this list checked whether the user was in a channel, accomplished just as easily by checking whether the user object is in the appropriate `IRCChannel.users` set.
- **Status data is now saved in the `IRCChannel` object.** `IRCChannel.users` is now a dict of `IRCUser` objects => statuses, rather than storing the statuses in the `IRCUser.channels` dict.
- **Moving various code that should've been in the core to the core.** This includes code that sets modes, which is now in the core as `IRCChannel.setMode` and `IRCUser.setMode`.
- **db_services_leaf** This wasn't really needed before because there could only be one server, but due to db_services's use of fake users, it could really only be used on one server (unless you want a different services nick on each server, which would be dumb). db_services_leaf was added to be loaded on all servers db_services isn't, and it provides command aliases and implements command blocking.
- **Various bug fixes.** I fixed some bugs.
- **Version bump.** This is version 0.2.0. (Up from 0.1.0.)

This should not be regarded as a complete changelog because I haven't been keeping that much track of changes.

Also: I plan to continue running the public unofficial test server until we get an official one. As I'd previously thought with the current master branch, this should be good code; I don't know of issues with it. There may be something hiding, though, so it can always use more testing.