This mixes in functions that fully implement an
IRCPlugin. They don't do much by themselves
other than call the module's functions, as well as implement things like
functions that return the plugin's name, its list of bot command words, etc.
It does this by introspecting the module and implementing itself as it sees fit.
This includes the functions that call the top-level event handler functions
on incoming events.
Seen from any other module, this module is a big block of private things
they can't see, plus this visible plugin class. By having this class
pass on things to the private functions we limit the surface area of
the plugin to be really small.
This mixes in functions that fully implement an IRCPlugin. They don't do much by themselves other than call the module's functions, as well as implement things like functions that return the plugin's name, its list of bot command words, etc. It does this by introspecting the module and implementing itself as it sees fit.
This includes the functions that call the top-level event handler functions on incoming events.
Seen from any other module, this module is a big block of private things they can't see, plus this visible plugin class. By having this class pass on things to the private functions we limit the surface area of the plugin to be really small.