private async Task ProcessGithubConnectCommand(SlackCommandDto slackCommand) { string workspaceId = slackCommand.team_id; string workspaceMemberId = slackCommand.user_id; ChatAppUserEntity workspaceUser = await _chatAppUserStorage.FindAsync(u => u.WorkspaceId == workspaceId && u.WorkspaceMemberId == workspaceMemberId); var githubService = new GitHubService(); var slackCommandResponse = new SlackCommandResponseDto(); var user = workspaceUser.User; try { var organizationMembership = await githubService.InviteToGithubOrg(slackCommand.text); user.GitHubUsername = slackCommand.text; await _userStorage.UpdateAsync(user); } catch { slackCommandResponse.Text = "Sorry, something happened with our GitHub api call. :(\n Please try once more. If that doesn't work, reach out to <@UBW8QQG86> to be added manually."; await _slackService.RespondViaResponsUrl(slackCommand.response_url, slackCommandResponse); return; } slackCommandResponse.Text = $"Success! You should have gotten an email with an invite to the GitHub org. You can also visit https://github.com/{_githubOrganization} to accept the invite."; await _slackService.RespondViaResponsUrl(slackCommand.response_url, slackCommandResponse); return; }
private SlackCommandResponseDto BuildProjectsResponse(List <ProjectEntity> projects) { var slackCommandResponse = new SlackCommandResponseDto(); if (projects.Count == 0) { slackCommandResponse.Text = $"It doesn't look like there are any projects looking for members right now. \n Start a new project on {_mainUrl}/projects."; } else { slackCommandResponse.Text = $"Here's a list of available projects you can join (visit the <{_mainUrl}/projects|project page> for more advanced filtering). \n"; } foreach (var project in projects) { slackCommandResponse.Text += $"{project.Name}, <{_mainUrl}/projects/{project.Id}|project page>\n\n"; } return(slackCommandResponse); }
private async Task GenerateMagicLoginLink(SlackCommandDto slackCommand) { var linkExpirationInMinutes = 5; string token = TokenHelper.GenerateToken().Replace("/", ""); string workspaceId = slackCommand.team_id; string workspaceMemberId = slackCommand.user_id; ChatAppUserEntity workspaceUser = await _chatAppUserStorage.FindAsync(u => u.WorkspaceId == workspaceId && u.WorkspaceMemberId == workspaceMemberId); var user = workspaceUser.User; user.MagicLoginToken = token; user.MagicLoginTokenExpiresAt = DateTimeOffset.Now.AddMinutes(linkExpirationInMinutes); await _userStorage.UpdateAsync(user); var slackCommandResponse = new SlackCommandResponseDto(); slackCommandResponse.Text = $"Your magic login link expires in {linkExpirationInMinutes} minutes.\n\n {_mainUrl}/magic-login?token={Uri.EscapeDataString(token)}"; await _slackService.RespondViaResponsUrl(slackCommand.response_url, slackCommandResponse); return; }
public async Task ProcessCommand(SlackCommandDto slackCommandDto) { SlackCommandResponseDto slackCommandResponse = new SlackCommandResponseDto(); switch (slackCommandDto.command) { case "/projects": await ProcessProjectsCommand(slackCommandDto); break; case "/github-connect": await ProcessGithubConnectCommand(slackCommandDto); break; case "/magic-login-link": await GenerateMagicLoginLink(slackCommandDto); break; } return; }
public async Task RespondViaResponsUrl(string responseUrl, SlackCommandResponseDto slackResponse) { await _http.Post($"{responseUrl}", headers, slackResponse); return; }