Split status elements out of UserInfo and made user update event based.
Issue user disconnected and kick/ban as events and restructure table.
Fixed excessive sending of user update packets.
Made the channel event log code similar to the normal event handling code.
Events system overhaul.
Removed event flags attribute.
Use interface instead of abstract classes as base for Sock Chat S2C packets.
Removed AddEvent aliases.
Split connection classes.
Turns out neither of those two repos were public!
Split various components into sublibraries to avoid things depending on things they should not depend on.
Apply S2C and C2S naming scheme for easy packet direction identification.
Packet packing micro optimisation.
Connection handling rewrite.
Use server start timestamp for welcome MOTD message and MOTD file last write for the other one.
Added base class for packets with timestamp.
Removed IServerPacket interface.
Extracted all log packets into their own ones.
Rewrote user and channel collections.
Cleaned up the names of some of the base classes.
Some cleanups (snapshot, don't run this).
Use HasFlag instead of custom Can method.
Display Sock Chat protocol errors are dialog boxes.
Added option to automatically play media upon embed.
Fixed scrolling behaviour with auto embed.
Moved some things out of the MessagePopulatePacket class.
Drew the rest of the fucking owl.
Fixed weird behaviour caused by development polyfill.
Created more discrete error/response packets.