132 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from common.log import logUtils as log
 | 
						|
from common.ripple import scoreUtils
 | 
						|
from objects import glob
 | 
						|
from common.ripple import userUtils
 | 
						|
 | 
						|
def rxgetRankInfo(userID, gameMode):
 | 
						|
	"""
 | 
						|
	Get userID's current rank, user above us and pp/score difference
 | 
						|
 | 
						|
	:param userID: user
 | 
						|
	:param gameMode: gameMode number
 | 
						|
	:return: {"nextUsername": "", "difference": 0, "currentRank": 0}
 | 
						|
	"""
 | 
						|
	data = {"nextUsername": "", "difference": 0, "currentRank": 0}
 | 
						|
	k = "ripple:relaxboard:{}".format(scoreUtils.readableGameMode(gameMode))
 | 
						|
	position = userUtils.rxgetGameRank(userID, gameMode) - 1
 | 
						|
	log.debug("Our position is {}".format(position))
 | 
						|
	if position is not None and position > 0:
 | 
						|
		aboveUs = glob.redis.zrevrange(k, position - 1, position)
 | 
						|
		log.debug("{} is above us".format(aboveUs))
 | 
						|
		if aboveUs is not None and len(aboveUs) > 0 and aboveUs[0].isdigit():
 | 
						|
			# Get our rank, next rank username and pp/score difference
 | 
						|
			myScore = glob.redis.zscore(k, userID)
 | 
						|
			otherScore = glob.redis.zscore(k, aboveUs[0])
 | 
						|
			nextUsername = userUtils.getUsername(aboveUs[0])
 | 
						|
			if nextUsername is not None and myScore is not None and otherScore is not None:
 | 
						|
				data["nextUsername"] = nextUsername
 | 
						|
				data["difference"] = int(myScore) - int(otherScore)
 | 
						|
	else:
 | 
						|
		position = 0
 | 
						|
 | 
						|
	data["currentRank"] = position + 1
 | 
						|
	return data
 | 
						|
 | 
						|
def getRankInfo(userID, gameMode):
 | 
						|
	"""
 | 
						|
	Get userID's current rank, user above us and pp/score difference
 | 
						|
 | 
						|
	:param userID: user
 | 
						|
	:param gameMode: gameMode number
 | 
						|
	:return: {"nextUsername": "", "difference": 0, "currentRank": 0}
 | 
						|
	"""
 | 
						|
	data = {"nextUsername": "", "difference": 0, "currentRank": 0}
 | 
						|
	k = "ripple:leaderboard:{}".format(scoreUtils.readableGameMode(gameMode))
 | 
						|
	position = userUtils.getGameRank(userID, gameMode) - 1
 | 
						|
	log.debug("Our position is {}".format(position))
 | 
						|
	if position is not None and position > 0:
 | 
						|
		aboveUs = glob.redis.zrevrange(k, position - 1, position)
 | 
						|
		log.debug("{} is above us".format(aboveUs))
 | 
						|
		if aboveUs is not None and len(aboveUs) > 0 and aboveUs[0].isdigit():
 | 
						|
			# Get our rank, next rank username and pp/score difference
 | 
						|
			myScore = glob.redis.zscore(k, userID)
 | 
						|
			otherScore = glob.redis.zscore(k, aboveUs[0])
 | 
						|
			nextUsername = userUtils.getUsername(aboveUs[0])
 | 
						|
			if nextUsername is not None and myScore is not None and otherScore is not None:
 | 
						|
				data["nextUsername"] = nextUsername
 | 
						|
				data["difference"] = int(myScore) - int(otherScore)
 | 
						|
	else:
 | 
						|
		position = 0
 | 
						|
 | 
						|
	data["currentRank"] = position + 1
 | 
						|
	return data
 | 
						|
 | 
						|
def rxupdate(userID, newScore, gameMode):
 | 
						|
	"""
 | 
						|
	Update gamemode's leaderboard.
 | 
						|
	Doesn't do anything if userID is banned/restricted.
 | 
						|
 | 
						|
	:param userID: user
 | 
						|
	:param newScore: new score or pp
 | 
						|
	:param gameMode: gameMode number
 | 
						|
	"""
 | 
						|
	if userUtils.isAllowed(userID):
 | 
						|
		log.debug("Updating relaxboard...")
 | 
						|
		glob.redis.zadd("ripple:relaxboard:{}".format(scoreUtils.readableGameMode(gameMode)), str(userID), str(newScore))
 | 
						|
	else:
 | 
						|
		log.debug("Relaxboard update for user {} skipped (not allowed)".format(userID))
 | 
						|
	
 | 
						|
def update(userID, newScore, gameMode):
 | 
						|
	"""
 | 
						|
	Update gamemode's leaderboard.
 | 
						|
	Doesn't do anything if userID is banned/restricted.
 | 
						|
 | 
						|
	:param userID: user
 | 
						|
	:param newScore: new score or pp
 | 
						|
	:param gameMode: gameMode number
 | 
						|
	"""
 | 
						|
	if userUtils.isAllowed(userID):
 | 
						|
		log.debug("Updating leaderboard...")
 | 
						|
		glob.redis.zadd("ripple:leaderboard:{}".format(scoreUtils.readableGameMode(gameMode)), str(userID), str(newScore))
 | 
						|
	else:
 | 
						|
		log.debug("Leaderboard update for user {} skipped (not allowed)".format(userID))
 | 
						|
 | 
						|
def rxupdateCountry(userID, newScore, gameMode):
 | 
						|
	"""
 | 
						|
	Update gamemode's country leaderboard.
 | 
						|
	Doesn't do anything if userID is banned/restricted.
 | 
						|
 | 
						|
	:param userID: user, country is determined by the user
 | 
						|
	:param newScore: new score or pp
 | 
						|
	:param gameMode: gameMode number
 | 
						|
	:return:
 | 
						|
	"""
 | 
						|
	if userUtils.isAllowed(userID):
 | 
						|
		country = userUtils.getCountry(userID)
 | 
						|
		if country is not None and len(country) > 0 and country.lower() != "xx":
 | 
						|
			log.debug("Updating {} country relaxboard...".format(country))
 | 
						|
			k = "ripple:relaxboard:{}:{}".format(scoreUtils.readableGameMode(gameMode), country.lower())
 | 
						|
			glob.redis.zadd(k, str(userID), str(newScore))
 | 
						|
	else:
 | 
						|
		log.debug("Country relaxboard update for user {} skipped (not allowed)".format(userID))
 | 
						|
 | 
						|
		
 | 
						|
def updateCountry(userID, newScore, gameMode):
 | 
						|
	"""
 | 
						|
	Update gamemode's country leaderboard.
 | 
						|
	Doesn't do anything if userID is banned/restricted.
 | 
						|
 | 
						|
	:param userID: user, country is determined by the user
 | 
						|
	:param newScore: new score or pp
 | 
						|
	:param gameMode: gameMode number
 | 
						|
	:return:
 | 
						|
	"""
 | 
						|
	if userUtils.isAllowed(userID):
 | 
						|
		country = userUtils.getCountry(userID)
 | 
						|
		if country is not None and len(country) > 0 and country.lower() != "xx":
 | 
						|
			log.debug("Updating {} country leaderboard...".format(country))
 | 
						|
			k = "ripple:leaderboard:{}:{}".format(scoreUtils.readableGameMode(gameMode), country.lower())
 | 
						|
			glob.redis.zadd(k, str(userID), str(newScore))
 | 
						|
	else:
 | 
						|
		log.debug("Country leaderboard update for user {} skipped (not allowed)".format(userID))
 |