public static ChannelUserModeType HighestMode(Mode mode)
        {
            ChannelUserModeType flags = ModeFlags(mode);

            if ((flags & ChannelUserModeType.Owner) != 0)
            {
                return(ChannelUserModeType.Owner);
            }
            else if ((flags & ChannelUserModeType.Protected) != 0)
            {
                return(ChannelUserModeType.Protected);
            }
            else if ((flags & ChannelUserModeType.Op) != 0)
            {
                return(ChannelUserModeType.Op);
            }
            else if ((flags & ChannelUserModeType.HalfOp) != 0)
            {
                return(ChannelUserModeType.HalfOp);
            }
            else if ((flags & ChannelUserModeType.Voice) != 0)
            {
                return(ChannelUserModeType.Voice);
            }
            return(ChannelUserModeType.None);
        }
        public static ChannelUserModeType ModeFlags(Mode modes)
        {
            ChannelUserModeType flags = ChannelUserModeType.None;

            foreach (char mode in modes.Modes)
            {
                flags |= ModeType(mode);
            }

            return(flags);
        }