from objects import glob from constants import clientPackets from constants import serverPackets from helpers import userHelper from helpers import logHelper as log from constants import actions from helpers import chatHelper as chat def handle(userToken, packetData): # Get usertoken data userID = userToken.userID username = userToken.username # Make sure we are not banned if userHelper.isBanned(userID) == True: userToken.enqueue(serverPackets.loginBanned()) return # Send restricted message if needed if userToken.restricted == False: if userHelper.isRestricted(userID) == True: userToken.setRestricted() # Change action packet packetData = clientPackets.userActionChange(packetData) # Update cached stats if our pp changedm if we've just submitted a score or we've changed gameMode if (userToken.actionID == actions.playing or userToken.actionID == actions.multiplaying) or (userToken.pp != userHelper.getPP(userID, userToken.gameMode)) or (userToken.gameMode != packetData["gameMode"]): log.debug("!!!! UPDATING CACHED STATS !!!!") # Always update game mode, or we'll cache stats from the wrong game mode if we've changed it userToken.gameMode = packetData["gameMode"] userToken.updateCachedStats() # Always update action id, text and md5 userToken.actionID = packetData["actionID"] userToken.actionText = packetData["actionText"] userToken.actionMd5 = packetData["actionMd5"] userToken.actionMods = packetData["actionMods"] # Enqueue our new user panel and stats to us and our spectators recipients = [userID] if len(userToken.spectators) > 0: recipients += userToken.spectators for i in recipients: if i == userID: # Save some loops token = userToken else: token = glob.tokens.getTokenFromUserID(i) if token != None: # Force our own packet force = True if token.userID == userID else False token.enqueue(serverPackets.userPanel(userID, force)) token.enqueue(serverPackets.userStats(userID, force)) # Send osu!direct alert if needed # NOTE: Remove this when osu!direct will be fixed if userToken.actionID == actions.osuDirect and userToken.osuDirectAlert == False: userToken.osuDirectAlert = True chat.sendMessage("FokaBot", userToken.username, "Sup! osu!direct works, but you'll need to update the switcher to have the Download button working. If you didn't update the switcher yet, please do!") # Console output log.info("{} changed action: {} [{}][{}]".format(username, str(userToken.actionID), userToken.actionText, userToken.actionMd5))