def recommend(fro, chan, message): user_id = userUtils.getID(fro) user = userUtils.getUserStats(user_id, 0) params = { 'pp': user['pp'], 'token': glob.conf.config["kotrik"]["pprapi"] } mega_pp_recommendation = requests.get("https://api.kotrik.ru/api/recommendMap", params=params) result = None try: result = json.loads(mega_pp_recommendation.text) except: return "I can't recommend you, because api is broken(" mods = generalUtils.readableMods(result['m']) if mods == "": mods = "nomod" formatResult = "[http://osu.ppy.sh/b/{bid} {art} - {name} [{diff}]] Stars: {stars} | BPM: {bpm} | Length: {length} | PP: {pps} {mods}".format( bid=result['b'], art=result['art'], name=result['t'], diff=result['v'], stars=result['d'], bpm=result['bpm'], length=kotrikhelper.secondsToFormatted(result['l']), pps=result['pp99'], mods=f"+{mods}" ) return formatResult
def updateCachedStats(self): """ Update all cached stats for this token :return: """ stats = userUtils.getUserStats(self.userID, self.gameMode) stats_relax = userUtils.getUserStatsRx(self.userID, self.gameMode) log.debug(str(stats)) if stats is None: log.warning("Stats query returned None") return if self.relaxing: self.gameRank = stats_relax["gameRank"] self.pp = stats_relax["pp"] self.rankedScore = stats_relax["rankedScore"] self.accuracy = stats_relax["accuracy"] / 100 self.playcount = stats_relax["playcount"] self.totalScore = stats_relax["totalScore"] else: self.gameRank = stats["gameRank"] self.pp = stats["pp"] self.rankedScore = stats["rankedScore"] self.accuracy = stats["accuracy"] / 100 self.playcount = stats["playcount"] self.totalScore = stats["totalScore"]
def user_stats(fro, chan, message): args = [m.lower() for m in message] nickname = None mode = 0 if len(args) < 1: nickname = fro else: nickname = args[0].lower() if len(args) > 1 and args[1].isdigit(): mode = int(args[1]) if mode > 3: return "mode is incorrect" user_id = userUtils.getID(nickname) if not user_id: return "User not found!" mode_str = gameModes.getGameModeForDB(mode) user = userUtils.getUserStats(user_id, mode) acc = "{0:.2f}%".format(user['accuracy']) return ( f"User: {nickname}\n" f"ID: {user_id}\n" "---------------------\n" f"Stats for {mode_str} #{user['gameRank']}\n" f"Ranked score: {humanize(user['rankedScore'])}\n" f"Accuracy: {acc}\n" f"Play count: {humanize(user['playcount'])}\n" f"Total score: {humanize(user['totalScore'])}\n" f"PP count: {humanize(user['pp'])}" )
def updateCachedStats(self): """ Update all cached stats for this token :return: """ if self.relaxing: stats_relax = userUtils.getUserStatsRx(self.userID, self.gameMode) self.gameRank = stats_relax["gameRank"] self.pp = stats_relax["pp"] self.rankedScore = stats_relax["rankedScore"] self.accuracy = stats_relax["accuracy"]/100 self.playcount = stats_relax["playcount"] self.totalScore = stats_relax["totalScore"] elif self.autopiloting: stats_ap = userUtils.getUserStatsAP(self.userID, self.gameMode) self.gameRank = stats_ap["gameRank"] self.pp = stats_ap["pp"] self.rankedScore = stats_ap["rankedScore"] self.accuracy = stats_ap["accuracy"]/100 self.playcount = stats_ap["playcount"] self.totalScore = stats_ap["totalScore"] else: stats = userUtils.getUserStats(self.userID, self.gameMode) self.gameRank = stats["gameRank"] self.pp = stats["pp"] self.rankedScore = stats["rankedScore"] self.accuracy = stats["accuracy"]/100 self.playcount = stats["playcount"] self.totalScore = stats["totalScore"]
def updateCachedStats(self): """ Update all cached stats for this token :return: """ stats = [ userUtils.getUserStats(self.userID, self.gameMode), userUtils.getUserStatsRelax(self.userID, self.gameMode) ] if features.RANKING_SCOREV2: stats.append(userUtils.getUserStatsAlt(self.userID, self.gameMode)) if stats is None: log.warning("Stats query returned None") return if self.specialMode in range(len(stats)): stats = stats[self.specialMode] else: stats = stats[0] self.gameRank = stats["gameRank"] self.pp = stats["pp"] self.rankedScore = stats["rankedScore"] self.accuracy = stats["accuracy"] / 100.0 self.playcount = stats["playcount"] self.totalScore = stats["totalScore"]
def update(self, userID, gameMode, data=None): """ Update cached user stats in redis with new values :param userID: userID :param gameMode: game mode number :param data: data to cache. Optional. If not passed, will get from db :return: """ if data is None: data = {} if len(data) == 0: data = userUtils.getUserStats(userID, gameMode) log.debug("userStatsCache set {}".format(data)) glob.redis.set("lets:user_stats_cache:{}:{}".format(gameMode, userID), json.dumps(data), 1800)
def updateCachedStats(self): """ Update all cached stats for this token :return: """ stats = userUtils.getUserStats(self.userID, self.gameMode) stats_relax = userUtils.getUserStatsRx(self.userID, self.gameMode) stats_relax2 = userUtils.getUserStatsRx2(self.userID, self.gameMode) log.debug(str(stats)) if self.userID == 1001: self.irc = False self.country = 111 self.actionID = actions.WATCHING self.actionText = "the chat" if stats is None: log.warning("Stats query returned None") return if self.relaxing: self.gameRank = stats_relax["gameRank"] self.pp = stats_relax["pp"] self.rankedScore = stats_relax["rankedScore"] self.accuracy = stats_relax["accuracy"] / 100 self.playcount = stats_relax["playcount"] self.totalScore = stats_relax["totalScore"] elif self.relaxing2: self.gameRank = stats_relax2["gameRank"] self.pp = stats_relax2["pp"] self.rankedScore = stats_relax2["rankedScore"] self.accuracy = stats_relax2["accuracy"] / 100 self.playcount = stats_relax2["playcount"] self.totalScore = stats_relax2["totalScore"] else: self.gameRank = stats["gameRank"] self.pp = stats["pp"] self.rankedScore = stats["rankedScore"] self.accuracy = stats["accuracy"] / 100 self.playcount = stats["playcount"] self.totalScore = stats["totalScore"]