Esempio n. 1
0
 async def remove_player(self, player):
     s = Settings.get_for(self.guild)
     if player.id in self.players:
         role = player.guild.get_role(self.role_id)
         await player.remove_roles(role)
         self.players.remove(player.id)
         self.update('players', ids_to_str(self.players))
         if len(self.players) < 1:
             await self.disband(player.guild)
             return (True, s.get_text('disband_empty_room'))
         return (True, None)
     return (False, None)
Esempio n. 2
0
 def pack_data(cls, data):
     packed = {'guild_id': data['guild_id']}
     for (key, default) in cls.defaults.items():
         value = default
         if key in data:
             v = data[key]
             if isinstance(default, bool):
                 value = bool(v)
             elif isinstance(default, list):
                 value = ids_to_str(v)
             else:
                 value = str(v)
         packed[key] = value
     return packed
Esempio n. 3
0
 def pack_data(self):
     data = {}
     for (key, value) in self.props.items():
         s = self.__getattribute__(key)
         if s == None:
             s = value
         elif isinstance(value, list) and isinstance(s, list):
             s = ids_to_str(s)
         elif isinstance(value, int) and not isinstance(s, int):
             s = int(s)
         elif isinstance(value, discord.Color) and isinstance(s, discord.Color):
             s = s.value
         data[key] = s
     return data
Esempio n. 4
0
    async def add_player(self, player):
        s = Settings.get_for(self.guild)
        role = player.guild.get_role(self.role_id)
        channel = player.guild.get_channel(self.channel_id)
        if not channel or not role:
            return (False, s.get_text('retry_error'))
        if player.id in self.players:
            return (False, s.get_text('already_joined'))

        await player.add_roles(role)
        self.players.append(player.id)
        self.update('players', ids_to_str(self.players))
        await channel.edit(topic="({}/{}) {}".format(len(self.players), self.size, self.description))
        return True
Esempio n. 5
0
    def set(self, ctx, field, value):
        result = (True, None)
        parsed_value = value
        if field not in self.defaults.keys():
            return (False, self.get_text('require_flags'))
        default = self.defaults[field]

        if field in ['voice_creation_channel', 'creation_channel']:
            parsed_value = 0
            channels = ctx.guild.voice_channels
            for c in channels:
                if len(value) > 1 and value in c.name or value == str(c.id):
                    parsed_value = c.id
        elif is_number(default):
            try:
                parsed_value = int(value)
            except ValueError:
                parsed_value = -1

            if field in ['size', 'default_size']:
                parsed_value = clamp(parsed_value, 2, 999)
            elif field == 'bitrate':
                parsed_value = clamp(parsed_value, 8, int(ctx.guild.bitrate_limit/1000))
            elif field == 'timeout':
                parsed_value = clamp(parsed_value, -1, 999)

        elif isinstance(default, bool):
            parsed_value = text_to_bool(value)

        elif isinstance(default, list):
            if field in ['role_restriction', 'access_all_rooms_role']:
                roles = []
                for word in re.split('[,\s]+', value):
                    try:
                        r = re.search(r'\d+', word)
                        if r:
                            role_id = int(r.group())
                            roles.append(role_id)
                    except ValueError:
                        result = (False, self.get_text('should_use_mentions'))
                parsed_value = ids_to_str(roles) 
            elif field == 'default_colors':
                colors = []
                for s in re.split('[,\s]+', value):
                    color = get_color(s, return_default=False)
                    if color:
                        colors.append(str(color.value))
                parsed_value = ','.join(colors)
            elif field == 'allowed_host_commands':
                commands = []
                for c in re.split('[,\s]+', value):
                    if c in default and c not in commands:
                        commands.append(c)
                if commands == []:
                    commands = default
                parsed_value = ','.join(commands)
            else:
                messages = []
                for s in re.split('[,]+', value):
                    m = s.strip().replace('__', '{0}')
                    if len(m) > 0:
                        messages.append(m)
                parsed_value = ','.join(messages)

        elif isinstance(default, str):
            if field == 'prefix':
                max_char_length = 5
                if len(value) > max_char_length:
                    result = (False, self.get_text('prefix_too_long').format(max_char_length))
            elif field == 'language':
                parsed_value = value[:2].lower()
                if parsed_value not in langs:
                    result = (False, self.get_text('language_not_exist').format(parsed_value))
            elif field == 'category_name':
                parsed_value = value[:99]

        (success, message) = result
        if (success):
            is_string = isinstance(parsed_value, str)
            text_value = parsed_value if not is_string or (is_string and len(parsed_value) > 0) else 'None'
            self.update(field, parsed_value)
            result = (True, self.get_text('set_value').format(field, text_value))
        return result