Okay so this is a nasty one. If somebody has configured SteamTarget to notify about e.g. ASF crash, our LogManager.Flush() will NOT wait for that message to be sent before returning, as the Write() operation will return the moment it hits any async operation, at the very latest, the operation to write to a socket.
Our expectation is that we want to send that message (emptying our logging queue) before actually shutting down the process, and for that we need that Write() operation to block until the request is actually sent.
This is a quick fix for that while a pending rewrite for AsyncTaskTarget is in order - https://github.com/NLog/NLog/wiki/How-to-write-a-custom-async-target
This is needed as custom NLog.config no longer gets loaded in single-file scenario, where NLog probes the directory of the unpacked files instead.
For non-single-publishes this doesn't change anything, as home directory is equal to base directory if not using custom path.
* Implement basic plugin system
* The dawn of new era
* Add plugins warning
* Move more members to PublicAPI
* Open commands for the plugins
* Add IBotHackNewChat
* Run plugin events in parallel
* Use properties in IPlugin
* Hook our custom plugin into CI to ensure it compiles
* Fix dotnet brain damage
* Add IBotsComparer
* Add code documentation
* Add IBotTradeOffer
* Add IBotTradeOffer example
* Add IBotTradeOfferResults
* Final bulletproofing
* Final renaming