]> git.cworth.org Git - turbot/commitdiff
Add code to auto-invite all users in a hunt to each new puzzle channel
authorCarl Worth <cworth@cworth.org>
Wed, 12 Jan 2022 04:16:15 +0000 (20:16 -0800)
committerCarl Worth <cworth@cworth.org>
Wed, 12 Jan 2022 04:48:50 +0000 (20:48 -0800)
We had originally written the code this way, long ago, but disabled it
(prior to MH 2021) when some people found it intrusive to be invited
to every channel, (rather than selecting the puzzles they were
interested in participating in). And after disabling it we also
deleted the code entirely in commit
ef8d8f359be149adbbdbeda88ec4b6bbbebf928e

Prior to MH 2022 we had talked about adding a user preference since
some people would like to be auto-invited. But then we got a lot less
code written than we'd wanted to before MH 2022.

So we decided to add the auto-join feature back, (so that people could
see channels that have huddle icons for easily determining puzzles
that have active activity).

turbot/events.py

index 671eccb95c7303c9762c5b4d7069c624ec96a65b..4099ac5a25c11f30f45f7994ed2328a8846cce45 100644 (file)
@@ -197,7 +197,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 +218,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 to avoid inviting itself
+    # has opted out of being auto-invited
+    members = [m for m in members if m != TURBOT_USER_ID]
+
+    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 +266,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(