From b4d498c26cf42e93dd7d710036b0aea072f4090c Mon Sep 17 00:00:00 2001 From: Nyo Date: Sun, 11 Dec 2016 11:39:01 +0100 Subject: [PATCH] .BANCHO. Kick all clients when using !kick, don't kick FokaBot with !kick command --- common | 2 +- constants/fokabotCommands.py | 13 ++++++++----- helpers/chatHelper.py | 4 +--- objects/tokenList.py | 34 ++++++++++++++++++++++++++-------- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/common b/common index 3288420..64445ae 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 3288420cd81cdb84912b9debda1e7828ebb7c62a +Subproject commit 64445ae5464b35528bde3439623655ba3af45c04 diff --git a/constants/fokabotCommands.py b/constants/fokabotCommands.py index e7264df..4026137 100644 --- a/constants/fokabotCommands.py +++ b/constants/fokabotCommands.py @@ -119,15 +119,18 @@ def kickAll(fro, chan, message): def kick(fro, chan, message): # Get parameters - target = message[0].replace("_", " ") + target = message[0].lower().replace("_", " ") + if target == "fokabot": + return "Nope." # Get target token and make sure is connected - targetToken = glob.tokens.getTokenFromUsername(target) - if targetToken is None: + tokens = glob.tokens.getTokenFromUsername(target, all=True) + if len(tokens) == 0: return "{} is not online".format(target) - # Kick user - targetToken.kick() + # Kick users + for i in tokens: + i.kick() # Bot response return "{} has been kicked from the server.".format(target) diff --git a/helpers/chatHelper.py b/helpers/chatHelper.py index 03b60e3..b3a2242 100644 --- a/helpers/chatHelper.py +++ b/helpers/chatHelper.py @@ -113,9 +113,7 @@ def partChannel(userID = 0, channel = "", token = None, toIRC = True, kick = Fal # Delete temporary channel if everyone left if "chat/{}".format(channelObject.name) in glob.streams.streams: - sas = len(glob.streams.streams["chat/{}".format(channelObject.name)].clients) - print(str(sas - 1)) - if channelObject.temp == True and sas - 1 == 0: + if channelObject.temp == True and len(glob.streams.streams["chat/{}".format(channelObject.name)].clients) - 1 == 0: glob.channels.removeChannel(channelObject.name) # Force close tab if needed diff --git a/objects/tokenList.py b/objects/tokenList.py index 439a3e1..059417f 100644 --- a/objects/tokenList.py +++ b/objects/tokenList.py @@ -54,25 +54,34 @@ class tokenList: # Get userID associated to that token return self.tokens[token].userID - def getTokenFromUserID(self, userID, ignoreIRC=False): + def getTokenFromUserID(self, userID, ignoreIRC=False, all=False): """ Get token from a user ID :param userID: user ID to find :param ignoreIRC: if True, consider bancho clients only and skip IRC clients + :param all: if True, return a list with all clients that match given username, otherwise return + only the first occurrence. :return: False if not found, token object if found """ # Make sure the token exists + ret = [] for _, value in self.tokens.items(): if value.userID == userID: if ignoreIRC and value.irc: continue - return value + if all: + ret.append(value) + else: + return value - # Return none if not found - return None + # Return full list or None if not found + if all: + return ret + else: + return None - def getTokenFromUsername(self, username, ignoreIRC=False, safe=False): + def getTokenFromUsername(self, username, ignoreIRC=False, safe=False, all=False): """ Get an osuToken object from an username @@ -80,20 +89,29 @@ class tokenList: :param ignoreIRC: if True, consider bancho clients only and skip IRC clients :param safe: if True, username is a safe username, compare it with token's safe username rather than normal username + :param all: if True, return a list with all clients that match given username, otherwise return + only the first occurrence. :return: osuToken object or None """ # lowercase who = username.lower() if not safe else username # Make sure the token exists + ret = [] for _, value in self.tokens.items(): if (not safe and value.username.lower() == who) or (safe and value.safeUsername == who): if ignoreIRC and value.irc: continue - return value + if all: + ret.append(value) + else: + return value - # Return none if not found - return None + # Return full list or None if not found + if all: + return ret + else: + return None def deleteOldTokens(self, userID): """