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).
# We need hunt from the database to know which folder to create
# the sheet in.
# 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
# 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
# Get the new sheet_url into the channel topic and description
set_channel_topic_and_description(turb, puzzle)
# 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 = (
# And finally, give a welcome message with some documentation
# on how to update the state of the puzzle in the database.
welcome_msg = (
turb.slack_client.chat_postMessage(channel=channel_id, text=welcome_msg)
# Finally, finally, notify the hunt channel about the new puzzle
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(
slack_send_message(
turb.slack_client, hunt['channel_id'],
"New puzzle available: <{}|{}>".format(