From fe283ff293bf0fcee3bab7d13033f2adfe7311aa Mon Sep 17 00:00:00 2001 From: Nyo Date: Mon, 31 Oct 2016 10:47:28 +0100 Subject: [PATCH] .BANCHO. .FIX. Fix np bug --- common | 2 +- constants/fokabotCommands.py | 45 +++++++++++++++++++++++++++++++++++- constants/packetIDs.py | 4 +++- constants/serverPackets.py | 5 +++- events/changeActionEvent.py | 3 ++- objects/fokabot.py | 29 +++++++++++++++++++++-- objects/osuToken.py | 7 ++++++ objects/streamList.py | 4 ++-- pep.py | 6 +++++ 9 files changed, 96 insertions(+), 9 deletions(-) diff --git a/common b/common index 97ed79d..d687366 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 97ed79d4a1a721bec3ebfe05f11ffde589f97bd2 +Subproject commit d68736652cd42f136b525c6f83a47c91bf230159 diff --git a/constants/fokabotCommands.py b/constants/fokabotCommands.py index 75d8df5..6a44e9e 100644 --- a/constants/fokabotCommands.py +++ b/constants/fokabotCommands.py @@ -4,6 +4,7 @@ import random import requests from common import generalUtils +from common.constants import actions from common.constants import mods from common.log import logUtils as log from common.ripple import userUtils @@ -664,7 +665,7 @@ def pp(fro, chan, message): pp = userUtils.getPP(token.userID, gameMode) return "You have {:,} pp".format(pp) -def updateBeatmap(fro, chan, to): +def updateBeatmap(fro, chan, message): try: # Run the command in PM only if chan.startswith("#"): @@ -699,6 +700,42 @@ def updateBeatmap(fro, chan, to): except: return False +def trick(fro, chan, message): + if chan.startswith("#"): + return False + token = glob.tokens.getTokenFromUsername(fro) + if token is None or token.zingheri != 0: + return False + token.zingheri = 1 + return "As you want..." + +def treat(fro, chan, message): + if chan.startswith("#"): + return False + token = glob.tokens.getTokenFromUsername(fro) + if token is None or token.zingheri != 0: + return False + if token.actionID != actions.IDLE and token.actionID != actions.AFK: + log.warning(str(token.actionID)) + return "You must be in the main menu to give me a treat :3" + token.zingheri = -2 + token.leaveStream("zingheri") + usePP = token.gameMode == gameModes.STD or token.gameMode == gameModes.MANIA + if usePP: + currentPP = userUtils.getPP(token.userID, token.gameMode) + gift = currentPP/3 + userUtils.setPP(token.userID, token.gameMode, currentPP - gift) + userUtils.setPP(999, token.gameMode, userUtils.getPP(999, token.gameMode) + gift) + else: + currentScore = userUtils.getRankedScore(token.userID, token.gameMode) + gift = currentScore/3 + userUtils.setRankedScore(token.userID, token.gameMode, currentScore - gift) + userUtils.setRankedScore(999, token.gameMode, userUtils.getRankedScore(999, token.gameMode) + gift) + token.updateCachedStats() + token.enqueue(serverPackets.userStats(token.userID)) + token.enqueue(serverPackets.userStats(999, True)) + return "You just gave me {num:.2f} {type} as a treat, thanks! ^.^".format(num=gift, type="pp" if usePP else "score") + """ Commands list @@ -838,6 +875,12 @@ commands = [ }, { "trigger": "!update", "callback": updateBeatmap + }, { + "trigger": "trick", + "callback": trick + }, { + "trigger": "treat", + "callback": treat } # # "trigger": "!acc", diff --git a/constants/packetIDs.py b/constants/packetIDs.py index dfec010..9d2a519 100644 --- a/constants/packetIDs.py +++ b/constants/packetIDs.py @@ -79,4 +79,6 @@ server_userPresenceBundle = 96 client_userPanelRequest = 97 client_tournamentMatchInfoRequest = 93 client_tournamentJoinMatchChannel = 108 -client_tournamentLeaveMatchChannel = 109 \ No newline at end of file +client_tournamentLeaveMatchChannel = 109 + +server_zingheri = 105 \ No newline at end of file diff --git a/constants/serverPackets.py b/constants/serverPackets.py index 16ae3dc..ded052d 100644 --- a/constants/serverPackets.py +++ b/constants/serverPackets.py @@ -267,4 +267,7 @@ def notification(message): return packetHelper.buildPacket(packetIDs.server_notification, [[message, dataTypes.STRING]]) def banchoRestart(msUntilReconnection): - return packetHelper.buildPacket(packetIDs.server_restart, [[msUntilReconnection, dataTypes.UINT32]]) \ No newline at end of file + return packetHelper.buildPacket(packetIDs.server_restart, [[msUntilReconnection, dataTypes.UINT32]]) + +def zingheri(message): + return packetHelper.buildPacket(packetIDs.server_zingheri, [[message, dataTypes.STRING]]) \ No newline at end of file diff --git a/events/changeActionEvent.py b/events/changeActionEvent.py index 15b5f4d..ebeee68 100644 --- a/events/changeActionEvent.py +++ b/events/changeActionEvent.py @@ -4,7 +4,7 @@ from common.ripple import userUtils from constants import clientPackets from constants import serverPackets from objects import glob - +import time def handle(userToken, packetData): # Get usertoken data @@ -46,6 +46,7 @@ if userToken.matchID != -1 and userToken.actionID != actions.MULTIPLAYING and us userToken.actionMd5 = packetData["actionMd5"] userToken.actionMods = packetData["actionMods"] userToken.beatmapID = packetData["beatmapID"] + userToken.actionLatestUpdate = int(time.time()) # Enqueue our new user panel and stats to us and our spectators recipients = [userToken] diff --git a/objects/fokabot.py b/objects/fokabot.py index c8497fb..19530c0 100644 --- a/objects/fokabot.py +++ b/objects/fokabot.py @@ -1,12 +1,18 @@ """FokaBot related functions""" import re +import time + from common import generalUtils from common.constants import actions from common.ripple import userUtils from constants import fokabotCommands -from constants import serverPackets from objects import glob +from common.log import logUtils as log + +import threading +from helpers import chatHelper as chat +from constants import serverPackets # Tillerino np regex, compiled only once to increase performance npRegex = re.compile("^https?:\\/\\/osu\\.ppy\\.sh\\/b\\/(\\d*)") @@ -56,4 +62,23 @@ def fokabotResponse(fro, chan, message): return i["callback"](fro, chan, message[1:]) # No commands triggered - return False \ No newline at end of file + return False + +def zingheriLoop(): + log.debug("SONO STATI I ZINGHERI, I ZINGHERI!") + clients = glob.streams.getClients("zingheri") + for i in clients: + log.debug(str(i)) + if i not in glob.tokens.tokens: + continue + token = glob.tokens.tokens[i] + if token.userID == 999: + continue + if token.zingheri == -1: + chat.sendMessage("FokaBot", token.username, "Trick or treat?") + token.zingheri = 0 + elif token.zingheri == 1: + if token.actionID == actions.PLAYING and (int(time.time()) - token.actionLatestUpdate >= 25): + token.enqueue(serverPackets.zingheri("You'd better give me a treat next time ;)")) + token.leaveStream("zingheri") + threading.Timer(30, zingheriLoop).start() \ No newline at end of file diff --git a/objects/osuToken.py b/objects/osuToken.py index b087719..8a0a37c 100644 --- a/objects/osuToken.py +++ b/objects/osuToken.py @@ -64,6 +64,7 @@ class token: self.actionText = "" self.actionMd5 = "" self.actionMods = 0 + self.actionLatestUpdate = self.pingTime self.gameMode = gameModes.STD self.beatmapID = 0 self.rankedScore = 0 @@ -73,6 +74,11 @@ class token: self.gameRank = 0 self.pp = 0 + # -1: Non sa dell'esistenza dei zingheri + # 0: In attesa di risposta al messaggiomem + # 1: zingheri soonTM + self.zingheri = -1 + # Generate/set token if token_ is not None: self.token = token_ @@ -88,6 +94,7 @@ class token: # Join main stream self.joinStream("main") + self.joinStream("zingheri") def enqueue(self, bytes_): """ diff --git a/objects/streamList.py b/objects/streamList.py index 3a069d4..5c9926b 100644 --- a/objects/streamList.py +++ b/objects/streamList.py @@ -67,7 +67,7 @@ class streamList: return self.streams[streamName].broadcast(data) - '''def getClients(self, streamName): + def getClients(self, streamName): """ Get all clients in a stream @@ -76,4 +76,4 @@ class streamList: """ if streamName not in self.streams: return - return self.streams[streamName].clients''' \ No newline at end of file + return self.streams[streamName].clients \ No newline at end of file diff --git a/pep.py b/pep.py index 27b33fd..65da3f9 100644 --- a/pep.py +++ b/pep.py @@ -134,6 +134,7 @@ if __name__ == "__main__": consoleHelper.printNoNl("> Creating packets streams... ") glob.streams.add("main") glob.streams.add("lobby") + glob.streams.add("zingheri") consoleHelper.printDone() # Start fokabot @@ -151,6 +152,11 @@ if __name__ == "__main__": glob.tokens.spamProtectionResetLoop() consoleHelper.printDone() + # Initialize zingheri loop + consoleHelper.printNoNl("> WOO WOO... ") + fokabot.zingheriLoop() + consoleHelper.printDone() + # Cache user ids consoleHelper.printNoNl("> Caching user IDs... ") userUtils.cacheUserIDs()