def remove_members_from_group_backend(request: HttpRequest, user_profile: UserProfile, user_group_id: int, members: List[int]) -> HttpResponse: if not members: return json_success() user_profiles = user_ids_to_users(members, user_profile.realm) user_group = access_user_group_by_id(user_group_id, user_profile) group_member_ids = get_user_group_members(user_group) for member in members: if (member not in group_member_ids): raise JsonableError(_("There is no member '%s' in this user group" % (member,))) remove_members_from_user_group(user_group, user_profiles) return json_success()
def get_mentioned_user_group_name(messages: List[Dict[str, Any]], user_profile: UserProfile) -> Optional[str]: """Returns the user group name to display in the email notification if user group(s) are mentioned. This implements the same algorithm as get_user_group_mentions_data in zerver/lib/notification_data.py, but we're passed a list of messages instead. """ for message in messages: if message["mentioned_user_group_id"] is None and message[ "trigger"] == "mentioned": # The user has also been personally mentioned, so that gets prioritized. return None # These IDs are those of the smallest user groups mentioned in each message. mentioned_user_group_ids = [ message["mentioned_user_group_id"] for message in messages if message["mentioned_user_group_id"] is not None ] # We now want to calculate the name of the smallest user group mentioned among # all these messages. smallest_user_group_size = math.inf smallest_user_group_name = None for user_group_id in mentioned_user_group_ids: current_user_group = access_user_group_by_id(user_group_id, user_profile, for_mention=True) current_user_group_size = len( get_user_group_members(current_user_group)) if current_user_group_size < smallest_user_group_size: # If multiple user groups are mentioned, we prefer the # user group with the least members. smallest_user_group_size = current_user_group_size smallest_user_group_name = current_user_group.name return smallest_user_group_name