.BANCHO. Kick all clients when using !kick, don't kick FokaBot with !kick command

This commit is contained in:
Nyo 2016-12-11 11:39:01 +01:00
parent 44545c3bcb
commit b4d498c26c
4 changed files with 36 additions and 17 deletions

2
common

@ -1 +1 @@
Subproject commit 3288420cd81cdb84912b9debda1e7828ebb7c62a
Subproject commit 64445ae5464b35528bde3439623655ba3af45c04

View File

@ -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)

View File

@ -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

View File

@ -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):
"""