예제 #1
0
	def oncommandfromuser(self,fromwho,fromwhere,ispm,command,args,socket):
		try:
			if fromwho == self.app.config.get('tasbot', "nick"):
				return
			if len(command) > 0 and command[0] == "!":
				if not self.db.AccessCheck( -1, fromwho, Roles.User ):
					self.sayPermissionDenied( socket, command, fromwho, fromwhere, ispm )
					#log
					return
			else:
				return

			# !TODO refactor to use function dict
			if command == "!ladder":
				if not self.enabled and not self.db.AccessCheck( -1, fromwho, Roles.GlobalAdmin ):
					self.notifyuser( socket, fromwho, fromwhere, ispm, "Ladder functionality is temporarily disabled." )
					return
				ladderid = -1
				battleid = -2
				password = ""
				if len(args) > 0:
					if args[0].isdigit():
						ladderid = int(args[0])
						if len(args) > 1:
							password = "******".join(args[1:])
					else:
						password = "******".join(args[0:])
				try:
					battleid = self.tsc.users[fromwho].battleid
				except Exception:
					Log.bad("User " + fromwho + " not found")
				if ( battleid < 0 ):
					self.notifyuser( socket, fromwho, fromwhere, ispm, "You are not in a battle." )
				else:
					if not self.db.AccessCheck( ladderid, fromwho, Roles.User ):
						self.sayPermissionDenied( socket, command, fromwho, fromwhere, ispm )
						#log
						return
					if ( battleid in self.battleswithbots ):
						self.notifyuser( socket, fromwho, fromwhere, ispm, "A ladder bot is already present in your battle." )
					else:
						if ( ladderid == -1 or self.db.LadderExists( ladderid ) ):
							self.spawnbot( socket, battleid, password, fromwho, ladderid )
						else:
							self.notifyuser( socket, fromwho, fromwhere, ispm, "Invalid ladder ID." )
			if command == "!ladderjoinchannel":
				if not self.db.AccessCheck( -1, fromwho, Roles.GlobalAdmin ):
					self.sayPermissionDenied( socket, command, fromwho, fromwhere, ispm )
					#log
					return
				if len(args) < 1:
					self.notifyuser( socket, fromwho, fromwhere, ispm, "Invalid command syntax, check !ladderhelp for usage." )
				else:
					channel = " ".join(args[0:])
					socket.send("JOIN " + channel + "\n")
					if not channel in self.channels:
						self.channels.append(channel)
						self.app.config.set('join_channels',"channels", ','.join(self.channels))
						self.app.SaveConfig()
			if command == "!ladderleavechannel":
				if not self.db.AccessCheck( -1, fromwho, Roles.GlobalAdmin ):
					self.sayPermissionDenied( socket, command, fromwho, fromwhere, ispm )
					#log
					return
				if len(args) != 1:
					self.notifyuser( socket, fromwho, fromwhere, ispm, "Invalid command syntax, check !ladderhelp for usage." )
				else:
					channel = args[0]
					if channel in self.channels:
						socket.send("LEAVE " + channel + "\n")
						self.channels.remove(channel)
						self.app.config.set('join_channels',"channels", ','.join(self.channels))
						self.app.SaveConfig()
			if command == "!ladderlist":
				self.notifyuser( socket, fromwho, fromwhere, ispm, "Available ladders, format name: ID:" )
				for l in self.db.GetLadderList(Ladder.name):
					self.notifyuser( socket, fromwho, fromwhere, ispm, "%s: %d" %(l.name, l.id ) )
			if command == "!ladderadd":
				if not self.db.AccessCheck( -1, fromwho, Roles.GlobalAdmin ):
					self.sayPermissionDenied( socket, command, fromwho, fromwhere, ispm )
					#log
					return
				if len(args) < 1:
					self.notifyuser( socket, fromwho, fromwhere, ispm, "Ladder name can't be empty." )
				else:
					try:
						laddername = " ".join(args[0:])
						ladderid = self.db.AddLadder( laddername )
						self.notifyuser( socket, fromwho, fromwhere, ispm, "New ladder created, ID: " + str(ladderid) )
					except ElementExistsException, e:
						Log.error(e)
			if command == "!ladderremove":
				if not self.db.AccessCheck( -1, fromwho, Roles.GlobalAdmin ):
					self.sayPermissionDenied( socket, command, fromwho, fromwhere, ispm )
					#log
					return
				if len(args) != 1 or not args[0].isdigit():
					self.notifyuser( socket, fromwho, fromwhere, ispm, "Invalid command syntax, check !ladderhelp for usage." )
				else:
					ladderid = int(args[0])
					try:
						self.db.RemoveLadder( args[0] )
						self.notifyuser( socket, fromwho, fromwhere, ispm, "Ladder removed." )
					except ElementNotFoundException, e:
						self.notifyuser( socket, fromwho, fromwhere, ispm, "Invalid ladder ID." )