예제 #1
0
        public async Task <ActionResult> CreateMessage([FromBody] MessageRequestDTO requestDTO)
        {
            var senderUsername = User.GetUsername();

            if (senderUsername == requestDTO.RecipientUsername)
            {
                return(BadRequest("You can't message yourself"));
            }

            var sender = await _userRepository.GetUserByUsernameAsync(senderUsername);

            var recipient = await _userRepository.GetUserByUsernameAsync(requestDTO.RecipientUsername);

            if (recipient == null)
            {
                return(NotFound("Recipient not found"));
            }

            var message = new Message
            {
                Content           = requestDTO.Content,
                Sender            = sender,
                SenderUsername    = sender.UserName,
                Recipient         = recipient,
                RecipientUsername = recipient.UserName,
            };

            _messageRepository.AddMessage(message);

            if (await _messageRepository.SaveAllAsync())
            {
                return(Ok(new MessageDTO
                {
                    Id = message.Id,
                    Content = requestDTO.Content,
                    SenderId = sender.Id,
                    SenderUsername = sender.UserName,
                    SenderPhotoUrl = sender.Photos.FirstOrDefault(x => x.IsMain).Url,
                    RecipientId = recipient.Id,
                    RecipientUsername = recipient.UserName,
                    RecipientPhotoUrl = recipient.Photos.FirstOrDefault(x => x.IsMain).Url,
                    DateSent = message.DateSent
                }));
            }

            return(BadRequest("Unable to send message to user"));
        }
예제 #2
0
        public static async Task <IActionResult> PostDataFunc(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "data")] MessageRequestDTO req,
            [EventGrid(TopicEndpointUri = "EventGridEndPoint", TopicKeySetting = "EventGridEndKey")] IAsyncCollector <EventGridEvent> outputEvents,
            ILogger log)
        {
            try
            {
                //var myEvent = new EventGridEvent("message-id-", "subject-name", "event-data", "event-type", DateTime.UtcNow, "1.0");
                var myEvent = new EventGridEvent(req.Id, "raw messaging", req.MessageRequest, "raweventmessaging", DateTime.UtcNow, "1.0");
                await outputEvents.AddAsync(myEvent);

                return(new OkObjectResult(myEvent));
            }
            catch
            {
                return(new BadRequestObjectResult("I dont know what happen"));
            }
        }
예제 #3
0
        public async Task <IReplyIntent> GetProvidersAsync(MessageRequestDTO request)
        {
            // Rule Base Intents
            var providers = new Dictionary <string, IReplyIntent>();

            providers.Add("default", new EchoProvider(request));

            // Message Types
            providers.Add("/text", new TextMessageProvider(request));
            providers.Add("/sticker", new StickerMessageProvider(request));
            providers.Add("/image", new ImageMessageProvider(request));
            providers.Add("/video", new VideoMessageProvider(request));
            providers.Add("/audio", new AudioMessageProviders(request));
            providers.Add("/location", new LocationMessageProvider(request));
            providers.Add("/image-map", new ImageMapMessageProvider(request));
            providers.Add("/image-map-with-video", new ImageMapWithVideoMessageProvider(request));
            providers.Add("/template-buttons", new TemplateButtonMessageProvider(request));
            providers.Add("/template-confirm", new TemplateConfirmMessageProvider(request));
            providers.Add("/template-carousel", new TemplateCarouselMessageProvider(request));
            providers.Add("/template-carousel-images", new TemplateCarouselImageMessageProvider(request));

            // 你可以在任何Message Types 回傳 Quick Reply
            providers.Add("/quick-reply", new TextMessageQuickReplyProvider(request));

            // 改變發送者顯示名稱與大頭貼
            providers.Add("/sender", new TextMessageSenderProvider(request));

            // Flex Message
            providers.Add("/flex", new FlexMessageProvider(request));

            // Actions
            providers.Add("/action", new ActionProvider(request));

            // Rich Menu
            providers.Add("/richmenu", new RichMenuSwitchProviders(_lineMessageUtility, request, _setting.Value.DefaultRichMenuId));
            providers.Add("/richmenu-cancel", new RichMenuCancelProviders(_lineMessageUtility, request));

            await Task.CompletedTask;

            return(providers.ContainsKey(request.Intent.ToLower()) ? providers[request.Intent.ToLower()] : providers["default"]);
        }
예제 #4
0
        protected override async Task OnMessageAsync(LineEvent ev)
        {
            // Get Line User Profile
            var lineUser = await _lineMessageUtility.GetUserProfile(ev.source.userId);

            var request = new MessageRequestDTO()
            {
                Intent         = ev.message.Text,
                Message        = ev.message.Text,
                UserId         = ev.source.userId,
                DisplayName    = lineUser.displayName,
                IsFromGroup    = ev.source.type == "group",
                PostbackParams = ev.postback?.@params
            };

            if (ev.message.Type == NetCoreLineBotSDK.Enums.LineMessageType.Text)
            {
                var providers = await _factory.GetProvidersAsync(request);

                var replyMessages = await providers.GetReplyMessagesAsync();

                await _lineMessageUtility.ReplyMessageAsync(ev.replyToken, replyMessages);
            }
        }
예제 #5
0
 public ActionProvider(MessageRequestDTO request)
 {
     _request = request;
 }
 public ImageMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
 public TemplateCarouselImageMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
 public TextMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
 public StickerMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
예제 #10
0
 public RichMenuCancelProviders(ILineMessageUtility lineMessageUtility, MessageRequestDTO request)
 {
     _lineMessageUtility = lineMessageUtility;
     _request            = request;
 }
예제 #11
0
 public LocationMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
 public ImageMapWithVideoMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
 public TemplateButtonMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
 public TextMessageQuickReplyProvider(MessageRequestDTO request)
 {
     _request = request;
 }
예제 #15
0
 public AudioMessageProviders(MessageRequestDTO request)
 {
     _request = request;
 }
예제 #16
0
 public EchoProvider(MessageRequestDTO request)
 {
     _request = request;
 }
예제 #17
0
 public TemplateConfirmMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
예제 #18
0
 public VideoMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }
예제 #19
0
 public RichMenuSwitchProviders(ILineMessageUtility lineMessageUtility, MessageRequestDTO request, string defaultRichMenuId)
 {
     _lineMessageUtility = lineMessageUtility;
     _request            = request;
     _defaultRichMenuId  = defaultRichMenuId;
 }
예제 #20
0
 public FlexMessageProvider(MessageRequestDTO request)
 {
     _request = request;
 }