It seems that there's a situation where many modules can rely on many modules (and do), but you never really know what requires what.
In my (feeble) mind there are a few options.
1) Hard code it so we load them in the order in which we need.
2) Somehow make loading functions dynamic so that when we load the module, and that function doesn't exist, we don't get an error (not sure if this is possible).
3) Specify what the modules require in each module that has dependancies, and then dynamically load them in order that we need. (Possible to get loops of dependancies this way...)
4) Change it so that we load essentially all modules at once (well, once for core once for modules, once for custom, etc), maybe via include, or something similar, or perhaps one is built on runtime...hmm...then you could easily enable/disable modules via settings inside the bot rather than having to manually enable/disable them. You could even have it actually start using the module dynamically rather than requiring a reboot (I would see 3 options, On, Off, and Disabled. On means just that, Off means it's loaded but not actually used, Disabled means we completely ignore it and in order to enable it you have to turn it to on/off then restart the bot).
Dunno if any of these are useful at all or not. Just throwing out suggestions.
