/// <summary>
        /// Disconnects with specified reason.
        /// </summary>
        /// <param name="reason">The reason.</param>
        internal void Disconnect(string reason = "")
        {
            foreach (Channel c in Channels)
            {
                ChannelBuffer.Push(new ChannelData( )
                {
                    Channel = c.Name, Key = c.GetKey( )
                });
            }

            settings.Save(this);

            if (!string.IsNullOrEmpty(reason))
            {
                Raw(IrcCommands.Quit(reason));
            }
            else
            {
                Raw(IrcCommands.Quit(Global.DefaultQuit));
            }
        }