mirror of https://github.com/zulip/zulip.git
onboarding: Add welcome-bot response to initial user message.
Fixes #6030.
This commit is contained in:
parent
5ddc336844
commit
e749deb136
|
@ -702,6 +702,17 @@ def create_mirror_user_if_needed(realm, email, email_to_fullname):
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
return get_user(email, realm)
|
return get_user(email, realm)
|
||||||
|
|
||||||
|
def send_welcome_bot_response(message):
|
||||||
|
# type: (MutableMapping[str, Any]) -> None
|
||||||
|
welcome_bot = get_system_bot(settings.WELCOME_BOT)
|
||||||
|
human_recipient = get_recipient(Recipient.PERSONAL, message['message'].sender.id)
|
||||||
|
if Message.objects.filter(sender=welcome_bot, recipient=human_recipient).count() < 2:
|
||||||
|
internal_send_private_message(
|
||||||
|
message['realm'], welcome_bot, message['message'].sender,
|
||||||
|
"Congratulations on your first reply! :tada:\n\n"
|
||||||
|
"Feel free to continue using this space to practice your new messaging "
|
||||||
|
"skills. Or, try clicking on some of the stream names to your left!")
|
||||||
|
|
||||||
def render_incoming_message(message, content, user_ids, realm):
|
def render_incoming_message(message, content, user_ids, realm):
|
||||||
# type: (Message, Text, Set[int], Realm) -> Text
|
# type: (Message, Text, Set[int], Realm) -> Text
|
||||||
realm_alert_words = alert_words_in_realm(realm)
|
realm_alert_words = alert_words_in_realm(realm)
|
||||||
|
@ -1084,6 +1095,12 @@ def do_send_messages(messages_maybe_none):
|
||||||
lambda x: None
|
lambda x: None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if message['message'].recipient.type == Recipient.PERSONAL:
|
||||||
|
welcome_bot_id = get_user_profile_by_email(settings.WELCOME_BOT).id
|
||||||
|
if (welcome_bot_id in message['active_user_ids'] and
|
||||||
|
welcome_bot_id != message['message'].sender_id):
|
||||||
|
send_welcome_bot_response(message)
|
||||||
|
|
||||||
for queue_name, events in message['message'].service_queue_events.items():
|
for queue_name, events in message['message'].service_queue_events.items():
|
||||||
for event in events:
|
for event in events:
|
||||||
queue_json_publish(
|
queue_json_publish(
|
||||||
|
|
|
@ -305,7 +305,7 @@ class LoginTest(ZulipTestCase):
|
||||||
with queries_captured() as queries:
|
with queries_captured() as queries:
|
||||||
self.register(self.nonreg_email('test'), "test")
|
self.register(self.nonreg_email('test'), "test")
|
||||||
# Ensure the number of queries we make is not O(streams)
|
# Ensure the number of queries we make is not O(streams)
|
||||||
self.assert_length(queries, 68)
|
self.assert_length(queries, 69)
|
||||||
user_profile = self.nonreg_user('test')
|
user_profile = self.nonreg_user('test')
|
||||||
self.assertEqual(get_session_dict_user(self.client.session), user_profile.id)
|
self.assertEqual(get_session_dict_user(self.client.session), user_profile.id)
|
||||||
self.assertFalse(user_profile.enable_stream_desktop_notifications)
|
self.assertFalse(user_profile.enable_stream_desktop_notifications)
|
||||||
|
|
|
@ -1,12 +1,23 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from zerver.lib.test_classes import ZulipTestCase
|
||||||
|
from zerver.lib.test_helpers import message_stream_count, most_recent_message
|
||||||
|
from zerver.models import get_realm, get_user, Recipient, UserProfile
|
||||||
|
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
import ujson
|
import ujson
|
||||||
|
|
||||||
from zerver.lib.test_classes import ZulipTestCase
|
|
||||||
from zerver.models import UserProfile
|
|
||||||
|
|
||||||
class TutorialTests(ZulipTestCase):
|
class TutorialTests(ZulipTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
# type: () -> None
|
||||||
|
# This emulates the welcome message sent by the welcome bot to hamlet@zulip.com
|
||||||
|
# This is only a quick fix - ideally, we would have this message sent by the initialization
|
||||||
|
# code in populate_db.py
|
||||||
|
user_email = 'hamlet@zulip.com'
|
||||||
|
bot_email = 'welcome-bot@zulip.com'
|
||||||
|
content = 'Shortened welcome message.'
|
||||||
|
self.send_message(bot_email, user_email, Recipient.PERSONAL, content)
|
||||||
|
|
||||||
def test_tutorial_status(self):
|
def test_tutorial_status(self):
|
||||||
# type: () -> None
|
# type: () -> None
|
||||||
email = self.example_email('hamlet')
|
email = self.example_email('hamlet')
|
||||||
|
@ -22,3 +33,37 @@ class TutorialTests(ZulipTestCase):
|
||||||
self.assert_json_success(result)
|
self.assert_json_success(result)
|
||||||
user = self.example_user('hamlet')
|
user = self.example_user('hamlet')
|
||||||
self.assertEqual(user.tutorial_status, expected_db_status)
|
self.assertEqual(user.tutorial_status, expected_db_status)
|
||||||
|
|
||||||
|
def test_single_response_to_pm(self):
|
||||||
|
# type: () -> None
|
||||||
|
realm = get_realm('zulip')
|
||||||
|
user_email = 'hamlet@zulip.com'
|
||||||
|
bot_email = 'welcome-bot@zulip.com'
|
||||||
|
content = 'whatever'
|
||||||
|
self.login(user_email)
|
||||||
|
self.send_message(user_email, bot_email, Recipient.PERSONAL, content)
|
||||||
|
user = get_user(user_email, realm)
|
||||||
|
user_messages = message_stream_count(user)
|
||||||
|
expected_response = ("Congratulations on your first reply! :tada:\n\n"
|
||||||
|
"Feel free to continue using this space to practice your new messaging "
|
||||||
|
"skills. Or, try clicking on some of the stream names to your left!")
|
||||||
|
self.assertEqual(most_recent_message(user).content, expected_response)
|
||||||
|
# Welcome bot shouldn't respond to further PMs.
|
||||||
|
self.send_message(user_email, bot_email, Recipient.PERSONAL, content)
|
||||||
|
self.assertEqual(message_stream_count(user), user_messages+1)
|
||||||
|
|
||||||
|
def test_no_response_to_group_pm(self):
|
||||||
|
# type: () -> None
|
||||||
|
realm = get_realm('zulip') # Assume realm is always 'zulip'
|
||||||
|
user1_email = self.example_email('hamlet')
|
||||||
|
user2_email = self.example_email('cordelia')
|
||||||
|
bot_email = self.example_email('welcome_bot')
|
||||||
|
content = "whatever"
|
||||||
|
self.login(user1_email)
|
||||||
|
self.send_message(user1_email, [bot_email, user2_email], Recipient.PERSONAL, content)
|
||||||
|
user1 = get_user(user1_email, realm)
|
||||||
|
user1_messages = message_stream_count(user1)
|
||||||
|
self.assertEqual(most_recent_message(user1).content, content)
|
||||||
|
# Welcome bot should still respond to initial PM after group PM.
|
||||||
|
self.send_message(user1_email, bot_email, Recipient.PERSONAL, content)
|
||||||
|
self.assertEqual(message_stream_count(user1), user1_messages+2)
|
||||||
|
|
Loading…
Reference in New Issue