from zerver.models import UserProfile, UserHotspot

from typing import List, Text, Dict

ALL_HOTSPOTS = {
    # TODO: Tag these for translation once we've finalized the content.
    'click_to_reply': {
        'title': 'Respond to a message',
        'description': 'Click anywhere on a message to reply.',
    },
    'new_topic_button': {
        'title': 'Start a new topic',
        'description': 'Click the "New topic" button to start a new conversation.',
    },
    'stream_settings': {
        'title': 'Stream settings',
        'description': 'Most discussion on Zulip happens in streams. Click here to create or join additional streams.',
    },
}  # type Dict[str, Dict[str, Text]]

def get_next_hotspots(user):
    # type: (UserProfile) -> List[Dict[str, object]]
    seen_hotspots = frozenset(UserHotspot.objects.filter(user=user).values_list('hotspot', flat=True))
    for hotspot in ['click_to_reply', 'new_topic_button', 'stream_settings']:
        if hotspot not in seen_hotspots:
            return [{
                'name': hotspot,
                'title': ALL_HOTSPOTS[hotspot]['title'],
                'description': ALL_HOTSPOTS[hotspot]['description'],
                'delay': 5,
            }]

    return []

@@ -82,16 +82,34 @@
 , Dict%0A%0A
+SEND_ALL = False%0A%0A
 ALL_HOTS
@@ -788,16 +788,345 @@
 bject%5D%5D%0A
+%0A    if SEND_ALL:%0A        result = %5B%5D%0A        for hotspot in ALL_HOTSPOTS:%0A            result.append(%7B%0A                'name': hotspot,%0A                'title': ALL_HOTSPOTS%5Bhotspot%5D%5B'title'%5D,%0A                'description': ALL_HOTSPOTS%5Bhotspot%5D%5B'description'%5D,%0A                'delay': 5,%0A            %7D)%0A%0A        return result%0A%0A
     seen
@@ -1540,32 +1540,32 @@
     'delay': 5,%0A
+
             %7D%5D%0A%0A
@@ -1563,17 +1563,16 @@
      %7D%5D%0A
-%0A
     retu

Add SEND_ALL flag.