]> git.cworth.org Git - turbot/blobdiff - turbot/events.py
Include a link to the big board in the hunt channel's topic
[turbot] / turbot / events.py
index 671eccb95c7303c9762c5b4d7069c624ec96a65b..24356de6180706eca363cee5120f51915ae33da6 100644 (file)
@@ -14,6 +14,12 @@ from boto3.dynamodb.conditions import Key
 
 TURBOT_USER_ID = 'U01B9QM4P9R'
 
+# This is a list of user IDs that should not be auto-invited to new channels
+AUTO_INVITE_DENY_LIST = (
+    'U01B9QM4P9R',  # Turbot itself
+    'U01HQABASLW',  # Lavi
+)
+
 events = {}
 
 lambda_success = {'statusCode': 200}
@@ -197,7 +203,8 @@ def puzzle_channel_created(turb, channel_name, channel_id):
 
     # We need hunt from the database to know which folder to create
     # the sheet in.
-    hunt = find_hunt_for_hunt_id(turb, puzzle['hunt_id'])
+    hunt_id = puzzle['hunt_id']
+    hunt = find_hunt_for_hunt_id(turb, hunt_id)
 
     # Before launching into sheet creation, indicate that we're doing this
     # in the database. This way, if we take too long to create the sheet
@@ -217,6 +224,28 @@ def puzzle_channel_created(turb, channel_name, channel_id):
     # Get the new sheet_url into the channel topic and description
     set_channel_topic_and_description(turb, puzzle)
 
+    # Lookup and invite all users from this hunt to this new puzzle
+
+    # Find all members of the hunt channel
+    members = slack_channel_members(turb.slack_client, hunt['channel_id'])
+
+    # Filter out Turbot's own ID as well as that of any user who
+    # has opted out of being auto-invited
+    members = [m for m in members if m not in AUTO_INVITE_DENY_LIST]
+
+    slack_send_message(
+        turb.slack_client, channel_id,
+        "Inviting all members from the hunt channel: "
+        + "<#{}>".format(hunt['channel_id']))
+
+    # Invite those members to the puzzle channel (in chunks of 500)
+    cursor = 0
+    while cursor < len(members):
+        turb.slack_client.conversations_invite(
+            channel=channel_id,
+            users=members[cursor:cursor + 500])
+        cursor += 500
+
     # And finally, give a welcome message with some documentation
     # on how to update the state of the puzzle in the database.
     welcome_msg = (
@@ -243,7 +272,6 @@ def puzzle_channel_created(turb, channel_name, channel_id):
     turb.slack_client.chat_postMessage(channel=channel_id, text=welcome_msg)
 
     # Finally, finally, notify the hunt channel about the new puzzle
-    hunt = find_hunt_for_hunt_id(turb, puzzle['hunt_id'])
     slack_send_message(
         turb.slack_client, hunt['channel_id'],
         "New puzzle available: <{}|{}>".format(