예제 #1
0
def extractCommonActionDetails(cn, args):
	args = args.split()
	
	if len(args) < 1:
		raise Commands.UsageError()
	else:
		
		if ":" in args[0]:
			sp = args[0].split(':')
			
			if len(sp) != 2:
				raise Commands.ArgumentValueError("Extra ':' found when determining command target.")
			
			args[0] = sp[0]
			
			mask = sp[1]
		else:
			mask = "255.255.255.255"
			
		try:
			tcn = int(args[0])
		except:
			raise Commands.ArgumentValueError("You must supply a valid player cn.")
	
	responsible_cn = cn
	
	if len(args) < 2:
		seconds = settings['default_action_interval']
	else:
		try:
			seconds = timestring.parseTimeString(args[1])[1]
		except timestring.MalformedTimeString:
			raise Commands.ArgumentValueError("That time string does not seem to be valid.")
	
	if len(args) < 3:
		reason = settings['default_reason']
	else:
		try:
			reason = ' '.join(args[2:])
		except:
			raise Commands.UsageError()
		
	Logging.debug("Action details: " + str((tcn, seconds, reason, responsible_cn, mask)))
		
	return (tcn, seconds, reason, responsible_cn, mask)
예제 #2
0
	def insert(self, cn, ipString, maskString, actionTime, reason):
		p = Players.player(cn)
		
		if actionTime == None:
			seconds = settings['default_action_interval']
		else:
			try:
				seconds = timestring.parseTimeString(actionTime)[1]
			except timestring.MalformedTimeString:
				raise Commands.ArgumentValueError("That time string does not seem to be valid.")
			
		ip = Net.ipStringToLong(ipString)
		expiration = time.time() + seconds
		nick = "None Inserted"
		theTime = time.time()
		
		responsible_ip = p.ipLong()
		responsible_nick= p.name()
		
		mask = Net.ipStringToLong(maskString)
		
		new = self.table(ip, mask, expiration, reason, nick, responsible_ip, responsible_nick, theTime)
		
		session = DatabaseManager.dbmanager.session()
		try:
			session.add(new)
			session.commit()
		finally:
			session.close()
			
		dictionary = 	{
							'ip': str(ipString) + ":" + maskString,
							'time': prettytime.createDurationString(seconds),
							'action': self.punType,
							'responsible': responsible_nick,
							'reason': reason,
						}
		
		messager.sendMessage('inserted', dictionary=dictionary)
		
		logString = str(responsible_nick) + "@" + str(responsible_ip) + " has " + str(self.punType) + " " + str(ip) + ":" + maskString
		Logging.info(logString)
예제 #3
0
def onTimeLeft(cn, args):
	'''
	@description Set the amount of time left in the game using a time string.
	@usage 5m
	@usage +5m
	@usage -55s
	@allowGroups __admin__ __master__
	@denyGroups
	@doc Sets the time left in the game.
	'''
	if args == '':
		raise UsageError()

	p = Players.player(cn)

	try:
		timeModification = timestring.parseTimeString(args)
	except timestring.MalformedTimeString:
		messager.sendPlayerMessage('malformed_time_string', p)
		return
	
	if timeModification[0] == '=':
		targetTime = timeModification[1]
	elif timeModification[0] == '+':
		targetTime = ServerCore.secondsRemaining() + timeModification[1]
	else:
		targetTime = ServerCore.secondsRemaining() - timeModification[1]
		
	targetTime = max(0, targetTime)
		
	ServerCore.setSecondsRemaining(targetTime)
	
	displaytime = prettytime.createDurationString(ServerCore.secondsRemaining())
	
	p.logAction('TimeLeft set: ' + displaytime)
	
	messager.sendMessage('time_changed', dictionary={'timeleft':displaytime, 'name':p.name()})