aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/models
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site/apps/api/models')
-rw-r--r--pydis_site/apps/api/models/bot/filters.py44
1 files changed, 42 insertions, 2 deletions
diff --git a/pydis_site/apps/api/models/bot/filters.py b/pydis_site/apps/api/models/bot/filters.py
index ae877685..92251ee4 100644
--- a/pydis_site/apps/api/models/bot/filters.py
+++ b/pydis_site/apps/api/models/bot/filters.py
@@ -18,6 +18,7 @@ class FilterListType(models.IntegerChoices):
# 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:
@@ -33,6 +34,14 @@ def validate_ping_field(value_list: List[str]) -> None:
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."""
@@ -88,14 +97,30 @@ class FilterList(FilterSettingsMixin):
null=False
)
bypass_roles = ArrayField(
- models.BigIntegerField(),
+ 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(
help_text="Whether this filter is currently enabled.",
null=False
)
+ send_alert = models.BooleanField(
+ help_text="Whether alert should be sent.",
+ null=False,
+ default=True
+ )
+ server_message_text = models.CharField(
+ max_length=100,
+ help_text="The message to send on the server",
+ null=True
+ )
+ server_message_embed = models.CharField(
+ max_length=100,
+ help_text="The content of the server message embed",
+ null=True
+ )
# Where a filter should apply.
#
# The resolution is done in the following order:
@@ -145,14 +170,29 @@ class Filter(FilterSettingsMixin):
null=True
)
bypass_roles = ArrayField(
- models.BigIntegerField(),
+ 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(
help_text="Whether this filter is currently enabled.",
null=True
)
+ send_alert = models.BooleanField(
+ help_text="Whether alert should be sent.",
+ null=True
+ )
+ server_message_text = models.CharField(
+ max_length=100,
+ help_text="The message to send on the server",
+ null=True
+ )
+ server_message_embed = models.CharField(
+ max_length=100,
+ help_text="The content of the server message embed",
+ null=True
+ )
# Check FilterList model for information about these properties.
enabled_channels = ArrayField(models.IntegerField(), null=True)