aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pydis_site/apps/api/migrations/0079_new_filter_schema.py12
-rw-r--r--pydis_site/apps/api/models/bot/filters.py32
-rw-r--r--pydis_site/apps/api/tests/test_filters.py11
3 files changed, 6 insertions, 49 deletions
diff --git a/pydis_site/apps/api/migrations/0079_new_filter_schema.py b/pydis_site/apps/api/migrations/0079_new_filter_schema.py
index b67740d2..053f9782 100644
--- a/pydis_site/apps/api/migrations/0079_new_filter_schema.py
+++ b/pydis_site/apps/api/migrations/0079_new_filter_schema.py
@@ -97,11 +97,11 @@ class Migration(migrations.Migration):
('content', models.CharField(help_text='The definition of this filter.', max_length=100)),
('description', models.CharField(help_text='Why this filter has been added.', max_length=200, null=True)),
('additional_field', django.contrib.postgres.fields.jsonb.JSONField(help_text='Implementation specific field.', null=True)),
- ('guild_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_ping_field], null=True)),
+ ('guild_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers.', size=None, null=True)),
('filter_dm', models.BooleanField(help_text='Whether DMs should be filtered.', null=True)),
- ('dm_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers on a DM.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_ping_field], null=True)),
+ ('dm_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers on a DM.', size=None, null=True)),
('delete_messages', models.BooleanField(help_text='Whether this filter should delete messages triggering it.', null=True)),
- ('bypass_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Roles and users who can bypass this filter.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_bypass_roles_field], null=True)),
+ ('bypass_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Roles and users who can bypass this filter.', size=None, null=True)),
('enabled', models.BooleanField(help_text='Whether this filter is currently enabled.', null=True)),
('dm_content', models.CharField(help_text='The DM to send to a user triggering this filter.', max_length=1000, null=True)),
('dm_embed', models.CharField(help_text='The content of the DM embed', max_length=2000, null=True)),
@@ -120,11 +120,11 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(help_text='The unique name of this list.', max_length=50)),
('list_type', models.IntegerField(choices=[(1, 'Allow'), (0, 'Deny')], help_text='Whether this list is an allowlist or denylist')),
- ('guild_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_ping_field])),
+ ('guild_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers.', size=None)),
('filter_dm', models.BooleanField(help_text='Whether DMs should be filtered.')),
- ('dm_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers on a DM.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_ping_field])),
+ ('dm_pings', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Who to ping when this filter triggers on a DM.', size=None)),
('delete_messages', models.BooleanField(help_text='Whether this filter should delete messages triggering it.')),
- ('bypass_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Roles and users who can bypass this filter.', size=None, validators=[pydis_site.apps.api.models.bot.filters.validate_bypass_roles_field])),
+ ('bypass_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Roles and users who can bypass this filter.', size=None)),
('enabled', models.BooleanField(help_text='Whether this filter is currently enabled.')),
('dm_content', models.CharField(help_text='The DM to send to a user triggering this filter.', max_length=1000, null=True)),
('dm_embed', models.CharField(help_text='The content of the DM embed', max_length=2000, null=True)),
diff --git a/pydis_site/apps/api/models/bot/filters.py b/pydis_site/apps/api/models/bot/filters.py
index 4dbf1875..13b332d2 100644
--- a/pydis_site/apps/api/models/bot/filters.py
+++ b/pydis_site/apps/api/models/bot/filters.py
@@ -16,32 +16,6 @@ class FilterListType(models.IntegerChoices):
DENY = 0
-# Valid special values in ping related fields
-VALID_PINGS = ("everyone", "here", "moderators", "onduty", "admins")
-VALID_BYPASS_ROLES = ("staff",)
-
-
-def validate_ping_field(value_list: List[str]) -> None:
- """Validate that the values are either a special value or a UID."""
- for value in value_list:
- # Check if it is a special value
- if value in VALID_PINGS:
- continue
- # Check if it is a UID
- if value.isnumeric():
- continue
-
- raise ValidationError(f"{value!r} isn't a valid ping type.")
-
-
-def validate_bypass_roles_field(value_list: List[str]) -> None:
- """Validate that the vclues are either a special value or a Role ID."""
- for value in value_list:
- if value.isnumeric() or value in VALID_BYPASS_ROLES:
- continue
- raise ValidationError(f"{value!r} isn't a valid (bypass) role.")
-
-
class FilterSettingsMixin(models.Model):
"""Mixin for common settings of a filters and filter lists."""
@@ -86,14 +60,12 @@ class FilterList(FilterSettingsMixin):
)
guild_pings = ArrayField(
models.CharField(max_length=20),
- validators=(validate_ping_field,),
help_text="Who to ping when this filter triggers.",
null=False
)
filter_dm = models.BooleanField(help_text="Whether DMs should be filtered.", null=False)
dm_pings = ArrayField(
models.CharField(max_length=20),
- validators=(validate_ping_field,),
help_text="Who to ping when this filter triggers on a DM.",
null=False
)
@@ -104,7 +76,6 @@ class FilterList(FilterSettingsMixin):
bypass_roles = ArrayField(
models.CharField(max_length=100),
help_text="Roles and users who can bypass this filter.",
- validators=(validate_bypass_roles_field,),
null=False
)
enabled = models.BooleanField(
@@ -149,14 +120,12 @@ class Filter(FilterSettingsMixin):
)
guild_pings = ArrayField(
models.CharField(max_length=20),
- validators=(validate_ping_field,),
help_text="Who to ping when this filter triggers.",
null=True
)
filter_dm = models.BooleanField(help_text="Whether DMs should be filtered.", null=True)
dm_pings = ArrayField(
models.CharField(max_length=20),
- validators=(validate_ping_field,),
help_text="Who to ping when this filter triggers on a DM.",
null=True
)
@@ -167,7 +136,6 @@ class Filter(FilterSettingsMixin):
bypass_roles = ArrayField(
models.CharField(max_length=100),
help_text="Roles and users who can bypass this filter.",
- validators=(validate_bypass_roles_field,),
null=True
)
enabled = models.BooleanField(
diff --git a/pydis_site/apps/api/tests/test_filters.py b/pydis_site/apps/api/tests/test_filters.py
index f694053d..5f40c6f9 100644
--- a/pydis_site/apps/api/tests/test_filters.py
+++ b/pydis_site/apps/api/tests/test_filters.py
@@ -296,14 +296,3 @@ class GenericFilterTest(APISubdomainTestCase):
response = self.client.delete(f"{sequence.url()}/42")
self.assertEqual(response.status_code, 404)
-
- def test_reject_invalid_ping(self) -> None:
- url = reverse('bot:filteroverride-list', host='api')
- data = {
- "ping_type": ["invalid"]
- }
-
- response = self.client.post(url, data=data)
-
- self.assertEqual(response.status_code, 400)
- self.assertDictEqual(response.json(), {'ping_type': ["'invalid' isn't a valid ping type."]})