Fix <<loop>> caused by accidental name shadowing
Detect presence from ghost using custom element
Instead of trying to "remember" who is a ghost based on fragile things like
which nick we asked for, which is subject to race conditions in the case of
rewriting, etc, just send an extra presence payload for a ghost that only we
generate and detect it on inbound.
This will only work if the MUC remembers the actual presence stanza it got and
sends that for all future presences from a member, which the spec doesn't seem
to specifically require, but implementations do (and need to, for things like
avatars to work).
Don't leave if just renaming
Only ping current-version nicks
Remove any possible dupes when recording a rename
Loosen version restriction on base
Handle incoming stanzas one-by-one
We are sharing the sqlite connection everywhere and may be seeing race
conditions. At least until we can rule that out, let's be safe and only process
stazas one-by-one instead of in infinite threads.
Keep knowledge of a ghost as long as possible
INSERT the ghost before we actually join them to the room. Only DELETE them
after we get the self-presence about them leaving.
Do not INSERT and join when we get presence errors or presence unavaiable!
If a ghost has leaked through, remove it
Small tweaks to the README improvements
Better example pattern, the one for IRC
Allow specifying nickLength for a MUC
Improve README, update example config, and include SQL schema