"""Some functions that don't fit in any other file""" from constants import mods from time import gmtime, strftime def stringToBool(s): """ Convert a string (True/true/1) to bool s -- string/int value return -- True/False """ return (s == "True" or s== "true" or s == "1" or s == 1) def hexString(s): """ Output s' bytes in HEX s -- string return -- string with hex value """ return ":".join("{:02x}".format(ord(c)) for c in s) def readableMods(__mods): """ Return a string with readable std mods. Used to convert a mods number for oppai __mods -- mods bitwise number return -- readable mods string, eg HDDT """ r = "" if __mods == 0: return r if __mods & mods.NoFail > 0: r += "NF" if __mods & mods.Easy > 0: r += "EZ" if __mods & mods.Hidden > 0: r += "HD" if __mods & mods.HardRock > 0: r += "HR" if __mods & mods.DoubleTime > 0: r += "DT" if __mods & mods.HalfTime > 0: r += "HT" if __mods & mods.Flashlight > 0: r += "FL" if __mods & mods.SpunOut > 0: r += "SO" return r def getRank(gameMode, __mods, acc, c300, c100, c50, cmiss): """ Return a string with rank/grade for a given score. Used mainly for "tillerino" gameMode -- mode (0 = osu!, 1 = Taiko, 2 = CtB, 3 = osu!mania) __mods -- mods bitwise number acc -- accuracy c300 -- 300 hit count c100 -- 100 hit count c50 -- 50 hit count cmiss -- miss count return -- rank/grade string """ total = c300 + c100 + c50 + cmiss hdfl = (__mods & mods.Hidden > 0) or (__mods & mods.Flashlight > 0) ss = "sshd" if hdfl else "ss" s = "shd" if hdfl else "s" if gameMode == 0 or gameMode == 1: # osu!std / taiko ratio300 = c300 / total ratio50 = c50 / total if acc == 100: return ss if ratio300 > 0.90 and ratio50 < 0.1 and cmiss == 0: return s if (ratio300 > 0.80 and cmiss == 0) or (ratio300 > 0.90): return "a" if (ratio300 > 0.70 and cmiss == 0) or (ratio300 > 0.80): return "b" if ratio300 > 0.60: return "c" return "d" elif gameMode == 2: # CtB if acc == 100: return ss if acc > 98: return s if acc > 94: return "a" if acc > 90: return "b" if acc > 85: return "c" return "d" elif gameMode == 3: # osu!mania if acc == 100: return ss if acc > 95: return s if acc > 90: return "a" if acc > 80: return "b" if acc > 70: return "c" return "d" return "a" def strContains(s, w): return (' ' + w + ' ') in (' ' + s + ' ') def getTimestamp(): """ Return current time in YYYY-MM-DD HH:MM:SS format. Used in logs. """ return strftime("%Y-%m-%d %H:%M:%S", gmtime())