예제 #1
0
파일: bbs.py 프로젝트: volundmush/athanor
 def board_post_startpost(self, lhs=None, rhs=None):
     if self.group:
         bb_type = '+gb'
     else:
         bb_type = '+bb'
     if self.character.db.curpost:
         message = "You have a post in progress. Use %sproof to view it, %spost to post it, or %stoss to erase it."
         self.error(message % (bb_type, bb_type, bb_type))
         return
     findname, subject = lhs.split('/', 2)
     if not findname:
         self.error("No board entered.")
         return
     if not subject:
         self.error("No subject entered.")
         return
     try:
         board_group = self.board_group
         board = board_group.find_board(find_name=findname.strip(), checker=self.character)
     except ValueError as err:
         self.error(unicode(err))
         return
     if not board.perm_check(self.character, 'write'):
         self.error("Permission denied.")
         return
     curpost = {'subject': sanitize_string(subject), 'board': board, 'group': self.group}
     self.character.db.curpost = curpost
     self.sys_msg("You have begun writing a post. Use %s to add text." % bb_type)
예제 #2
0
파일: radio.py 프로젝트: volundmush/athanor
    def func(self):
        rhs = self.rhs
        lhs = self.lhs
        switches = self.final_switches

        if self.cmdstring.startswith('.'):
            rest_string = self.raw_string[1:]
            rest_string = sanitize_string(rest_string)
            if ' ' in rest_string:
                lhs, rhs = rest_string.split(' ', 1)
            else:
                lhs = rest_string
                rhs = None
            if '/' in lhs:
                lhs, self.switches = lhs.split('/', 1)
                self.parse_switches()
                switches = self.final_switches

        if switches:
            switch = switches[0]
            getattr(self, 'switch_%s' % switch)(lhs, rhs)
            return
        if self.args:
            self.switch_broadcast(lhs, rhs)
            return
        else:
            self.switch_list(lhs, rhs)
예제 #3
0
def valid_slot(input):
    if not input:
        raise ValueError("No slot name entered!")
    input = sanitize_string(input)
    if not re.match(r"\w+", input):
        raise ValueError("The only characters allowed in slot names are alphanumerics and underscores.")
    return input
예제 #4
0
def valid_groupname(newname=None):
    if not newname:
        raise ValueError("Group Name is empty.")
    newname = sanitize_string(newname, strip_ansi=True)
    if len(newname) > 35:
        raise ValueError("Group names may not exceed 35 characters in length.")
    return newname
예제 #5
0
def valid_rankname(newname=None):
    if not newname:
        raise ValueError("Rank Name is empty.")
    newname = sanitize_string(newname)
    if len(newname) > 35:
        raise ValueError("Rank Names may not exceed 35 characters in length.")
    return newname
예제 #6
0
def valid_name(namecheck=None):
    if not namecheck:
        raise ValueError("Name field empty.")
    namecheck = sanitize_string(namecheck, strip_ansi=True)
    if not re.match('^[\w-]+$', namecheck):
        raise ValueError("File '%s' could not be set: Info names must be alphanumeric." % namecheck)
    if len(namecheck) > 18:
        raise ValueError("Info File names may not exceed 18 characters.")
    return namecheck
예제 #7
0
 def switch_create(self):
     if not self.args:
         self.error("No name entered!")
         return
     new_name = sanitize_string(self.lhs, strip_ansi=True)
     if District.objects.filter(key__iexact=new_name).count():
         self.error("That name is taken.")
         return
     district = District.objects.create(key=new_name)
     self.sys_msg("District '%s' created!" % district)
예제 #8
0
 def add(self, creator, name=None):
     if not name:
         raise ValueError("No name entered!")
     name = dramatic_capitalize(sanitize_string(name))
     if self.model.stats.filter(key__iexact=name).count():
         raise ValueError("Name already in use.")
     new_mod = self.model.stats.create(key=name, creator=creator)
     new_stat = self.use(self, new_mod)
     self.stats.append(new_stat)
     self.stats_dict[new_mod.id] = new_stat
     return new_stat
예제 #9
0
 def rename(self, new_name):
     if not new_name:
         raise ValueError("No new name entered!")
     clean_name = sanitize_string(new_name, strip_ansi=True)
     if self.__class__.objects.filter(key__iexact=clean_name).exclude(id=self.id).count():
         raise ValueError("Names must be unique, case insensitive.")
     else:
         if self.key == clean_name:
             return
         self.key = clean_name
         self.save(update_fields=['key'])
예제 #10
0
 def make_board(self, key=None):
     if not key:
         raise ValueError("Board requires a name.")
     new_name = sanitize_string(key, strip_ansi=True)
     try:
         new_num = max([board.order for board in self.boards.all()]) + 1
     except ValueError:
         new_num = 1
     board = self.boards.create(key=new_name, order=new_num)
     board.init_locks()
     return board
예제 #11
0
 def add(self, name=None):
     if not name:
         raise ValueError("No specialty name entered!")
     name = dramatic_capitalize(sanitize_string(name))
     if self.game.specialties.filter(stat_id=self.id, key__iexact=name).count():
         raise ValueError("Specialty name already in use.")
     new_mod = self.game.specialties.create(stat_id=self.id, key=name)
     new_spec = self.specialty(self, new_mod)
     self.specialties.append(new_spec)
     self.specialties_dict[new_mod.id] = new_spec
     return new_spec
예제 #12
0
def character(key, player):
    from athanor.core.config import GLOBAL_SETTINGS
    key = sanitize_string(key, strip_ansi=True)
    typeclass = settings.BASE_CHARACTER_TYPECLASS
    home = GLOBAL_SETTINGS['character_home']
    if key.upper() in SPEECH_FACTORY.upper():
        raise ValueError("That character name is already in use!")
    char = create_object(typeclass=typeclass, key=key, location=home, home=home)
    player.account.bind_character(char)
    SPEECH_FACTORY.update(char)
    return char
예제 #13
0
 def extend(self, name=None):
     if not self.can_extend:
         raise ValueError("Cannot extend %s with new sub-categories." %
                          self.name)
     if not name:
         raise ValueError("No name entered!")
     name = dramatic_capitalize(sanitize_string(name))
     new_mod = self.model.children.create(game=self.game, key=name)
     new_sub = self.sub(self, root=self.root, model=new_mod)
     self.subs.append(new_sub)
     self.subs_dict[new_sub.sub_id] = new_sub
     self.subs_name[name] = new_sub
     return new_sub
예제 #14
0
 def create(self, creator, name=None):
     if not self.can_create:
         raise ValueError("Cannot add entries to %s!" % self.name)
     if not name:
         raise ValueError("No name entered!")
     name = dramatic_capitalize(sanitize_string(name))
     if self.model.entries.filter(key__iexact=name).count():
         raise ValueError("Name is already in use!")
     new_mod = self.model.entries.create(creator=creator, key=name)
     new_stat = self.stat(self, new_mod)
     self.stats.append(new_stat)
     self.stats_dict[new_stat.id] = new_stat
     self.stats_name[name] = new_stat
     return new_stat
예제 #15
0
파일: radio.py 프로젝트: volundmush/athanor
 def switch_title(self, lhs, rhs):
     try:
         slot_name = valid_slot(lhs)
     except ValueError as err:
         self.error(unicode(err))
         return
     slot = self.character.radio.filter(key__istartswith=slot_name).first()
     if not slot:
         self.error("Radio slot not found.")
         return
     if rhs:
         slot.title = sanitize_string(rhs)
         slot.save(update_fields=['title'])
         self.sys_msg("Title changed to: %s" % rhs)
     else:
         slot.title = None
         slot.save(update_fields=['title'])
         self.sys_msg("Title cleared.")
예제 #16
0
 def switch_groups(self):
     penn_groups = cobj('gop').children.all()
     for old_group in penn_groups:
         if not old_group.group:
             old_group.group, created = Group.objects.get_or_create(key=old_group.name)
             old_group.save(update_fields=['group'])
         new_group = old_group.group
         new_group.description = old_group.mushget('DESCRIBE')
         old_ranks = old_group.lattrp('RANK`\d+')
         old_rank_nums = [old_rank.split('`', 1)[1] for old_rank in old_ranks]
         rank_dict = dict()
         for num in old_rank_nums:
             new_rank, created = new_group.ranks.get_or_create(num=int(num))
             rank_name = old_group.mushget('RANK`%s`NAME' % num)
             if rank_name:
                 new_rank.name = sanitize_string(rank_name)
                 new_rank.save(update_fields=['name'])
             rank_dict[int(num)] = new_rank
         old_members = [objmatch(member) for member in old_group.mushget('MEMBERS').split(' ') if objmatch(member)]
         for old_member in old_members:
             if not old_member.obj:
                 continue
             old_num = int(old_member.mushget('D`GROUP`%s`RANK' % old_group.dbref)) or 4
             title = old_member.mushget('D`GROUP`%s`NAME' % old_group.dbref)
             if not title:
                 title = None
             new_member, created = new_group.participants.get_or_create(character=old_member.obj, title=title,
                                                                        rank=rank_dict[old_num])
             for channel in [new_group.ic_channel, new_group.ooc_channel]:
                 if channel:
                     if channel.locks.check(new_member.character, 'listen'):
                         channel.connect(new_member.character)
         new_group.save()
         board_group, created = BoardGroup.objects.get_or_create(main=0, group=new_group)
         for old_board in old_group.contents.all():
             if not old_board.board:
                 old_board.board = board_group.make_board(key=old_board.name)
                 old_board.save(update_fields=['board'])
             new_board = old_board.board
             old_order = int(old_board.mushget('ORDER'))
             new_board.order = old_order
             new_board.save()
             self.convert_board(new_board)
예제 #17
0
파일: radio.py 프로젝트: volundmush/athanor
 def switch_codename(self, lhs, rhs):
     try:
         slot_name = valid_slot(lhs)
     except ValueError as err:
         self.error(unicode(err))
         return
     slot = self.character.radio.filter(key__istartswith=slot_name).first()
     if not slot:
         self.error("Radio slot not found.")
         return
     if rhs:
         if Character.objects.filter_family(db_key__iexact=rhs).count():
             self.error("Cannot set your codename to an existing character's name.")
             return
         slot.codename = sanitize_string(rhs)
         slot.save(update_fields=['codename'])
         self.sys_msg("Codename changed to: %s" % rhs)
     else:
         slot.codename = None
         slot.save(update_fields=['codename'])
         self.sys_msg("Codename cleared.")
예제 #18
0
파일: radio.py 프로젝트: volundmush/athanor
 def switch_color(self, lhs, rhs):
     try:
         slot_name = valid_slot(lhs)
     except ValueError as err:
         self.error(unicode(err))
         return
     slot = self.character.radio.filter(key__istartswith=slot_name).first()
     if not slot:
         self.error("Radio slot not found.")
         return
     if rhs:
         if len(ANSIString('|%s' % rhs)) != 0:
             self.error("That is not a valid color code.")
             return
         slot.color = sanitize_string(rhs)
         slot.save(update_fields=['color'])
         self.sys_msg("Color changed to: %s" % rhs)
     else:
         slot.color = None
         slot.save(update_fields=['color'])
         self.sys_msg("Color cleared.")
예제 #19
0
파일: bbs.py 프로젝트: volundmush/athanor
 def board_post_quickpost(self, lhs=None, rhs=None):
     if not lhs:
         self.error("No board entered.")
         return
     findname, subject = lhs.split('/', 2)
     if not findname:
         self.error("No board entered.")
         return
     if not subject:
         self.error("No subject entered.")
         return
     if not rhs:
         self.error("No post text entered.")
         return
     try:
         board_group = self.board_group
         board = board_group.find_board(find_name=findname.strip(), checker=self.character)
     except ValueError as err:
         self.error(unicode(err))
         return
     board.make_post(stub=self.character.stub, subject=sanitize_string(subject),
                     text=penn_substitutions(rhs.strip()))
예제 #20
0
def clean_string(value):
    return dramatic_capitalize(sanitize_string(value, strip_ansi=True, strip_mxp=True,
                                               strip_newlines=True, strip_indents=True))