#!/usr/bin/python3 import random import buntcheck def format_string(text: str, prefix: str = "§", suffix: str = "", auto_rs: bool = True): # formats the text e.g. text after "§red" is colored red color_ansi = buntcheck.color_ansi for color in color_ansi: text = text.replace(prefix + color + suffix, color_ansi[color]) if auto_rs: text += color_ansi["reset"] return text msg_types_ncl = { "info": "[info]: ", "ok": format_string("[OK]: "), "warning": format_string("[WARNING]: "), "error": format_string("[ERROR]: ") } msg_types = { "info": "[info]: ", "ok": format_string("[§green§boldOK§rs]: "), "warning": format_string("§yellow§bold[WARNING]: ", auto_rs=False), "error": format_string("§red§bold[ERROR]: ", auto_rs=False) } def rainbow(text): # makes the string rainbow-colored color_codes = buntcheck.get_text_colors() text_out = "" for character in text: text_out += random.choice(color_codes) + character return text_out def example(): # just an example of this script print('This:' '\ntext = "§boldThis§rs §underlineis§rs §italican "' '\ntext += rainbow("Example!")' '\nprint(color_name_to_ansi(text))' '\n\nmakes this:') text = "§boldThis§rs §underlineis§rs §italican " text += rainbow("Example!") print(format_string(text)) class Log: def __init__(self, log_path: str=None, no_console: bool=False, no_colors: bool=False): self.log_path = log_path self.no_console = no_console self.no_colors = no_colors self.log = "" def write(self, msg: str, msg_type: str = "info", prefix: str = ""): if self.no_colors: msg = prefix + msg_types_ncl[msg_type] + msg else: msg = prefix + msg_types[msg_type] + msg msg += format_string("§rs") if not self.no_console: print(msg) if self.log_path is not None: log_file = open(self.log_path, "a") log_file.write(msg + "\n") log_file.close() self.log += msg + "\n" def read(self): if self.log_path is not None: log_file = open(self.log_path, "r") log_content = log_file.read() log_file.close() return log_content else: return self.log if __name__ == "__main__": example()