If a IRC-User joins a channel, this happens:
if a plugin would react on .joined(channel), it cannot use the userlist, because the userlist is only filled after ENDOFWHO. even worse, events like userQuit, userLeft, etc. cannot update the userlist until ENDOFWHO. so after ENDOFWHO the userlist may be even too long without synchronisation.
every function which may depend on the userlist is decorated by otfbot.services.ircClient.synced… decorator.
the decorators do the following:
irc_ENDOFWHO looks into the event-queues, and executed the delayed callbacks in first-in-first-out order. so now the order may look like this: