From d47444e021aab4d3a89fd0e1b75c0a49867290b7 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 11 Jan 2022 20:16:15 -0800 Subject: [PATCH] Add code to auto-invite all users in a hunt to each new puzzle channel 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 | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/turbot/events.py b/turbot/events.py index 671eccb..4099ac5 100644 --- a/turbot/events.py +++ b/turbot/events.py @@ -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( -- 2.43.0