def importScripts(self): self.decEncHelper = DecodingEncodingHelper() self.channelManager = ChannelManager() self.clientManager = ClientManager() self.fileHelper = FileHelper() self.logHelper = LogHelper() self.mysqlHelper = MysqlHelper()
def importScripts(self): self.decEncHelper = DecodingEncodingHelper() self.channelManager = ChannelManager() self.clientManager = ClientManager() self.inputHandler = InputHandler(self.upTime) self.fileHelper = FileHelper() self.logHelper = LogHelper()
class InputHandler: commandList = list() def importScripts(self): self.decEncHelper = DecodingEncodingHelper() self.channelManager = ChannelManager() self.clientManager = ClientManager() self.fileHelper = FileHelper() self.logHelper = LogHelper() self.mysqlHelper = MysqlHelper() def createCommand(self, name, syntax, arguments, description): command = Command(name, syntax, arguments, description) self.commandList.append(command) return command def initializeCommands(self): self.cmdListClients = self.createCommand( "listClients", "/listClients", "NONE", "Lists all connected clients with their name, ip and channel their in." ) self.cmdClear = self.createCommand("Clear", "/clear", "NONE", "Clears your interpreter console.") self.cmdHelp = self.createCommand( "Help", "/help", "NONE", "Shows a list of available commands.") self.cmdKick = self.createCommand( "Kick", "/kick <name/ip>", "<NAME/IP>", "Kicks the given IP from the server.") self.cmdBan = self.createCommand( "Ban", "/ban <name/ip> <time>", "<NAME/IP> <TIME>", "Bans the specified client for the given amount of time in minutes." ) self.cmdMonitorMode = self.createCommand("monitorMode", "/monitorMode", "NONE", "Switches to monitor mode.") self.cmdChangeRank = self.createCommand( "changeRank", "/changeRank <name/ip> <rank>", "<NAME/IP> <RANK>", "Changes the rank of the given client.") self.cmdListChannel = self.createCommand( "listChannel", "/listChannel", "NONE", "Lists all channels with their belonging clients.") self.cmdCreateChannel = self.createCommand( "createChannel", "/createChannel <name> <description> <password> <accessLevel>", "<NAME/DESCRIPTION/PASSWORD/ACCESSLEVEL>", "Creates a temporary Channel.") self.cmdRemoveChannel = self.createCommand( "removeChannel", "/removeChannel <name>", "<NAME>", "Removes the give Channel.") def __init__(self, upTime): self.upTime = upTime #Imports self.importScripts() #Create Commands self.initializeCommands() def handleInput(self, command): command = command.split() if command[0] == self.cmdClear.name: os.system('cls' if os.name == 'nt' else 'clear') elif command[0] == self.cmdListClients.name: if len(self.clientManager.clientList) < 1: self.logHelper.log("error", "No clients connected") else: self.logHelper.log("error", "Connected clients:") for clientObject in self.clientManager.clientList: self.logHelper.log( "info", clientObject.ip + " with name " + clientObject.username + " in " + clientObject.channelObject.name) elif command[0] == self.cmdHelp.name: self.logHelper.log("info", "Commands:") self.logHelper.log( "info", "----------------------------------------------------------") for command in self.commandList: self.logHelper.log( "info", command.syntax + " : " + command.description) self.logHelper.log( "info", "----------------------------------------------------------") elif command[0] == self.cmdKick.name: if len(self.clientManager.clientList) < 1: self.logHelper.log("error", "No clients connected") else: client = None try: client = command[1] except IndexError: self.logHelper.log("error", "Syntax: " + self.cmdKick.syntax) if client != None: if self.clientManager.ipExists(client): for clientObject in self.clientManager.clientList: if clientObject.ip == client: self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " got kicked") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes("402")) clientObject.socketObject.close() elif self.clientManager.usernameExists(client): for clientObject in self.clientManager.clientList: if clientObject.username.lower() == client: self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " got kicked") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes("402")) clientObject.socketObject.close() else: self.logHelper.log( "error", "Your given Ip/Name doesn't exist.") elif command[0] == self.cmdBan.name: if len(self.clientManager.clientList) < 1: self.logHelper.log("error", "No clients connected") else: client = None banTime = None try: client = command[1] banTime = int(command[2]) except IndexError: if client or banTime == None: self.logHelper.log("error", "Syntax: " + self.cmdBan.syntax) if client != None: if self.clientManager.ipExists(client): for clientObject in self.clientManager.clientList: if clientObject.ip == client: if banTime != None: if banTime == 0: self.fileHelper.addClientToBanList( clientObject.ip) self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " got permanantly banned") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405" + "You got permanantly banned by the console" )) clientObject.socketObject.close() else: currentTimeStamp = datetime.datetime.now( ).timestamp() self.fileHelper.addClientToBanList( clientObject.ip + ":" + str(currentTimeStamp + int(banTime) * 60)) self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " got banned for " + str(banTime) + "minutes") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405" + "You got banned for " + str(banTime) + " minutes by the console")) clientObject.socketObject.close() else: self.fileHelper.addClientToBanList( clientObject.ip) self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " got permanantly banned") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405" + "You got permanantly banned by the console" )) clientObject.socketObject.close() elif self.clientManager.usernameExists(client): for clientObject in self.clientManager.clientList: if clientObject.username.lower() == client: if banTime != None: if banTime == 0: self.fileHelper.addClientToBanList( clientObject.ip) self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " got permanantly banned") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405" + "You got permanantly banned by the console" )) clientObject.socketObject.close() else: currentTimeStamp = datetime.datetime.now( ).timestamp() self.fileHelper.addClientToBanList( clientObject.ip + ":" + str(currentTimeStamp + int(banTime) * 60)) self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " got banned for " + str(banTime) + "minutes") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405" + "You got banned for " + str(banTime) + " minutes by the console")) clientObject.socketObject.close() else: self.fileHelper.addClientToBanList( clientObject.ip) self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " got permanantly banned") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405" + "You got permanantly banned by the console" )) clientObject.socketObject.close() else: print( "[Server/Error] Your given Ip/Name doesn't exist.") elif command[0] == self.cmdListChannel.name: self.logHelper.log("info", "Channels:") self.logHelper.log( "info", "----------------------------------------------------------") for channel in self.channelManager.channelList: self.logHelper.log( "info", "-" + channel.name + " : Description:" + channel.description) self.logHelper.log("info", " Clients:") if len(channel.clientList) < 1: self.logHelper.log("info", " -channel is empty") else: for client in channel.clientList: self.logHelper.log( "info", " -" + client.ip + " : " + client.username) self.logHelper.log( "info", "----------------------------------------------------------") elif command[ 0] == self.cmdCreateChannel.name: #TODO: add things to remove user error when acces level isnst int and description contains spaces name = None description = None password = None accessLevel = None try: name = command[1] description = command[2] password = command[3] accessLevel = int(command[4]) self.channelManager.addChannel( Channel(name, description, password, accessLevel, list())) self.logHelper.log("info", "Channel " + name + " created.") except: if name or description or password or accessLevel == None: self.logHelper.log( "error", "Syntax: " + self.cmdCreateChannel.syntax) elif command[0] == self.cmdRemoveChannel.name: name = None try: name = command[1] for channel in self.channelManager.channelList: if channel.name == name: self.channelManager.removeChannel(channel) self.logHelper.log("info", "Channel " + name + " was removed.") except: if name == None: self.logHelper.log( "error", "Syntax: " + self.cmdRemoveChannel.syntax) elif command[ 0] == self.cmdChangeRank.name: #TODO: add things to remove user error for rank and check if rank isnt even a rank if len(self.clientManager.clientList) < 1: self.logHelper.log("error", "No clients connected") else: client = None rank = None try: client = command[1] rank = command[2] except IndexError: self.logHelper.log("error", "Syntax: " + self.cmdChangeRank.syntax) if client != None: if rank != None: if self.clientManager.ipExists(client): for clientObject in self.clientManager.clientList: if clientObject.ip == client: prevRank = clientObject.rank clientObject.rank = rank self.mysqlHelper.updateAccountRank( clientObject) self.logHelper.log( "info", "Changed " + clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " 's rank from " + prevRank + " to " + rank) elif self.clientManager.usernameExists(client): for clientObject in self.clientManager.clientList: if clientObject.username.lower() == client: prevRank = clientObject.rank clientObject.rank = rank self.mysqlHelper.updateAccountRank( clientObject) #clientObject.sendall(self.decEncHelper.stringToBytes("904" + rank))TODO: self.logHelper.log( "info", "Changed " + clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " 's rank from " + prevRank + " to " + rank) else: self.logHelper.log( "error", "Your given Ip/Name doesn't exist.") elif command[0] == self.cmdMonitorMode.name: monitor = True config = self.fileHelper.getConfig("Server Config") ip = config.ip + ":" + str(config.port) if len(ip) != 20: ip = " " * (20 - len(ip)) + ip while monitor: clearCount = 0 connectedClients = str(len(self.clientManager.clientList)) connectedAdmins = str(len(self.clientManager.getAdmins())) if len(connectedClients) != 3: connectedClients = "0" * ( 3 - len(connectedClients)) + connectedClients if len(connectedAdmins) != 3: connectedAdmins = "0" * ( 3 - len(connectedAdmins)) + connectedAdmins os.system('cls' if os.name == 'nt' else 'clear') try: print( "##############Monitoring##############\n#Server Ip/Port: " + ip + "#\n#Uptime: " + time.strftime( '%H:%M:%S', time.gmtime(int(time.time() - self.upTime))) + "#\n#Connected Clients: " + connectedClients + "#\n#Connected Admins: " + connectedAdmins + "#\n##############Monitoring##############") while clearCount != 5: sys.stdout.write("\x1b[1A") sys.stdout.write("\x1b[2K") clearCount = clearCount + 1 time.sleep(0.5) except KeyboardInterrupt: monitor = False os.system('cls' if os.name == 'nt' else 'clear') self.logHelper.log("info", "Exited monitor mode.") else: self.logHelper.log("error", "Unknown command: " + command[0]) self.logHelper.log("error", "type /help for a list of commands")
def handle( self ): #overwrite TODO: find a way to import script only once not once per handle call self.decEncHelper = DecodingEncodingHelper() self.channelManager = ChannelManager() self.clientManager = ClientManager() self.mysqlHelper = MysqlHelper() self.fileHelper = FileHelper() self.logHelper = LogHelper() if self.appendClient: self.clientObject = Client(self.request, "*NOT_ASSIGNED*", "*NOT_ASSIGNED*", "*NOT_ASSIGNED*") if len(self.fileHelper.readTXTFile("data/", "banList")) > 1: for client in self.fileHelper.readTXTFile("data/", "banList"): try: banTime = client.split(":")[1] except IndexError: pass if self.clientObject.ip + "\n" == client: self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " is permanantly banned on the server") self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405[Client/Info] You are permanantly banned on this server" )) self.clientObject.socketObject.close() self.appendClient = False elif self.clientObject.ip + ":" + banTime == client: currentTimeStamp = datetime.datetime.now().timestamp() banTime = banTime[:-1] if (currentTimeStamp > float(banTime)): self.fileHelper.removeClientFromBanList( self.clientObject.ip) self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server") print( self.mysqlHelper.getAccountRank( self.clientObject)) if len( self.mysqlHelper.getAccountRank( self.clientObject)) < 3: self.clientObject.rank = "user" self.mysqlHelper.updateAccountRank( self.clientObject) self.appendClient = False self.tryRecv = True else: self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " is temporary banned on the server. Remaining Time: " + str( int((float(banTime) - currentTimeStamp) / 60)) + "Minutes") self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405[Client/Info] You are temporary banned on this server. Remaining Time: " + str( int((float(banTime) - currentTimeStamp) / 60)) + " Minutes")) self.channelManager.removeChannelMember( self.clientObject.channelObject, self.clientObject) self.clientObject.socketObject.close() self.appendClient = False break elif "BanList:\n" == client: pass else: self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server.") self.appendClient = False self.tryRecv = True else: self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server.") self.appendClient = False self.tryRecv = True if self.tryRecv: try: self.data = self.decEncHelper.bytesToString( self.clientObject.socketObject.recv(1024)) self.handleRequest(self.data, self.clientObject) except: for clientObjectInList in self.clientManager.clientList: if clientObjectInList != self.clientObject: if self.loggedIn: if self.channelManager.channelContains( clientObjectInList, self.clientObject.channelObject.name): clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "811[Client/Info] " + self.clientObject.username + " quit.")) self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " Disconnected") self.mysqlHelper.logoutAccount(self.clientObject) self.clientManager.removeClient(self.clientObject) if self.loggedIn: self.channelManager.removeChannelMember( self.clientObject.channelObject, self.clientObject)
class ClientHandler(socketserver.BaseRequestHandler): appendClient = True tryRecv = False loggedIn = False def handle( self ): #overwrite TODO: find a way to import script only once not once per handle call self.decEncHelper = DecodingEncodingHelper() self.channelManager = ChannelManager() self.clientManager = ClientManager() self.mysqlHelper = MysqlHelper() self.fileHelper = FileHelper() self.logHelper = LogHelper() if self.appendClient: self.clientObject = Client(self.request, "*NOT_ASSIGNED*", "*NOT_ASSIGNED*", "*NOT_ASSIGNED*") if len(self.fileHelper.readTXTFile("data/", "banList")) > 1: for client in self.fileHelper.readTXTFile("data/", "banList"): try: banTime = client.split(":")[1] except IndexError: pass if self.clientObject.ip + "\n" == client: self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " is permanantly banned on the server") self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405[Client/Info] You are permanantly banned on this server" )) self.clientObject.socketObject.close() self.appendClient = False elif self.clientObject.ip + ":" + banTime == client: currentTimeStamp = datetime.datetime.now().timestamp() banTime = banTime[:-1] if (currentTimeStamp > float(banTime)): self.fileHelper.removeClientFromBanList( self.clientObject.ip) self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server") print( self.mysqlHelper.getAccountRank( self.clientObject)) if len( self.mysqlHelper.getAccountRank( self.clientObject)) < 3: self.clientObject.rank = "user" self.mysqlHelper.updateAccountRank( self.clientObject) self.appendClient = False self.tryRecv = True else: self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " is temporary banned on the server. Remaining Time: " + str( int((float(banTime) - currentTimeStamp) / 60)) + "Minutes") self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "405[Client/Info] You are temporary banned on this server. Remaining Time: " + str( int((float(banTime) - currentTimeStamp) / 60)) + " Minutes")) self.channelManager.removeChannelMember( self.clientObject.channelObject, self.clientObject) self.clientObject.socketObject.close() self.appendClient = False break elif "BanList:\n" == client: pass else: self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server.") self.appendClient = False self.tryRecv = True else: self.clientManager.addClient(self.clientObject) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " connected to the server.") self.appendClient = False self.tryRecv = True if self.tryRecv: try: self.data = self.decEncHelper.bytesToString( self.clientObject.socketObject.recv(1024)) self.handleRequest(self.data, self.clientObject) except: for clientObjectInList in self.clientManager.clientList: if clientObjectInList != self.clientObject: if self.loggedIn: if self.channelManager.channelContains( clientObjectInList, self.clientObject.channelObject.name): clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "811[Client/Info] " + self.clientObject.username + " quit.")) self.logHelper.log( "info", self.clientObject.ip + ":" + str(self.clientObject.port) + " Disconnected") self.mysqlHelper.logoutAccount(self.clientObject) self.clientManager.removeClient(self.clientObject) if self.loggedIn: self.channelManager.removeChannelMember( self.clientObject.channelObject, self.clientObject) def handleRequest(self, request, clientObject): requestId = request[:3] requestdata = request[3:] if requestId == "001": #chatting self.logHelper.channelLog( "info", clientObject.channelObject.name, clientObject.ip + ":" + str(clientObject.port) + " [" + clientObject.rank + "]" + clientObject.username + " : " + requestdata) for clientObjectFromList in self.clientManager.clientList: if clientObjectFromList.channelObject.name == clientObject.channelObject.name: if clientObjectFromList != clientObject: clientObjectFromList.socketObject.sendall( self.decEncHelper.stringToBytes( "001[" + clientObject.rank + "]" + clientObject.username + " : " + requestdata)) elif requestId == "011": #try logging in requestdata = requestdata.split(":") self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " tried logging in.") self.clientManager.updateClientUsername(clientObject, requestdata[0]) if self.mysqlHelper.tryLogin(clientObject, requestdata[1]): self.loggedIn = True self.clientObject.channelObject = self.channelManager.channelList[ 0] self.clientObject.channelObject.clientList.append( self.clientObject) self.clientManager.updateClientRank( clientObject, self.mysqlHelper.getAccountRank(clientObject)) for clientObjectInList in self.clientManager.clientList: if clientObjectInList != clientObject: if self.channelManager.channelContains( clientObjectInList, "Welcome_Channel"): clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "811[" + clientObject.rank + "]" + clientObject.username + " joined.")) self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " logged in as " + clientObject.username + " succesfully.") if len(self.mysqlHelper.getAccountRank(self.clientObject)) < 3: self.clientObject.rank = "user" self.mysqlHelper.updateAccountRank(self.clientObject) for clientObjectInList in self.clientManager.clientList: if clientObjectInList != clientObject: if self.channelManager.channelContains( clientObjectInList, "Welcome_Channel"): clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "811[" + clientObject.rank + "]" + clientObject.username + " joined.")) clientObject.socketObject.sendall( self.decEncHelper.stringToBytes("903")) else: self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " couldn't log in.") self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes("902")) self.clientObject.socketObject.close() elif requestId == "611": #sent current clients in given channel self.logHelper.log( "info", str(self.clientObject.ip) + ":" + str(self.clientObject.port) + " " + clientObject.username + " requested the clients from channel " + requestdata + ".") for channel in self.channelManager.channelList: if channel.name == requestdata: if len(channel.clientList) < 1: self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes("611Empty")) else: clientsInChannel = list() for client in channel.clientList: clientsInChannel.append(client.username) self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "611" + requestdata + ";" + str(clientsInChannel))) break elif requestId == "541": #sent client rank self.logHelper.log( "info", clientObject.ip + " " + clientObject.username + " requested rank.") self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes("541" + str(self.clientObject.rank))) elif requestId == "022": #channel request self.logHelper.log( "info", clientObject.ip + " " + clientObject.username + " requested channel.") channelNames = list() channelDescriptions = list() channelPasswords = list() channelAccessLevels = list() for channelObject in self.channelManager.channelList: channelNames.append(channelObject.name) channelDescriptions.append(channelObject.description) channelPasswords.append(channelObject.password) channelAccessLevels.append(channelObject.accessLevel) self.clientObject.socketObject.sendall( self.decEncHelper.stringToBytes("022" + str(channelNames) + ":" + str(channelDescriptions) + ":" + str(channelPasswords) + ":" + str(channelAccessLevels))) elif requestId == "023": #changing channels if self.channelManager.channelExists(requestdata): if self.channelManager.channelContains(self.clientObject, requestdata): clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "023[Client/Info] you are already in this channel." )) self.logHelper.log( "info", clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " tried to join a channel which he is already part of." ) else: for channelObject in self.channelManager.channelList: if channelObject.name == requestdata: oldChannel = clientObject.channelObject.name self.channelManager.removeChannelMember( clientObject.channelObject, clientObject) clientObject.channelObject = channelObject self.channelManager.addChannelMember( channelObject, clientObject) clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "023[Client/Info] You succesfully changed to " + requestdata + ".")) self.logHelper.log( "info", clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " changed from " + oldChannel + " to " + requestdata + ".") for clientInList in self.clientManager.clientList: clientInList.socketObject.sendall( self.decEncHelper.stringToBytes("811")) else: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "023[Client/Info] This Channel doesn't exists.")) self.logHelper.log( "info", clientObject.ip + " : " + clientObject.username + " tried to join a channel that doesn't exists.") elif requestId == "031": #changing namesFIXME: doesnt work with rank not tested witohut if self.clientManager.hasRank(clientObject, "admin"): self.fileHelper.removeClientRank(clientObject) clientObject.username = requestdata self.fileHelper.addClientRank(clientObject, "admin") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "031[Client/Info] you succesfully changed your name.")) self.logHelper.log( "info", clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " changed name.") else: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "031[Client/Info] You don't have access to that command." )) self.logHelper.log( "info", clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " had no access to that command. Rank:(" + clientObject.rank.strip("\n") + ")") elif requestId == "411": #kicking clients if self.clientManager.hasRank(clientObject, "admin"): if self.clientManager.usernameExists(requestdata): if requestdata == self.clientObject.username: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "411[Client/Info] You can't kick yourself.")) else: for clientObjectInList in self.clientManager.clientList: if clientObjectInList.username == requestdata: clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "402[Client/Info] You got kicked by: " + self.clientObject.username)) clientObjectInList.socketObject.close() time.sleep(0.1) self.logHelper.log( "info", clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " kicked : " + requestdata) clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "411[Client/Info] You sucessfully kicked: " + requestdata)) break elif self.clientManager.ipExists(requestdata): if requestdata == self.clientObject.ip: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "411[Client/Info] You can't kick yourself.")) else: for clientObjectInList in self.clientManager.clientList: if clientObjectInList.ip == requestdata: clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "402[Client/Info] You got kicked by: " + self.clientObject.username)) clientObjectInList.socketObject.close() self.logHelper.log( "info", clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " kicked : " + requestdata) clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "411[Client/Info] You sucessfully kicked: " + requestdata)) break else: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "411[Client/Info] Username or ip doesnt exists on the server." )) else: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "031[Client/Info] You don't have access to that command." )) self.logHelper.log( "info", clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " had no access to that command. Rank:(" + clientObject.rank.strip("\n") + ")") elif requestId == "711": #banning clients if self.clientManager.hasRank(clientObject, "admin"): requestdata = requestdata.split() client = requestdata[0] banTime = requestdata[1] if self.clientManager.usernameExists(client): if client == self.clientObject.username: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "711[Client/Info] You can't ban yourself.")) else: for clientObjectInList in self.clientManager.clientList: if clientObjectInList.username == client: if banTime == 0: self.fileHelper.addClientToBanList( clientObjectInList.ip) self.logHelper.log( "info", clientObjectInList.ip + ":" + str(clientObjectInList.port) + " " + clientObjectInList.username + " got permanantly banned by " + clientObject.username) clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "711" + "[Client/Info] You got permanantly banned by " + clientObject.username)) clientObjectInList.socketObject.close() clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "711[Client/Info] You sucessfully banned: " + clientObjectInList.username)) else: currentTimeStamp = datetime.datetime.now( ).timestamp() self.fileHelper.addClientToBanList( clientObjectInList.ip + ":" + str(currentTimeStamp + int(banTime) * 60)) self.logHelper.log( "info", clientObjectInList.ip + ":" + str(clientObjectInList.port) + " " + clientObjectInList.username + " got banned for " + str(banTime) + "minutes by " + clientObject.username) clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "711" + "[Client/Info] You got banned for " + str(banTime) + "Minutes by " + clientObject.username)) clientObjectInList.socketObject.close() clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "711[Client/Info] You sucessfully banned: " + clientObjectInList.username + " for " + str(banTime))) elif self.clientManager.ipExists(client): if client == self.clientObject.ip: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "711[Client/Info] You can't ban yourself.")) else: for clientObjectInList in self.clientManager.clientList: if clientObjectInList.ip == client: if banTime == 0: self.fileHelper.addClientToBanList( clientObjectInList.ip) self.logHelper.log( "info", clientObjectInList.ip + ":" + str(clientObjectInList.port) + " " + clientObjectInList.username + " got permanantly banned by " + clientObject.username) clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "711" + "[Client/Info] You got permanantly banned by " + clientObject.username)) clientObjectInList.socketObject.close() clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "711[Client/Info] You sucessfully banned: " + clientObjectInList.username)) else: currentTimeStamp = datetime.datetime.now( ).timestamp() self.fileHelper.addClientToBanList( clientObjectInList.ip + ":" + str(currentTimeStamp + int(banTime) * 60)) self.logHelper.log( "info", clientObjectInList.ip + ":" + str(clientObjectInList.port) + " " + clientObjectInList.username + " got banned for " + str(banTime) + "minutes by " + clientObject.username) clientObjectInList.socketObject.sendall( self.decEncHelper.stringToBytes( "711" + "[Client/Info] You got banned for " + str(banTime) + "Minutes by " + clientObject.username)) clientObjectInList.socketObject.close() clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "711[Client/Info] You sucessfully banned: " + clientObjectInList.username + " for " + str(banTime))) else: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "711[Client/Info] Username or ip doesnt exists on the server." )) else: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "031[Client/Info] You don't have access to that command." )) self.logHelper.log( "info", clientObject.ip + ":" + str(clientObject.port) + " " + clientObject.username + " had no access to that command. Rank:(" + clientObject.rank.strip("\n") + ")") elif requestId == "901": #GUI get all channel with clients channelList = list() for channel in self.channelManager.channelList: memberList = list() for client in channel.clientList: if client.username == clientObject.username: memberList.append(client.username + "(you)") else: memberList.append(client.username) channelList.append(channel.name + ":" + str(memberList) + ";") clientObject.socketObject.sendall( self.decEncHelper.stringToBytes("901" + str(channelList))) else: #any other requestId if len(requestId) == 0: raise SystemExit() else: clientObject.socketObject.sendall( self.decEncHelper.stringToBytes( "401[Client/Error] Unknown request ID")) self.logHelper.log( "error", clientObject.ip + ":" + str(clientObject.port) + " sent unknown request ID") self.handle()