aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api
diff options
context:
space:
mode:
authorGravatar mbaruh <[email protected]>2022-10-08 01:18:59 +0300
committerGravatar mbaruh <[email protected]>2022-10-08 01:18:59 +0300
commite5d655a81f71c4b5bfb15d567bc11f88023e5879 (patch)
tree26be1f9c5c26df2bf29289ccd757e1202734a5e3 /pydis_site/apps/api
parentProperly add dm_embed to serializers (diff)
Add infraction channel setting
Diffstat (limited to 'pydis_site/apps/api')
-rw-r--r--pydis_site/apps/api/migrations/0085_new_filter_schema.py5
-rw-r--r--pydis_site/apps/api/migrations/0086_unique_constraint_filters.py1
-rw-r--r--pydis_site/apps/api/models/bot/filters.py11
-rw-r--r--pydis_site/apps/api/serializers.py6
4 files changed, 22 insertions, 1 deletions
diff --git a/pydis_site/apps/api/migrations/0085_new_filter_schema.py b/pydis_site/apps/api/migrations/0085_new_filter_schema.py
index d16c26ac..2e721df4 100644
--- a/pydis_site/apps/api/migrations/0085_new_filter_schema.py
+++ b/pydis_site/apps/api/migrations/0085_new_filter_schema.py
@@ -3,6 +3,7 @@ from datetime import timedelta
import django.contrib.postgres.fields
from django.apps.registry import Apps
+from django.core.validators import MinValueValidator
from django.db import migrations, models
import django.db.models.deletion
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
@@ -48,6 +49,7 @@ def forward(apps: Apps, schema_editor: BaseDatabaseSchemaEditor) -> None:
infraction_type="",
infraction_reason="",
infraction_duration=timedelta(seconds=0),
+ infraction_channel=None,
disabled_channels=[],
disabled_categories=(["CODE JAM"] if name in ("FILE_FORMAT", "GUILD_INVITE") else []),
enabled_channels=[],
@@ -72,6 +74,7 @@ def forward(apps: Apps, schema_editor: BaseDatabaseSchemaEditor) -> None:
infraction_type=None,
infraction_reason=None,
infraction_duration=None,
+ infraction_channel=None,
disabled_channels=None,
disabled_categories=None,
enabled_channels=None,
@@ -110,6 +113,7 @@ class Migration(migrations.Migration):
('infraction_type', models.CharField(choices=[('NOTE', 'Note'), ('WARNING', 'Warning'), ('WATCH', 'Watch'), ('MUTE', 'Mute'), ('KICK', 'Kick'), ('BAN', 'Ban'), ('SUPERSTAR', 'Superstar'), ('VOICE_BAN', 'Voice Ban'), ('VOICE_MUTE', 'Voice Mute')], help_text='The infraction to apply to this user.', max_length=10, null=True)),
('infraction_reason', models.CharField(help_text='The reason to give for the infraction.', max_length=1000, null=True)),
('infraction_duration', models.DurationField(help_text='The duration of the infraction. Null if permanent.', null=True)),
+ ('infraction_channel', models.BigIntegerField(validators=(MinValueValidator(limit_value=0, message="Channel IDs cannot be negative."),), help_text="Channel in which to send the infraction.", null=True)),
('disabled_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Channels in which to not run the filter.", null=True, size=None)),
('disabled_categories', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Categories in which to not run the filter.", null=True, size=None)),
('enabled_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Channels in which to run the filter even if it's disabled in the category.", null=True, size=None)),
@@ -134,6 +138,7 @@ class Migration(migrations.Migration):
('infraction_type', models.CharField(choices=[('NOTE', 'Note'), ('WARNING', 'Warning'), ('WATCH', 'Watch'), ('MUTE', 'Mute'), ('KICK', 'Kick'), ('BAN', 'Ban'), ('SUPERSTAR', 'Superstar'), ('VOICE_BAN', 'Voice Ban'), ('VOICE_MUTE', 'Voice Mute')], help_text='The infraction to apply to this user.', max_length=10, null=True)),
('infraction_reason', models.CharField(help_text='The reason to give for the infraction.', max_length=1000, null=True)),
('infraction_duration', models.DurationField(help_text='The duration of the infraction. Null if permanent.', null=True)),
+ ('infraction_channel', models.BigIntegerField(validators=(MinValueValidator(limit_value=0, message="Channel IDs cannot be negative."),), help_text="Channel in which to send the infraction.", null=True)),
('disabled_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Channels in which to not run the filter.", size=None)),
('disabled_categories', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Categories in which to not run the filter.", size=None)),
('enabled_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Channels in which to run the filter even if it's disabled in the category.", size=None)),
diff --git a/pydis_site/apps/api/migrations/0086_unique_constraint_filters.py b/pydis_site/apps/api/migrations/0086_unique_constraint_filters.py
index 8072ed2e..e7816e19 100644
--- a/pydis_site/apps/api/migrations/0086_unique_constraint_filters.py
+++ b/pydis_site/apps/api/migrations/0086_unique_constraint_filters.py
@@ -18,6 +18,7 @@ class Migration(migrations.Migration):
'infraction_type',
'infraction_reason',
'infraction_duration',
+ 'infraction_channel',
'content',
'additional_field',
'filter_list',
diff --git a/pydis_site/apps/api/models/bot/filters.py b/pydis_site/apps/api/models/bot/filters.py
index 95a10e42..22482870 100644
--- a/pydis_site/apps/api/models/bot/filters.py
+++ b/pydis_site/apps/api/models/bot/filters.py
@@ -1,4 +1,5 @@
from django.contrib.postgres.fields import ArrayField
+from django.core.validators import MinValueValidator
from django.db import models
from django.db.models import UniqueConstraint
@@ -41,6 +42,16 @@ class FilterSettingsMixin(models.Model):
null=True,
help_text="The duration of the infraction. Null if permanent."
)
+ infraction_channel = models.BigIntegerField(
+ validators=(
+ MinValueValidator(
+ limit_value=0,
+ message="Channel IDs cannot be negative."
+ ),
+ ),
+ help_text="Channel in which to send the infraction.",
+ null=True
+ )
class Meta:
"""Metaclass for settings mixin."""
diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py
index 0dcbf2ee..83471ca2 100644
--- a/pydis_site/apps/api/serializers.py
+++ b/pydis_site/apps/api/serializers.py
@@ -148,6 +148,7 @@ ALWAYS_OPTIONAL_SETTINGS = (
'infraction_type',
'infraction_reason',
'infraction_duration',
+ 'infraction_channel',
)
REQUIRED_FOR_FILTER_LIST_SETTINGS = (
@@ -178,6 +179,7 @@ INFRACTION_AND_NOTIFICATION_FIELDS = (
"infraction_type",
"infraction_reason",
"infraction_duration",
+ "infraction_channel",
"dm_content",
"dm_embed"
)
@@ -230,6 +232,7 @@ class FilterSerializer(ModelSerializer):
'infraction_reason': {'allow_blank': True, 'allow_null': True, 'required': False},
'enabled_channels': {'allow_empty': True, 'allow_null': True, 'required': False},
'disabled_channels': {'allow_empty': True, 'allow_null': True, 'required': False},
+ 'enabled_categories': {'allow_empty': True, 'allow_null': True, 'required': False},
'disabled_categories': {'allow_empty': True, 'allow_null': True, 'required': False},
}
@@ -305,6 +308,7 @@ class FilterListSerializer(ModelSerializer):
'infraction_reason': {'allow_blank': True, 'allow_null': True, 'required': False},
'enabled_channels': {'allow_empty': True},
'disabled_channels': {'allow_empty': True},
+ 'enabled_categories': {'allow_empty': True},
'disabled_categories': {'allow_empty': True},
}
@@ -314,7 +318,7 @@ class FilterListSerializer(ModelSerializer):
queryset=FilterList.objects.all(),
fields=('name', 'list_type'),
message=(
- "A filterlist with the same name and type already exist."
+ "A filterlist with the same name and type already exists."
)
),
]