mirror of https://github.com/zulip/zulip.git
Send welcome messages for new streams.
This commit is contained in:
parent
f599b517d3
commit
e3edc4d829
|
@ -81,6 +81,8 @@ IGNORED_PHRASES = [
|
|||
r"more conversations",
|
||||
# We should probably just delete this string from translations
|
||||
r'activation key',
|
||||
# this is used as a topic
|
||||
r'^hello$',
|
||||
|
||||
# TO CLEAN UP
|
||||
# Just want to avoid churning login.html right now
|
||||
|
|
|
@ -949,6 +949,36 @@ def check_typing_notification(sender, notification_to, operator):
|
|||
raise ValueError('Forbidden recipient type')
|
||||
return {'sender': sender, 'recipient': recipient, 'op': operator}
|
||||
|
||||
def stream_welcome_message(stream):
|
||||
# type: (Stream) -> Text
|
||||
content = _('Welcome to #**%s**.') % (stream.name,)
|
||||
|
||||
if stream.description:
|
||||
content += '\n\n**' + _('Description') + '**: '
|
||||
content += stream.description
|
||||
|
||||
return content
|
||||
|
||||
def prep_stream_welcome_message(stream):
|
||||
# type: (Stream) -> Optional[Dict[str, Any]]
|
||||
realm = stream.realm
|
||||
sender_email = settings.WELCOME_BOT
|
||||
recipient_type_name = 'stream'
|
||||
recipients = stream.name
|
||||
subject = _('hello')
|
||||
|
||||
content = stream_welcome_message(stream)
|
||||
|
||||
message = internal_prep_message(
|
||||
realm=realm,
|
||||
sender_email=sender_email,
|
||||
recipient_type_name=recipient_type_name,
|
||||
recipients=recipients,
|
||||
subject=subject,
|
||||
content=content)
|
||||
|
||||
return message
|
||||
|
||||
def create_stream_if_needed(realm, stream_name, invite_only=False, stream_description = ""):
|
||||
# type: (Realm, Text, bool, Text) -> Tuple[Stream, bool]
|
||||
(stream, created) = Stream.objects.get_or_create(
|
||||
|
@ -1199,6 +1229,9 @@ def check_message(sender, client, message_type_name, message_to,
|
|||
elif sender.is_bot and subscribed_to_stream(sender.bot_owner, stream):
|
||||
# Or you're a bot and your owner is subscribed.
|
||||
pass
|
||||
elif sender.email == settings.WELCOME_BOT:
|
||||
# The welcome bot welcomes folks to the stream.
|
||||
pass
|
||||
else:
|
||||
# All other cases are an error.
|
||||
raise JsonableError(_("Not authorized to send to stream '%s'") % (stream.name,))
|
||||
|
|
|
@ -3,6 +3,7 @@ from __future__ import absolute_import
|
|||
|
||||
from typing import Any, Dict, List, Mapping, Optional, Sequence, Set, Text
|
||||
|
||||
from django.conf import settings
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
|
||||
from zerver.lib import cache
|
||||
|
@ -45,6 +46,7 @@ from zerver.lib.actions import (
|
|||
get_user_profile_by_email, set_default_streams, check_stream_name,
|
||||
create_stream_if_needed, create_streams_if_needed, active_user_ids,
|
||||
do_deactivate_stream,
|
||||
stream_welcome_message,
|
||||
)
|
||||
|
||||
from zerver.views.streams import (
|
||||
|
@ -99,6 +101,33 @@ class TestCreateStreams(ZulipTestCase):
|
|||
for stream in existing_streams:
|
||||
self.assertTrue(stream.invite_only)
|
||||
|
||||
def test_welcome_message(self):
|
||||
# type: () -> None
|
||||
realm = get_realm('zulip')
|
||||
name = u'New Stream'
|
||||
|
||||
new_stream, _ = create_stream_if_needed(
|
||||
realm=realm,
|
||||
stream_name=name
|
||||
)
|
||||
welcome_message = stream_welcome_message(new_stream)
|
||||
|
||||
self.assertEqual(
|
||||
welcome_message,
|
||||
u'Welcome to #**New Stream**.'
|
||||
)
|
||||
|
||||
new_stream.description = 'Talk about **stuff**.'
|
||||
|
||||
welcome_message = stream_welcome_message(new_stream)
|
||||
|
||||
self.assertEqual(
|
||||
welcome_message,
|
||||
'Welcome to #**New Stream**.'
|
||||
'\n\n'
|
||||
'**Description**: Talk about **stuff**.'
|
||||
)
|
||||
|
||||
class RecipientTest(ZulipTestCase):
|
||||
def test_recipient(self):
|
||||
# type: () -> None
|
||||
|
@ -1233,7 +1262,7 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
with tornado_redirected_to_list(events):
|
||||
self.helper_check_subs_before_and_after_add(self.streams + add_streams, {},
|
||||
add_streams, self.streams, self.test_email, self.streams + add_streams)
|
||||
self.assert_length(events, 6)
|
||||
self.assert_length(events, 8)
|
||||
|
||||
def test_successful_subscriptions_add_with_announce(self):
|
||||
# type: () -> None
|
||||
|
@ -1261,7 +1290,7 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
with tornado_redirected_to_list(events):
|
||||
self.helper_check_subs_before_and_after_add(self.streams + add_streams, other_params,
|
||||
add_streams, self.streams, self.test_email, self.streams + add_streams)
|
||||
self.assertEqual(len(events), 7)
|
||||
self.assertEqual(len(events), 9)
|
||||
|
||||
def test_successful_subscriptions_notifies_pm(self):
|
||||
# type: () -> None
|
||||
|
@ -1283,7 +1312,7 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
)
|
||||
self.assert_json_success(result)
|
||||
|
||||
msg = self.get_last_message()
|
||||
msg = self.get_second_to_last_message()
|
||||
self.assertEqual(msg.recipient.type, Recipient.PERSONAL)
|
||||
self.assertEqual(msg.sender_id,
|
||||
get_user_profile_by_email('notification-bot@zulip.com').id)
|
||||
|
@ -1319,7 +1348,7 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
)
|
||||
self.assert_json_success(result)
|
||||
|
||||
msg = self.get_last_message()
|
||||
msg = self.get_second_to_last_message()
|
||||
self.assertEqual(msg.recipient.type, Recipient.STREAM)
|
||||
self.assertEqual(msg.sender_id,
|
||||
get_user_profile_by_email('notification-bot@zulip.com').id)
|
||||
|
@ -1357,7 +1386,7 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
)
|
||||
self.assert_json_success(result)
|
||||
|
||||
msg = self.get_last_message()
|
||||
msg = self.get_second_to_last_message()
|
||||
self.assertEqual(msg.recipient.type, Recipient.STREAM)
|
||||
self.assertEqual(msg.sender_id,
|
||||
get_user_profile_by_email('notification-bot@zulip.com').id)
|
||||
|
@ -1390,7 +1419,7 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
)
|
||||
self.assert_json_success(result)
|
||||
|
||||
msg = self.get_last_message()
|
||||
msg = self.get_second_to_last_message()
|
||||
self.assertEqual(msg.sender_id,
|
||||
get_user_profile_by_email('notification-bot@zulip.com').id)
|
||||
expected_msg = "%s just created a new stream #**%s**." % (invitee_full_name, invite_streams[0])
|
||||
|
@ -1462,8 +1491,16 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
self.helper_check_subs_before_and_after_add(streams_to_sub,
|
||||
{"principals": ujson.dumps([invitee])}, streams[:1], current_streams,
|
||||
invitee, streams_to_sub, invite_only=invite_only)
|
||||
# verify that the user was sent a message informing them about the subscription
|
||||
|
||||
# verify that a welcome message was sent to the stream
|
||||
msg = self.get_last_message()
|
||||
self.assertEqual(msg.recipient.type, msg.recipient.STREAM)
|
||||
self.assertEqual(msg.subject, u'hello')
|
||||
self.assertEqual(msg.sender.email, settings.WELCOME_BOT)
|
||||
self.assertIn('Welcome to #**', msg.content)
|
||||
|
||||
# verify that the user was sent a message informing them about the subscription
|
||||
msg = self.get_second_to_last_message()
|
||||
self.assertEqual(msg.recipient.type, msg.recipient.PERSONAL)
|
||||
self.assertEqual(msg.sender_id,
|
||||
get_user_profile_by_email("notification-bot@zulip.com").id)
|
||||
|
@ -1499,9 +1536,9 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
streams_to_sub,
|
||||
dict(principals=ujson.dumps([email1, email2])),
|
||||
)
|
||||
self.assert_length(queries, 52)
|
||||
self.assert_length(queries, 67)
|
||||
|
||||
self.assert_length(events, 8)
|
||||
self.assert_length(events, 9)
|
||||
for ev in [x for x in events if x['event']['type'] not in ('message', 'stream')]:
|
||||
if isinstance(ev['event']['subscriptions'][0], dict):
|
||||
self.assertEqual(ev['event']['op'], 'add')
|
||||
|
|
|
@ -16,7 +16,8 @@ from zerver.lib.actions import bulk_remove_subscriptions, \
|
|||
bulk_add_subscriptions, do_send_messages, get_subscriber_emails, do_rename_stream, \
|
||||
do_deactivate_stream, do_change_stream_invite_only, do_add_default_stream, \
|
||||
do_change_stream_description, do_get_streams, \
|
||||
do_remove_default_stream, get_topic_history_for_stream
|
||||
do_remove_default_stream, get_topic_history_for_stream, \
|
||||
prep_stream_welcome_message
|
||||
from zerver.lib.response import json_success, json_error, json_response
|
||||
from zerver.lib.streams import access_stream_by_id, access_stream_by_name, \
|
||||
check_stream_name, check_stream_name_available, filter_stream_authorization, \
|
||||
|
@ -300,6 +301,10 @@ def add_subscriptions_backend(request, user_profile,
|
|||
"private",
|
||||
realm_user_dict['email'], "", msg))
|
||||
|
||||
if not user_profile.realm.is_zephyr_mirror_realm:
|
||||
for stream in created_streams:
|
||||
notifications.append(prep_stream_welcome_message(stream))
|
||||
|
||||
if len(notifications) > 0:
|
||||
do_send_messages(notifications)
|
||||
|
||||
|
|
Loading…
Reference in New Issue