message: Allow system bots to mention group if everyone else can.

We now allow system bots to mention a group if can_mention_group
setting is set to "role:everyone" group and not when it is set
to some other group.
This commit is contained in:
Sahil Batra
2024-01-10 12:28:52 +05:30
parent dcac272afc
commit 76b2e6de0b
2 changed files with 41 additions and 0 deletions

View File

@@ -77,8 +77,10 @@ from zerver.models import (
UserTopic,
)
from zerver.models.constants import MAX_TOPIC_NAME_LENGTH
from zerver.models.groups import SystemGroups
from zerver.models.messages import get_usermessage_by_message_id
from zerver.models.realms import get_fake_email_domain
from zerver.models.users import is_cross_realm_bot_email
class MessageDetailsDict(TypedDict, total=False):
@@ -1756,9 +1758,20 @@ def check_user_group_mention_allowed(sender: UserProfile, user_group_ids: List[i
user_groups = UserGroup.objects.filter(id__in=user_group_ids).select_related(
"can_mention_group"
)
sender_is_system_bot = is_cross_realm_bot_email(sender.delivery_email)
for group in user_groups:
can_mention_group = group.can_mention_group
if sender_is_system_bot:
if can_mention_group.name == SystemGroups.EVERYONE:
continue
raise JsonableError(
_(
"You are not allowed to mention user group '{user_group_name}'. You must be a member of '{can_mention_group_name}' to mention this group."
).format(user_group_name=group.name, can_mention_group_name=can_mention_group.name)
)
if not is_user_in_group(can_mention_group, sender, direct_member_only=False):
raise JsonableError(
_(