Ejemplo n.º 1
0
class ChannelConfig(SlottedModel):
    # If specified, the only channels to allow stars from
    sources = ListField(ChannelField, default=[])

    # Channels to ignore
    ignored_channels = ListField(ChannelField, default=[])

    # Delete the star when the message is deleted
    clear_on_delete = Field(bool, default=True)

    # Min number of stars to post on the board
    min_stars = Field(int, default=1)
    min_stars_pin = Field(int, default=15)

    # The number which represents the "max" star level
    star_color_max = Field(int, default=15)

    # Prevent users from starring their own posts
    prevent_self_star = Field(bool, default=False)

    # Max age for starred messages
    max_age = Field(int, default=32)

    def get_color(self, count):
        ratio = min(count / float(self.star_color_max), 1.0)

        return ((255 << 16) + (int((194 * ratio) + (253 * (1 - ratio))) << 8) +
                int((12 * ratio) + (247 * (1 - ratio))))
Ejemplo n.º 2
0
class CensorSubConfig(SlottedModel):
    filter_zalgo = Field(bool, default=True)

    filter_invites = Field(bool, default=True)
    invites_guild_whitelist = ListField(snowflake, default=[])
    invites_whitelist = ListField(lower, default=[])
    invites_blacklist = ListField(lower, default=[])

    filter_domains = Field(bool, default=True)
    domains_whitelist = ListField(lower, default=[])
    domains_blacklist = ListField(lower, default=[])

    blocked_words = ListField(lower, default=[])
    blocked_tokens = ListField(lower, default=[])
    blocked_regex = ListField(lower, default=[])
    
    filter_level = Field(int, default=1000)
    included_channels = ListField(snowflake, default=[])
    excluded_channels = ListField(snowflake, default=[])
    
    always_ban = Field(bool, default=False)
    filter_zero = Field(bool, default=False)

    @cached_property
    def blocked_re(self):
        return re.compile(u'({})'.format(u'|'.join(
            map(re.escape, self.blocked_tokens) +
            map(lambda k: u'\\b{}\\b'.format(re.escape(k)), self.blocked_words) +
            self.blocked_regex
        )), re.I | re.M | re.S)
Ejemplo n.º 3
0
class CensorSubConfig(SlottedModel):
    filter_zalgo = Field(bool, default=True)

    filter_invites = Field(bool, default=True)
    invites_guild_whitelist = ListField(snowflake, default=[])
    invites_whitelist = ListField(lower, default=[])
    invites_blacklist = ListField(lower, default=[])

    filter_domains = Field(bool, default=True)
    domains_whitelist = ListField(lower, default=[])
    domains_blacklist = ListField(lower, default=[])

    blocked_words = ListField(lower, default=[])
    blocked_tokens = ListField(lower, default=[])

    blocked_nicknames = ListField(lower, default=[])
    blocked_nickname_tokens = ListField(lower, default=[])
    blocked_nickname_rename = Field(str, default='')

    @cached_property
    def blocked_re(self):
        return re.compile(
            u'({})'.format(u'|'.join(
                map(re.escape, self.blocked_tokens) +
                map(lambda k: u'\\b{}\\b'.format(re.escape(k)),
                    self.blocked_words))), re.I)
Ejemplo n.º 4
0
class PersistConfig(SlottedModel):
    roles = Field(bool, default=False)
    nickname = Field(bool, default=False)
    voice = Field(bool, default=False)

    role_ids = ListField(snowflake, default=[])
    all_roles = Field(bool, default=False)
Ejemplo n.º 5
0
class ModLogConfig(PluginConfig):
    resolved = Field(bool, default=False, private=True)

    ignored_users = ListField(snowflake)
    ignored_channels = ListField(snowflake)
    custom = DictField(str, CustomFormat)

    channels = DictField(ChannelField, ChannelConfig)
    new_member_threshold = Field(int, default=(15 * 60))

    _custom = DictField(dict, private=True)
    _channels = DictField(ChannelConfig, private=True)

    @cached_property
    def subscribed(self):
        return reduce(operator.or_, (i.subscribed for i in self.channels.values())) if self.channels else set()
Ejemplo n.º 6
0
class CensorSubConfig(SlottedModel):
    filter_zalgo = Field(bool, default=True)

    filter_invites = Field(bool, default=True)
    invites_guild_whitelist = ListField(snowflake, default=[])
    invites_whitelist = ListField(lower, default=[])
    invites_blacklist = ListField(lower, default=[])

    filter_domains = Field(bool, default=True)
    domains_whitelist = ListField(lower, default=[])
    domains_blacklist = ListField(lower, default=[])

    blocked_words = ListField(lower, default=[])
    blocked_tokens = ListField(lower, default=[])
    unidecode_tokens = Field(bool, default=False)

    channel = Field(snowflake, default=None)
    bypass_channel = Field(snowflake, default=None)

    @cached_property
    def blocked_re(self):
        return re.compile('({})'.format('|'.join(
            list(map(re.escape, self.blocked_tokens)) +
            list(map(lambda k: '\\b{}\\b'.format(re.escape(k)), self.blocked_words))
        )), re.I)
Ejemplo n.º 7
0
class ChannelConfig(SlottedModel):
    compact = Field(bool, default=True)
    include = ListField(Actions)
    exclude = ListField(Actions)
    rich = ListField(Actions)

    timestamps = Field(bool, default=False)
    timezone = Field(str, default='US/Eastern')

    @cached_property
    def tz(self):
        return pytz.timezone(self.timezone)

    @cached_property
    def subscribed(self):
        include = set(self.include if self.include else Actions.attrs)
        exclude = set(self.exclude if self.exclude else [])
        return include - exclude
Ejemplo n.º 8
0
class AdminConfig(PluginConfig):
    confirm_actions = Field(bool, default=True)

    # Role saving information
    persist = Field(PersistConfig, default=None)

    # Aliases to roles, can be used in place of IDs in commands
    role_aliases = DictField(unicode, snowflake)

    # Group roles can be joined/left by any user
    group_roles = DictField(lambda value: unicode(value).lower(), snowflake)
    group_confirm_reactions = Field(bool, default=False)

    # Locked roles cannot be changed unless they are unlocked w/ command
    locked_roles = ListField(snowflake)
Ejemplo n.º 9
0
class CensorSubConfig(SlottedModel):
    filter_zalgo = Field(bool, default=True)

    filter_invites = Field(bool, default=True)
    invite_filter_ignored_channels = ListField(lower, default=[])
    invites_guild_whitelist = ListField(snowflake, default=[])
    invites_whitelist = ListField(lower, default=[])
    invites_blacklist = ListField(lower, default=[])

    filter_domains = Field(bool, default=True)
    domain_filter_ignored_channels = ListField(lower, default=[])
    domains_whitelist = ListField(lower, default=[])
    domains_blacklist = ListField(lower, default=[])

    blocked_words = ListField(lower, default=[])
    blocked_tokens = ListField(lower, default=[])

    @cached_property
    def blocked_re(self):
        return re.compile('({})'.format('|'.join(
            list(map(re.escape, self.blocked_tokens)) +
            ['\\b{}\\b'.format(re.escape(k)) for k in self.blocked_words]
        )), re.I)
Ejemplo n.º 10
0
class SpamConfig(PluginConfig):
    roles = DictField(str, SubConfig)
    levels = DictField(int, SubConfig)
    ignored_channels = ListField(snowflake, default=[])

    def compute_relevant_rules(self, member, level):
        if self.roles:
            if '*' in self.roles:
                yield self.roles['*']

            for rid in member.roles:
                if rid in self.roles:
                    yield self.roles[rid]
                rname = member.guild.roles.get(rid)
                if rname and rname.name in self.roles:
                    yield self.roles[rname.name]

        if self.levels:
            for lvl in self.levels.keys():
                if level <= lvl:
                    yield self.levels[lvl]
Ejemplo n.º 11
0
class CensorConfig(PluginConfig):
    levels = DictField(int, CensorSubConfig)
    channels = DictField(ChannelField, CensorSubConfig)
    ignored_users = ListField(snowflake, default=[])
Ejemplo n.º 12
0
class TwitchConfig(PluginConfig):
    streams = ListField(str)
    config = DictField(str, StreamConfig)
Ejemplo n.º 13
0
class CensorConfig(PluginConfig):
    levels = DictField(int, CensorSubConfig)
    filters = ListField(CensorSubConfig, default=[])