def warnNickReserved(cn, count, sessid): try: p = player(cn) except ValueError: return try: nickacct = p.warn_nickacct if nickacct.nick != sauerbomber.playerName(cn) or sessid != sauerbomber.playerSessionId(cn): p.warning_for_login = False return except (AttributeError, ValueError): p.warning_for_login = False return if isLoggedIn(cn): user = loggedInAs(cn) if nickacct.user_id != user.id: ban(cn, 0, 'Use of reserved name', -1) pass p.warning_for_login = False return if count > 4: ban(cn, 0, 'Use of reserved name', -1) p.warning_for_login = False return remaining = 25-(count*5) sauerbomber.playerMessage(cn, warning('Your name is reserved. You have ' + red('%i') + ' seconds to login or be kicked.') % remaining) addTimer(5000, warnNickReserved, (cn, count+1, sessid))
def onPlayerCommands(cn, args): if args != '': sauerbomber.playerMessage(cn, error('Usage: #playercommands')) else: msg = blue('Available commands: ') for command in command_info.keys(): msg += '#' + command + ' ' sauerbomber.playerMessage(cn, orange(msg))
def listMasterCommands(cn, args): str = 'Master commands: ' for cmd in command_info.items(): if cmd[1].public: str += cmd[1].command + ' ' elif cmd[1].master: str += cmd[1].command + ' ' sauerbomber.playerMessage(cn, info(str))
def onLoginCommand(cn, args): '''@description Login to server account @usage email password @public''' args = args.split(' ') if len(args) != 2: raise UsageError() user = userAuth(args[0], args[1]) if user: login(cn, user) else: sauerbomber.playerMessage(cn, error('Invalid login.'))
def msgHelpText(cn, cmd): try: helpinfo = command_info[cmd] except KeyError: sauerbomber.playerMessage(cn, error('Command not found')) else: msgs = [] try: msgs.append(helpinfo.description) except AttributeError: pass for usage in helpinfo.usages: msgs.append(usage) for msg in msgs: sauerbomber.playerMessage(cn, info(msg))
def onRegisterCommand(cn, args): '''@description Register account with server @usage email password @public''' args = args.split(' ') if len(args) != 2: raise UsageError() try: dbmanager.query(User).filter(User.email==args[0]).one() except NoResultFound: if not isValidEmail(args[0]): raise ArgumentValueError('Invalid email address') user = User(args[0], args[1]) session.add(user) session.commit() sauerbomber.playerMessage(cn, info('Account created')) return except MultipleResultsFound: pass raise StateError('An account with that email already exists')
def onLinkName(cn, args): '''@description Link name to server account, and reserve name. @usage @public''' if args != '': raise UsageError() if not isLoggedIn(cn): raise StateError('You must be logged in to link a name to your account') if sauerbomber.playerName(cn) in blocked_names: raise StateError('You can not reserve this name') try: dbmanager.query(NickAccount).filter(NickAccount.nick==sauerbomber.playerName(cn)).one() except NoResultFound: user = loggedInAs(cn) nickacct = NickAccount(sauerbomber.playerName(cn), user.id) session.add(nickacct) session.commit() sauerbomber.playerMessage(cn, info('Your name is now linked to your account.')) sauerbomber.playerMessage(cn, info('You may now login with /setmaster password')) return except MultipleResultsFound: pass raise StateError('Your name is already linked to an account')
def onAuthSuccess(cn, name): if currentAdmin() != None: sauerbomber.playerMessage(cn, error("Admin is present")) return sauerbomber.setMaster(cn)
def message(self, msg): """Send message to client""" sauerbomber.playerMessage(self.cn, msg)
def listAdminCommands(cn, args): str = 'Admin commands: ' for cmd in command_info.items(): str += cmd[1].command + ' ' sauerbomber.playerMessage(cn, info(str))
def listPublicCommands(cn, args): str = 'Public commands: ' for cmd in command_info.items(): if cmd[1].public: str += cmd[1].command + ' ' sauerbomber.playerMessage(cn, info(str))
p.message(info('Usage: ' + command + ' ' + usage)) except StateError, e: p.message(error(str(e))) except ArgumentValueError, e: p.message(error('Invalid argument. ' + str(e))) except ValueError: p.message(error('Value Error: Did you specify a valid cn?')) exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() logging.warn('Uncaught ValueError raised in command handler.') logging.warn(traceback.format_exc()) except: exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() logging.warn('Uncaught exception occured in command handler.') logging.warn(traceback.format_exc()) else: sauerbomber.playerMessage(cn, error('Command not found')) def onMsg(self, cn, text): if len(text) > 0 and self.prefixes.find(text[0]) != -1: cmd = text[1:].split(' ')[0] self.trigger(cn, cmd, text[len(cmd)+2:]) return False return True commandmanager = CommandManager() def registerCommandHandler(command, func): help.loadCommandInfo(command, func) commandmanager.register(command, func) class commandHandler(object): def __init__(self, name):
def insufficientPermissions(cn): sauerbomber.playerMessage(cn, error('Insufficient permissions'))