2020 choose_team_levels , find_all_combinations ,
2121 distribute_participants_to_teams ,
2222 create_teams_in_view , update_team_participants ,
23- calculate_timezone_offset )
23+ calculate_timezone_offset , invite_users_to_slack_channel )
2424from teams .forms import HackProjectForm , EditTeamName
2525
2626SLACK_CHANNEL_ENDPOINT = 'https://slack.com/api/conversations.create'
@@ -135,7 +135,8 @@ def view_team(request, team_id):
135135 and not request .user .is_participant (team .hackathon ))
136136 rename_team_form = EditTeamName (instance = team )
137137 create_private_channel = (settings .SLACK_ENABLED is not None
138- and settings .SLACK_BOT_TOKEN is not None )
138+ and settings .SLACK_BOT_TOKEN is not None
139+ and settings .SLACK_ADMIN_TOKEN is not None )
139140
140141 mentor_profile = None
141142 if team .mentor and settings .SLACK_WORKSPACE :
@@ -239,8 +240,8 @@ def create_private_channel(request, team_id):
239240 'for this team.' ))
240241 return redirect (reverse ('view_team' , kwargs = {'team_id' : team_id }))
241242
242- if (not (settings .SLACK_ENABLED or settings .SLACK_BOT_TOKEN
243- or settings .SLACK_WORKSPACE ) or slack_site_settings .communication_channel_type != 'slack_private_channel' ):
243+ if (not (settings .SLACK_ENABLED or settings .SLACK_BOT_TOKEN or settings . SLACK_ADMIN_TOKEN
244+ or settings .SLACK_WORKSPACE ) or slack_site_settings .communication_channel_type != 'slack_private_channel' ):
244245 messages .error (request , 'This feature is currently not enabled.' )
245246 return redirect (reverse ('view_team' , kwargs = {'team_id' : team_id }))
246247
@@ -253,7 +254,9 @@ def create_private_channel(request, team_id):
253254 'name' : channel_name ,
254255 'is_private' : True ,
255256 }
256- headers = {'Authorization' : f'Bearer { settings .SLACK_BOT_TOKEN } ' }
257+ # Cannot use Bot Token to create a channel if workspace settings
258+ # specify only Admins and Owners can create channels
259+ headers = {'Authorization' : f'Bearer { settings .SLACK_ADMIN_TOKEN } ' }
257260 create_response = requests .get (SLACK_CHANNEL_ENDPOINT , params = params ,
258261 headers = headers )
259262 if not create_response .status_code == 200 :
@@ -291,24 +294,34 @@ def create_private_channel(request, team_id):
291294 # Add admins to channel for administration purposes
292295 for admin in slack_site_settings .slack_admins .all ():
293296 users .append (admin .username )
297+
298+ # First need to add Slack Bot to then add users to channel
299+ invite_bot_params = {
300+ 'channel' : channel ,
301+ 'users' : settings .SLACK_BOT_ID ,
302+ }
303+ response = invite_users_to_slack_channel (
304+ endpoint = SLACK_CHANNEL_INVITE_ENDPOINT ,
305+ headers = headers ,
306+ params = invite_bot_params )
307+
308+ if not response ['ok' ]:
309+ messages .error (request , response ['error' ])
310+ return redirect (reverse ('view_team' , kwargs = {'team_id' : team_id }))
294311
295- invite_params = {
312+ invite_team_params = {
296313 'channel' : channel ,
297314 'users' : ',' .join ([user .split ('_' )[0 ]
298315 for user in users if pattern .match (user )]),
299316 }
300- response = requests .post (SLACK_CHANNEL_INVITE_ENDPOINT ,
301- params = invite_params , headers = headers )
302-
303- if not response .status_code == 200 :
304- messages .error (request , ('An unexpected error occurred creating the '
305- 'Private Slack Channel.' ))
306- return redirect (reverse ('view_team' , kwargs = {'team_id' : team_id }))
307-
308- response = response .json ()
309- if not response .get ('ok' ):
310- messages .error (request , (f'An error occurred creating the Private Slack Channel. '
311- f'Error code: { response .get ("error" )} ' ))
317+ headers = {'Authorization' : f'Bearer { settings .SLACK_BOT_TOKEN } ' }
318+ response = invite_users_to_slack_channel (
319+ endpoint = SLACK_CHANNEL_INVITE_ENDPOINT ,
320+ headers = headers ,
321+ params = invite_team_params )
322+
323+ if not response ['ok' ]:
324+ messages .error (request , response ['error' ])
312325 return redirect (reverse ('view_team' , kwargs = {'team_id' : team_id }))
313326
314327 if len (users ) < len (team .participants .all ()):
0 commit comments