Beispiel #1
0
class CustomFormat(SlottedModel):
    emoji = Field(str, default=None)
    format = Field(str, default=None)
Beispiel #2
0
class CheckConfig(SlottedModel):
    count = Field(int)
    interval = Field(int)
    meta = Field(dict, default=None)
    punishment = Field(PunishmentType, default=None)
    punishment_duration = Field(int, default=None)
Beispiel #3
0
class SubConfig(SlottedModel):
    max_messages = Field(CheckConfig, default=None)
    max_mentions = Field(CheckConfig, default=None)
    max_links = Field(CheckConfig, default=None)
    max_emojis = Field(CheckConfig, default=None)
    max_newlines = Field(CheckConfig, default=None)
    max_attachments = Field(CheckConfig, default=None)

    max_duplicates = Field(CheckConfig, default=None)

    punishment = Field(PunishmentType, default=PunishmentType.NONE)
    punishment_duration = Field(int, default=300)

    clean = Field(bool, default=False)
    clean_count = Field(int, default=100)
    clean_duration = Field(int, default=900)

    _cached_max_messages_bucket = Field(str, private=True)
    _cached_max_mentions_bucket = Field(str, private=True)
    _cached_max_links_bucket = Field(str, private=True)
    _cached_max_emojis_bucket = Field(str, private=True)
    _cached_max_newlines_bucket = Field(str, private=True)
    _cached_max_attachments_bucket = Field(str, private=True)

    def validate(self):
        if self.clean_duration < 0 or self.clean_duration > 86400:
            raise Exception(
                'Invalid value for `clean_duration` must be between 0 and 86400'
            )

        if self.clean_count < 0 or self.clean_count > 1000:
            raise Exception(
                'Invaliud value for `clean_count` must be between 0 and 1000')

    def get_bucket(self, attr, guild_id):
        obj = getattr(self, attr)
        if not obj or not obj.count or not obj.interval:
            return (None, None)

        bucket = getattr(self, '_cached_{}_bucket'.format(attr), None)
        if not bucket:
            bucket = LeakyBucket(rdb,
                                 'spam:{}:{}:{}'.format(attr, guild_id, '{}'),
                                 obj.count, obj.interval * 1000)
            setattr(self, '_cached_{}_bucket'.format(attr), bucket)

        return obj, bucket
Beispiel #4
0
class GuildConfig(SlottedModel):
    nickname = Field(text)
    commands = Field(CommandsConfig, default=None, create=False)
    levels = DictField(int, int)
    plugins = Field(PluginsConfig.parse)
Beispiel #5
0
class SubRedditConfig(SlottedModel):
    channel = Field(ChannelField)
    mode = Field(FormatMode, default=FormatMode.PRETTY)
    nsfw = Field(bool, default=False)
    text_length = Field(int, default=256)
    include_stats = Field(bool, default=False)
Beispiel #6
0
class MusicConfig(PluginConfig):
    max_song_length = Field(int, default=7200)
Beispiel #7
0
class JoinPluginConfig(PluginConfig):
    join_role = Field(snowflake, default=None)
    security = Field(bool, default=False)
    advanced = Field(JoinPluginConfigAdvanced)
    pass
Beispiel #8
0
class NotifyConfig(SlottedModel):
    mutes = Field(bool, default=False)
    warns = Field(bool, default=False)
    kicks = Field(bool, default=False)
    bans = Field(bool, default=False)
Beispiel #9
0
class LimitTempConfig(SlottedModel):
    duration_limit_level = Field(int, default=0)
    maximum_limited_duration = Field(str, default='1d')
Beispiel #10
0
class MemesConfig(PluginConfig):
    #auto-reply to meesux
    hate_meesux = Field(bool, default=False)
Beispiel #11
0
class StreamConfig(SlottedModel):
    channel = Field(ChannelField)

    notification_type = Field(NotificationType)
    notification_target = Field(snowflake)
Beispiel #12
0
class CheckConfig(SlottedModel):
    count = Field(int)
    interval = Field(int)
    meta = Field(dict, default=None)
Beispiel #13
0
class LevelPluginConfig(PluginConfig):
    actions = Field(LevelUpActionConfig)

    rewards = DictField(int, snowflake)
    pass
Beispiel #14
0
class LevelUpActionConfig(SlottedModel):
    message = Field(bool, default=False)
    chat = Field(bool, default=True)
Beispiel #15
0
 def deco(plugin_cls):
     name = plugin_cls.__name__.replace('Plugin', '').lower()
     PluginsConfig._fields[name] = Field(config_cls, default=Unset)
     PluginsConfig._fields[name].name = name
     # PluginsConfig._fields[name].default = None
     return plugin_cls
Beispiel #16
0
class SubConfig(SlottedModel):
    max_messages = Field(CheckConfig, default=None)
    max_mentions = Field(CheckConfig, default=None)
    max_links = Field(CheckConfig, default=None)
    max_emojis = Field(CheckConfig, default=None)
    max_newlines = Field(CheckConfig, default=None)
    max_attachments = Field(CheckConfig, default=None)

    max_duplicates = Field(CheckConfig, default=None)

    punishment = Field(PunishmentType, default=PunishmentType.NONE)
    punishment_duration = Field(int, default=300)

    clean = Field(bool, default=False)
    clean_count = Field(int, default=100)

    _cached_max_messages_bucket = Field(str, private=True)
    _cached_max_mentions_bucket = Field(str, private=True)
    _cached_max_links_bucket = Field(str, private=True)
    _cached_max_emojis_bucket = Field(str, private=True)
    _cached_max_newlines_bucket = Field(str, private=True)
    _cached_max_attachments_bucket = Field(str, private=True)

    def get_bucket(self, attr, guild_id):
        obj = getattr(self, attr)
        if not obj or not obj.count or not obj.interval:
            return (None, None)

        bucket = getattr(self, '_cached_{}_bucket'.format(attr), None)
        if not bucket:
            bucket = LeakyBucket(rdb,
                                 'spam:{}:{}:{}'.format(attr, guild_id, '{}'),
                                 obj.count, obj.interval * 1000)
            setattr(self, '_cached_{}_bucket'.format(attr), bucket)

        return obj, bucket
Beispiel #17
0
class TagsConfig(PluginConfig):
    max_tag_length = Field(int)
    min_level_remove_others = Field(int, default=int(CommandLevels.MOD))
Beispiel #18
0
class CommandOverrideConfig(SlottedModel):
    disabled = Field(bool, default=False)
    level = Field(int)
Beispiel #19
0
class PersistConfig(SlottedModel):
    roles = Field(bool, default=False)
    nickname = Field(bool, default=False)
    voice = Field(bool, default=False)

    role_ids = ListField(snowflake, default=[])
Beispiel #20
0
class JoinPluginConfigAdvanced(SlottedModel):
    low = Field(int, default=0)
    medium = Field(int, default=5)
    high = Field(int, default=10)
    highest = Field(int, default=30, alias='extreme'
                    )  # Disco calls it extreme, the client calls it Highest.