public static void AdminLevelChanged(IClient client)
        {
            if (DefaultCommands)
            {
                cmds.AdminLevelChanged(client != null ? client.IUser : null);
            }

            js.AdminLevelChanged(client != null ? client.IUser : null);

            ExtensionManager.Plugins.ForEach(x =>
            {
                try { x.Plugin.AdminLevelChanged(client != null ? client.IUser : null); }
                catch { }
            });

            ChatLog.WriteLine("level: " + client.Name + " level changed to " + client.Level);
        }
        public static void EmoteSent(IClient client, String text)
        {
            Stats.PublicMessages++;

            if (DefaultCommands)
            {
                cmds.EmoteSent(client != null ? client.IUser : null, text);
            }

            js.EmoteSent(client != null ? client.IUser : null, text);

            ExtensionManager.Plugins.ForEach(x =>
            {
                try { x.Plugin.EmoteSent(client != null ? client.IUser : null, text); }
                catch { }
            });

            ChatLog.WriteLine("emote: * " + client.Name + " " + text);
        }
        public static void Parted(IClient client)
        {
            Stats.PartCount++;

            if (DefaultCommands)
            {
                cmds.Parted(client != null ? client.IUser : null);
            }

            js.Parted(client != null ? client.IUser : null);

            ExtensionManager.Plugins.ForEach(x =>
            {
                try { x.Plugin.Parted(client != null ? client.IUser : null); }
                catch { }
            });

            ChatLog.WriteLine("part: " + client.Name + " has parted");
        }
        public static void Rejected(IClient client, RejectedMsg msg)
        {
            Stats.RejectionCount++;

            if (DefaultCommands)
            {
                cmds.Rejected(client != null ? client.IUser : null, msg);
            }

            js.Rejected(client != null ? client.IUser : null, msg);

            ExtensionManager.Plugins.ForEach(x =>
            {
                try { x.Plugin.Rejected(client != null ? client.IUser : null, msg); }
                catch { }
            });

            ChatLog.WriteLine("rejected: " + client.Name + " was rejected");
        }
        public static void Flooded(IClient client)
        {
            Stats.FloodCount++;

            if (DefaultCommands)
            {
                cmds.Flooded(client != null ? client.IUser : null);
            }

            js.Flooded(client != null ? client.IUser : null);

            ExtensionManager.Plugins.ForEach(x =>
            {
                try { x.Plugin.Flooded(client != null ? client.IUser : null); }
                catch { }
            });

            ChatLog.WriteLine("flood: " + client.Name + " flooded out");
        }
        public static void Joined(IClient client)
        {
            Stats.JoinCount++;

            if (Stats.CurrentUserCount > Stats.PeakUserCount)
            {
                Stats.PeakUserCount = Stats.CurrentUserCount;
            }

            if (DefaultCommands)
            {
                cmds.Joined(client != null ? client.IUser : null);
            }

            js.Joined(client != null ? client.IUser : null);

            ExtensionManager.Plugins.ForEach(x =>
            {
                try { x.Plugin.Joined(client != null ? client.IUser : null); }
                catch { }
            });

            ChatLog.WriteLine("join: " + client.Name + " has joined");
        }