diff --git a/files/helpers/alerts.py b/files/helpers/alerts.py index b0f2f7252..67d7a64be 100644 --- a/files/helpers/alerts.py +++ b/files/helpers/alerts.py @@ -132,24 +132,28 @@ def NOTIFY_USERS(text, v): if word in text and id not in notify_users: notify_users.add(id) - billed = set() if FEATURES['PING_GROUPS']: + billed = set() for i in group_mention_regex.finditer(text): - group = g.db.get(Group, i.group(2)) - if group: - if v.id not in group.member_ids: - billed.update(group.member_ids) - notify_users.update(group.member_ids) + if i.group(2) == 'everyone': + everyone = [x[0] for x in g.db.query(User.id).all()] + billed.update(everyone) + notify_users.update(everyone) + else: + group = g.db.get(Group, i.group(2)) + if group: + if v.id not in group.member_ids: + billed.update(group.member_ids) + notify_users.update(group.member_ids) if billed: cost = len(billed) * 5 if cost > v.coins: abort(403, f"You need {cost} coins for this!") + g.db.query(User).filter(User.id.in_(billed)).update({ User.coins: User.coins + 5 }) v.coins -= cost g.db.add(v) - g.db.query(User).filter(User.id.in_(billed)).update({ User.coins: User.coins + 5 }) - names = set(m.group(2) for m in mention_regex.finditer(text)) for user in get_users(names, graceful=True): diff --git a/files/helpers/regex.py b/files/helpers/regex.py index 9595264f4..be3322a60 100644 --- a/files/helpers/regex.py +++ b/files/helpers/regex.py @@ -11,6 +11,8 @@ mention_regex = re.compile('(^|\s|>)@([a-zA-Z0-9_\-]{1,30})(?![^<]*<\/(code|pre| group_mention_regex = re.compile('(^|\s|>)!([a-z0-9_\-]{3,25})(?![^<]*<\/(code|pre|a)>)', flags=re.A) +everyone_regex = re.compile('(^|\s|>)!(everyone)(?![^<]*<\/(code|pre|a)>)', flags=re.A) + valid_password_regex = re.compile("^.{8,100}$", flags=re.A) marseyaward_body_regex = re.compile(">[^<\s+]|[^>\s+]<", flags=re.A) diff --git a/files/helpers/sanitize.py b/files/helpers/sanitize.py index 504af00eb..7061d5517 100644 --- a/files/helpers/sanitize.py +++ b/files/helpers/sanitize.py @@ -422,9 +422,12 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys if FEATURES['PING_GROUPS']: for i in group_mention_regex.finditer(sanitized): name = i.group(2) - existing = g.db.get(Group, name) - if existing: - sanitized = group_mention_regex.sub(r'\1!\2', sanitized) + if name == 'everyone': + sanitized = group_mention_regex.sub(r'\1!\2', sanitized) + else: + existing = g.db.get(Group, name) + if existing: + sanitized = group_mention_regex.sub(r'\1!\2', sanitized) soup = BeautifulSoup(sanitized, 'lxml')