def colorPrint(text, color: str=None, style: str=None, bg_color: str=None) -> str:
    """

    Usage
    -----
    Acts like a normal print statement but with customizable features.\n
    Can be customized in many ways.

    Parameters
    ----------
    text : string
        The text you want to customize.
    color : string
        The color you want the text to be. -/- Gray, Red, Green, Yellow, Blue, Purple, Cyan, White or Rainbow.
    style : string
        The text style you want the text to be. -/- Bold, Dimmed, Italicized or Underlined.
    bg_color : string
        The background color you want behind the text to be. -/- Gray, Red, Green, Yellow, Blue, Purple, Cyan or White.

    Returns
    -------
        Returns out the finished product into the terminal.
        
    """
    import emoji

    colors = ["Gray", "Red", "Green", "Yellow", "Blue", "Purple", "Cyan", "White"]
    styles = ["Bold", "Dim", "Italicize", "Underline"]
    colorcodes = ["\033[0;30;48m", "\033[0;31;48m", "\033[0;32;48m", "\033[0;33;48m", "\033[0;34;48m", "\033[0;35;48m", "\033[0;36;48m", "\033[0;37;48m"]
    rbcolors = ["\033[0;31;48m", "\033[0;32;48m", "\033[0;33;48m", "\033[0;34;48m", "\033[0;35;48m", "\033[0;36;48m", "\033[0;37;48m"]
    endcode = "\033[0m"
    code = "\033[0;37;40m"

    def contains_emoji(text_2):
        return bool(emoji.emoji_count(text))

    if contains_emoji(text):
        try:
            raise ValueError("\033[1;31m[ERROR]:\033[0m You cannot have emojis in the text.")
        except ValueError as err:
            print(str(err))
            exit()
    else:
        if color != None:
            if color.capitalize() == "Rainbow":
                try:
                    newtxt = ""
                    rainbow_index = 0
                    txt = list(text)
                    for char in txt:
                        newtxt += rbcolors[rainbow_index] + char + endcode
                        rainbow_index += 1
                        if rainbow_index == 6:
                            rainbow_index = 0
                    return print(newtxt)
                except err as err:
                    print(str(err))
                    exit()
            else:
                try:
                    if color != None:
                        if color.capitalize() not in colors:
                            raise ValueError("\033[1;31m[ERROR]:\033[0m The color specified does not exist.")
                        else:
                            colorIndex = colors.index(color.capitalize())
                            code = colorcodes[colorIndex]

                    if style != None:
                        if style.capitalize() not in styles:
                            raise ValueError("\033[1;31m[ERROR]:\033[0m The style specified does not exist.")
                        else:
                            if style == "Bold":
                                code = code.replace("[0", "[1")
                            elif style == "Dim":
                                code = code.replace("[0", "[2")
                            elif style == "Italicize":
                                code = code.replace("[0", "[3")
                            elif style == "Underline":
                                code = code.replace("[0", "[4")

                    if bg_color != None:
                        if bg_color.capitalize() not in colors:
                            raise ValueError("\033[1;31m[ERROR]:\033[0m The background color specified does not exist.")
                        else:
                            if bg_color == "Gray":
                                code = code.replace("48m", "40m")
                            elif bg_color == "Red":
                                code = code.replace("48m", "41m")
                            elif bg_color == "Green":
                                code = code.replace("48m", "42m")
                            elif bg_color == "Yellow":
                                code = code.replace("48m", "43m")
                            elif bg_color == "Blue":
                                code = code.replace("48m", "44m")
                            elif bg_color == "Purple":
                                code = code.replace("48m", "45m")
                            elif bg_color == "Cyan":
                                code = code.replace("48m", "46m")
                            elif bg_color == "White":
                                code = code.replace("48m", "47m")
                    
                    return print(code + text + endcode)
                except ValueError as err:
                    print(str(err))
                    exit()
        else:
            try:
                if style != None:
                    if style.capitalize() not in styles:
                        raise ValueError("\033[1;31m[ERROR]:\033[0m The style specified does not exist.")
                    else:
                        if style == "Bold":
                            code = code.replace("[0", "[1")
                        elif style == "Dim":
                            code = code.replace("[0", "[2")
                        elif style == "Italicize":
                            code = code.replace("[0", "[3")
                        elif style == "Underline":
                            code = code.replace("[0", "[4")

                if bg_color != None:
                    if bg_color.capitalize() not in colors:
                        raise ValueError("\033[1;31m[ERROR]:\033[0m The background color specified does not exist.")
                    else:
                        if bg_color == "Gray":
                            code = code.replace("48m", "40m")
                        elif bg_color == "Red":
                            code = code.replace("48m", "41m")
                        elif bg_color == "Green":
                            code = code.replace("48m", "42m")
                        elif bg_color == "Yellow":
                            code = code.replace("48m", "43m")
                        elif bg_color == "Blue":
                            code = code.replace("48m", "44m")
                        elif bg_color == "Purple":
                            code = code.replace("48m", "45m")
                        elif bg_color == "Cyan":
                            code = code.replace("48m", "46m")
                        elif bg_color == "White":
                            code = code.replace("48m", "47m")
            
                return print(code + text + endcode)
            except ValueError as err:
                print(str(err))
                exit()
