add_global_regex_handler and remove_global_regex_handler are new methods
that work the same as irclib's non-regex versions, but check patterns
before adding/removing. this allows for a more direct link between event
loop and module methods
i'm hoping that one day it will allow for the removal of ancient
shortcuts that just get in the way now, like do() and
on_pub_or_privmsg()
lightly tested, if anything is still brittle it's recursion, no doubt
another "this is unnecessary" change, obviously impacting all the
modules that override __init__ as well as the base class. again, they
can use the DrBotIRC instance for anything, which is (with one
exception) only for add/remove_global_handler, which i'm planning on
working my way off of anyway
obviously this means all of the modules changed to accomodate. this is
one of many steps to reduce the number of times we pass connections and
servers and other such info around, when it's mostly unnecessary because
modules have a reference to DrBotIRC
we still override the nickhost guess with what comes out of the ircd's
welcome message, if it is a full nick!user@host (although now i'm
doubting if we should expect such a thing or if it was just unrealircd
being nice), but this produces more accurate guesses for the cases where
we don't do that override. this was affecting splitting
for simplicity's sake, this was added to the extlib/irclib rather
than subclassing. because i'm lazy. anyway, check that flag instead
of doing the event._target = None hack, since that hack was breaking
Markov.
for an unrelated reason (what to learn and not learn), update Markov
also remove an unused method that was getting in my way while coding this
before, !alias commands were handled via an on_pubmsg() in DrBotIRC,
which meant they happened (due to refactoring) after alias and
recursion scanning happened in a more low-level routine.
thus, if you were trying to add an alias that had recursion in it,
your alias would be the outcome of that recursion, not the command
to recurse. oops
more of a moving of the code, actually, it now exists in (an overridden)
_handle_event, so that recursions happen against irc events directly,
rather than an already partially interpreted object.
with this change, modules don't need to implement do() nor do we have a
need for the internal_bus, which was doing an additional walk of the
modules after the irc event was already handled and turned into text. now
the core event handler does the recursion scans.
to support this, we bring back the old replypath trick and use it again,
so we know when to send a privmsg reply and when to return text so that
it may be chained in recursion. this feels old hat by now, but if you
haven't been following along, you should really look at the diff.
that's the meat of the change. the rest is updating modules to use
self.reply() and reimplementing (un)register_handlers where appropriate
store module.do instead of module, making this an awful lot like
an internal command bus. steal a trick from irclib and sort based
on priority, while we're at it. we added priority a while ago, and
this means that low prio (high value) items are called later, meaning
we can do things like
!join #botname
and have the IrcAdmin handler handle it before MegaHAL gets to it
we do this deep in the server in order to have the split functionality
use it properly. i still don't know if it handles server privacy
masks properly (which would only be noticed if that cloak is sent
when you connect).
actually, on that note, this only works if the ircd sends the
nickmask in 001. but hey, it works on one server at least
with alias calling do() internally, there is no need for all this
replypath nonsense, and if there's ever a module that needs to reply
to stuff on its own outside of do(), it'd have to be implementing
all of this anyway, so it was pretty irrelevant.
this makes DrBotIRC alias/recursion stuff a bit cleaner.