diff --git a/files/helpers/alerts.py b/files/helpers/alerts.py index cfd678f1b..e62c00dd2 100644 --- a/files/helpers/alerts.py +++ b/files/helpers/alerts.py @@ -8,7 +8,7 @@ import time from sqlalchemy.sql import text from sqlalchemy.orm import load_only -from files.classes import Comment, Notification, PushSubscription, Group +from files.classes import Comment, Notification, PushSubscription, Group, Mod from .config.const import * from .regex import * @@ -183,6 +183,11 @@ def NOTIFY_USERS(text, v, oldtext=None, ghost=False, obj=None, followers_ping=Tr elif i.group(1) == 'jannies': group = None member_ids = set(x[0] for x in g.db.query(User.id).filter(User.admin_level > 0, User.id != AEVANN_ID)) + elif i.group(1) == 'holejannies': + if not get_obj_hole(obj): + abort(403, "!holejannies can only be used inside holes!") + group = None + member_ids = set(x[0] for x in g.db.query(Mod.user_id).filter_by(hole=obj.hole)) elif i.group(1) == 'followers': if not followers_ping: abort(403, f"You can't use !followers in posts!") diff --git a/files/helpers/get.py b/files/helpers/get.py index 2ea70ab47..0436b9bf4 100644 --- a/files/helpers/get.py +++ b/files/helpers/get.py @@ -359,3 +359,11 @@ def get_error(): def get_page(): try: return max(int(request.values.get("page", 1)), 1) except: return 1 + +def get_obj_hole(obj): + if isinstance(obj, Comment): + if obj.parent_post: + obj.hole = g.db.query(Post.hole).filter_by(id=obj.parent_post).one()[0] + else: + obj.hole = None + return obj.hole diff --git a/files/helpers/sanitize.py b/files/helpers/sanitize.py index 06f4ea610..f9584a4c2 100644 --- a/files/helpers/sanitize.py +++ b/files/helpers/sanitize.py @@ -442,6 +442,8 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=False, count_emojis return f'!{name}' elif name == 'jannies': return f'!{name}' + elif name == 'holejannies' and get_obj_hole(obj): + return f'!{name}' elif name == 'commenters' and commenters_ping_post_id: return f'!{name}' elif name == 'followers': diff --git a/files/routes/groups.py b/files/routes/groups.py index c6c6fab7c..fc41eac33 100644 --- a/files/routes/groups.py +++ b/files/routes/groups.py @@ -32,7 +32,7 @@ def create_group(v): if not hole_group_name_regex.fullmatch(name): abort(400, "Name does not match the required format!") - if name in {'everyone', 'jannies', 'followers', 'commenters'} or g.db.get(Group, name): + if name in {'everyone', 'jannies', 'holejannies', 'followers', 'commenters'} or g.db.get(Group, name): abort(400, "This group already exists!") if not v.charge_account('combined', GROUP_COST)[0]: diff --git a/files/templates/formatting.html b/files/templates/formatting.html index 4cb4bc167..89a7b8d02 100644 --- a/files/templates/formatting.html +++ b/files/templates/formatting.html @@ -309,6 +309,17 @@ !jannies !jannies + {% if SITE_NAME != 'WPD' %} + + Hole Mods Mention
+ + * Mentions all mods of the hole it's used inside. + + + !holejannies + !holejannies + + {% endif %} Everyone Mention