public async Task <IActionResult> Post([FromForm] SlackActionPayload request)
        {
            if (request == null)
            {
                return(BadRequest());
            }
            var actionRequest      = JsonConvert.DeserializeObject <SlackActionRequest>(request.Payload);
            var requestApproved    = actionRequest.Actions[0].Value == "approved";
            var orginalTextMessage = actionRequest.OriginalMessage.Text;
            var key = actionRequest.Actions[0].Name;

            // record decision of CEO in database
            await _firebaseService.RecordPurchaseRequestDecisionAsync(key, requestApproved);

            // read data using key from database (or response)
            var purchaseRequest = await _firebaseService.ReadPurchaseRequestAsync(key);

            var regex   = new Regex(@"@(.+)>.+\*(.+)\*");
            var matches = regex.Matches(orginalTextMessage);
            var userId  = purchaseRequest != null ? purchaseRequest.UserId: matches[0].Groups[2].ToString();
            var item    = purchaseRequest != null ? purchaseRequest.Item: matches[0].Groups[1].ToString();

            // send the orginial purchase requester feedback on the decision
            await _slackService.SendDirectMessage(
                userId,
                $"Hi! Your purchase request for *{item}* has been *{(requestApproved ? "approved" : "denied")}*."
                );

            // sending the CEO feedback on what they decided
            var response = new SlackActionResponse
            {
                Text        = orginalTextMessage,
                Attachments = new List <SlackAttachment> {
                    new SlackAttachment {
                        Text = requestApproved
                            ? "You *approved* this purchase request"
                            : "You *denied* this purchase request"
                    }
                }
            };

            return(Ok(response));
        }
예제 #2
0
        private static SlackMessage handleTaggedPerson(ICollector <string> taggingQueue, SlackActionResponse requestMessage, string UserId)
        {
            taggingQueue.Add(new TaggingMessage
            {
                FaceId         = requestMessage.CallbackId,
                UserId         = UserId,
                TaggedByName   = requestMessage.User.Name,
                TaggedByUserId = requestMessage.User.Id,
                ResponseUrl    = requestMessage.ResponseUrl,
            }.ToJson());

            return(createTaggedPersonMessage(
                       requestMessage.OriginalMessage,
                       requestMessage.User.Name));
        }
예제 #3
0
        private static SlackMessage handleWrongIdentifyPerson(ICollector <string> undoIdentifyQueue, string previouslyMarked, SlackActionResponse requestMessage)
        {
            undoIdentifyQueue.Add(new UndoIdentifyMessage
            {
                FaceId          = requestMessage.CallbackId,
                RequestedByName = requestMessage.User.Name,
                ResponseUrl     = requestMessage.ResponseUrl,
            }.ToJson());

            return(createTaggingPersonMessage(
                       requestMessage.CallbackId,
                       requestMessage.User.Name,
                       previouslyMarked));
        }