コード例 #1
0
        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;
        }
コード例 #2
0
        private async Task ProcessProjectsCommand(SlackCommandDto slackCommand)
        {
            var projects             = (await _projectStorage.FindAsync()).FindAll(p => p.LookingForMembers && p.Searchable);
            var slackCommandResponse = BuildProjectsResponse(projects);
            await _slackService.RespondViaResponsUrl(slackCommand.response_url, slackCommandResponse);

            return;
        }
コード例 #3
0
        public async Task <ActionResult> RecieveCommand([FromForm] SlackCommandDto slackCommandDto)
        {
            if (await _slackRequestValidator.IsValid(Request))
            {
                await _messageQueue.SendMessageAsync(slackCommandDto, "command");

                return(Ok());
            }
            return(BadRequest());
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        public async Task <ActionResult> Equipment([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _statsCommands.Equipment(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #7
0
        public ActionResult Balance([FromForm] SlackCommandDto slackCommand)
        {
            var result = _statsCommands.Balance(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #8
0
        public async Task <ActionResult> Shop([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _creditsCommands.Shop(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #9
0
        public ActionResult Leaderboard([FromForm] SlackCommandDto slackCommand)
        {
            var result = _creditsCommands.Leaderboard(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #10
0
        public ActionResult Forbes([FromForm] SlackCommandDto slackCommand)
        {
            var result = _creditsCommands.Forbes(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #11
0
        public async Task <ActionResult> Command([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _luaService.ExecuteScript(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #12
0
        public async Task <ActionResult> JoinCoffeeOther([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _slursCommands.Flame(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #13
0
        public ActionResult GambleChallenge([FromForm] SlackCommandDto slackCommand)
        {
            var result = _casinoCommands.GambleChallenge(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #14
0
        public ActionResult Equip([FromForm] SlackCommandDto slackCommand)
        {
            var result = _inventoryCommands.Equip(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #15
0
        public async Task <ActionResult> Revolution([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _combatCommands.Revolution(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #16
0
        public ActionResult Wholast([FromForm] SlackCommandDto slackCommand)
        {
            var result = _slursCommands.WhoLast(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #17
0
        public ActionResult ViewSlurs([FromForm] SlackCommandDto slackCommand)
        {
            var result = _slursCommands.Slurs(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #18
0
        public async Task <ActionResult> CleanSlurs([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _slursCommands.Clean(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #19
0
        public ActionResult LeaveParty([FromForm] SlackCommandDto slackCommand)
        {
            var result = _combatCommands.LeaveParty(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #20
0
        public async Task <ActionResult> Monsters([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _combatCommands.ListMonsters(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #21
0
        public async Task <ActionResult> Inventory([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _inventoryCommands.Inventory(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #22
0
        public async Task <ActionResult> PartyInvite([FromForm] SlackCommandDto slackCommand)
        {
            var result = await _combatCommands.PartyInvite(slackCommand.ToCommand());

            return(Ok(result.Message));
        }
コード例 #23
0
        /// <summary>
        /// Message to process incoming messages from service bus queue.
        /// </summary>
        /// <param name="message"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        private async Task ProcessMessagesAsync(Microsoft.Azure.ServiceBus.Message message, CancellationToken token)
        {
            try
            {
                string messageBody = Encoding.UTF8.GetString(message.Body);

                switch (message.Label)
                {
                case "command":
                    SlackCommandDto slackCommandDto = JsonConvert.DeserializeObject <SlackCommandDto>(messageBody);
                    await _commandHandler.ProcessCommand(slackCommandDto);

                    await _queueClient.CompleteAsync(message.SystemProperties.LockToken);

                    break;

                case "event":
                    SlackEventDto slackEventDto = JsonConvert.DeserializeObject <SlackEventDto>(messageBody);
                    await _eventHandler.ProcessEvent(slackEventDto);

                    await _queueClient.CompleteAsync(message.SystemProperties.LockToken);

                    break;

                case "projectpost":
                    await _apiEventHandler.ProcessProjectPost(messageBody);

                    await _queueClient.CompleteAsync(message.SystemProperties.LockToken);

                    break;

                case "registration":
                    RegistrationDto registration = JsonConvert.DeserializeObject <RegistrationDto>(messageBody);
                    await _apiEventHandler.ProcessRegistration(registration);

                    await _queueClient.CompleteAsync(message.SystemProperties.LockToken);

                    break;

                case "feedback":
                    FeedbackDto feedback = JsonConvert.DeserializeObject <FeedbackDto>(messageBody);
                    await _apiEventHandler.ProcessFeedback(feedback);

                    await _queueClient.CompleteAsync(message.SystemProperties.LockToken);

                    break;

                default:
                    _logger.LogWarning($"No label associated with message:{message.SystemProperties.SequenceNumber}");
                    break;
                }
                ;

                _logger.LogInformation($"Processed message: SequenceNumber:{message.SystemProperties.SequenceNumber}");
            }
            catch (Exception ex)
            {
                // failed to process message, mark as Abandoned
                _logger.LogError(ex, $"Error processing message: SequenceNumber:{message.SystemProperties.SequenceNumber}");
                await _queueClient.DeadLetterAsync(message.SystemProperties.LockToken);
            }
        }