/// <summary>
        /// Processes a message;
        /// </summary>
        /// <param name="messageContainer"></param>
        /// <returns>True if the message was processed, otherwise false.</returns>
        public async Task <bool> ProcessMessageAsync(MessengerMessaging messageContainer)
        {
            var processed = false;

            await this.MessageSender.SendActionAsync(MessengerSenderAction.MarkSeen, messageContainer.Sender);

            foreach (var handler in this.handlers)
            {
                try
                {
                    var result = await handler.HandleMessageAsync(messageContainer);

                    if (result)
                    {
                        processed = true;
                        break;
                    }
                }
                catch (Exception ex)
                {
                    this.Logger.LogError("Exception: {0}", ex.ToString());
                }
            }

            //TODO: This should be done in a scheduled worker thread or background process.
            await this.CleanPicturesAsync();

            return(processed);
        }
Beispiel #2
0
        /// <summary>
        /// Processes a message;
        /// </summary>
        /// <param name="messageContainer"></param>
        /// <returns>True if the message was processed, otherwise false.</returns>
        public async Task <bool> ProcessMessageAsync(MessengerMessaging messageContainer)
        {
            var processed = false;

            await this.MessageSender.SendActionAsync(MessengerSenderAction.MarkSeen, messageContainer.Sender);

            foreach (var handler in this.handlers)
            {
                try
                {
                    var result = await handler.HandleMessageAsync(messageContainer);

                    if (result)
                    {
                        processed = true;
                        break;
                    }
                }
                catch (Exception ex)
                {
                    this.Logger.LogError("Exception: {0}", ex.ToString());
                }
            }

            return(processed);
        }
Beispiel #3
0
        /// <summary>
        /// Handles the message.
        /// </summary>
        /// <param name="messageContainer">The message container.</param>
        /// <returns>The result of the operation.</returns>
        public async Task <bool> HandleMessageAsync(MessengerMessaging messageContainer)
        {
            var message = messageContainer.Message;
            var sender  = messageContainer.Sender;

            var user = await this.GetUserAsync(sender);

            if (user == null)
            {
                return(false);
            }

            var attachement = message.Attachments?.FirstOrDefault();

            if (attachement?.Type != "image")
            {
                return(false);
            }

            await this.Processor.PictureRepository.InsertAsync(sender.Id, attachement.Payload.Url);

            var pictureUrl = await this.Processor.PictureRepository.GetRandomAsync(user.UserId);

            // var location = await this.GetLocationFromPictureAsync(attachement.Payload.Url);

            // if (location != null)
            // {
            //     await this.SendTextAsync(sender, location);
            // }

            await this.SendPictureAsync(sender, pictureUrl);

            return(true);
        }
Beispiel #4
0
        /// <summary>
        /// Handles the message.
        /// </summary>
        /// <param name="messageContainer">The message container.</param>
        /// <returns>The result of the operation.</returns>
        public async Task <bool> HandleMessageAsync(MessengerMessaging messageContainer)
        {
            var message = messageContainer.Message;
            var sender  = messageContainer.Sender;

            if (message?.Text?.ToLowerInvariant() == "help" || messageContainer?.Postback?.Payload == "help")
            {
                await this.SimulateTypingAsync(sender, 1000);

                await this.SendTextAsync(sender, "send me a nice picture :)");

                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Handles the message.
        /// </summary>
        /// <param name="messageContainer">The message container.</param>
        /// <returns>The result of the operation.</returns>
        public async Task <bool> HandleMessageAsync(MessengerMessaging messageContainer)
        {
            var message = messageContainer.Message;
            var sender  = messageContainer.Sender;

            if (message?.Text.ToLower() == "help" || messageContainer?.Postback.Payload.ToLower() == "help")
            {
                await this.SimulateTypingAsync(sender, 1000);

                var buttons = new List <MessengerButtonBase>();
                buttons.Add(new MessengerLinkButton("Configure", $"https://transfer-buddy.herokuapp.com/Configuration?userId={sender.Id}"));

                await this.SendTextWithButtonsAsync(sender, "these are the command that I support atm ;)", buttons);

                return(true);
            }

            return(false);
        }
Beispiel #6
0
        public async Task <bool> SendDBTT(MessengerMessaging mes)
        {
            var weather = await _weatherService.GetWeatherFromCity(CommonHelper.ConvertUtf8ConvertNotReplcae(mes.Message.Text));

            if (weather != null)
            {
                var response = new MessengerMessage {
                    Text = $"DBTT {DateTime.UtcNow.ToString("dd.MM.yyyy")}, tại {weather.name} NĐ là: {weather.main.temp}, NĐ cao nhất: {weather.main.temp_max}, thấp nhất: {weather.main.temp_max} có {weather.weather[0].description} <3 From Khoapiterrr with love"
                };
                _ = messageSender.SendAsync(response, new MessengerUser {
                    Id = mes.Sender.Id
                });
                try
                {
                    var Sender = await _messengerProfile.GetUserProfileAsync(mes.Sender.Id);

                    _context.ViewWeatherHistoryApi.Add(new Entity.ViewWeatherHistoryApi
                    {
                        City        = weather.name,
                        CreatedDate = DateTime.UtcNow,
                        FacebookId  = mes.Sender.Id,
                        Name        = Sender.Result.FirstName + " " + Sender.Result.LastName,
                        Temperature = weather.main.temp.ToString()
                    });
                    _context.SaveChanges();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return(true);
            }
            _ = messageSender.SendAsync(new MessengerMessage {
                Text = "Xin lỗi bạn, mình không tìm thấy thành phố của bạn. Vui lòng gõ chính xác"
            }, new MessengerUser {
                Id = mes.Sender.Id
            });
            return(false);
        }
Beispiel #7
0
        /// <summary>
        /// Handles the message.
        /// </summary>
        /// <param name="messageContainer">The message container.</param>
        /// <returns>The result of the operation.</returns>
        public async Task <bool> HandleMessageAsync(MessengerMessaging messageContainer)
        {
            var message = messageContainer.Message;
            var sender  = messageContainer.Sender;

            var user = await this.GetUserAsync(sender);

            if (user == null)
            {
                return(false);
            }

            var attachement = message.Attachments?.FirstOrDefault();

            if (attachement?.Type == "image" || string.IsNullOrEmpty(message.Text))
            {
                return(false);
            }

            var conversationContext = await this.Processor.RedisService.FindOrCreateAsync(sender.Id, new ConversationContext { Id = Guid.NewGuid().ToString() });

            var witClient = new WitAi.WitClient(witAiToken);
            var response  = await witClient.GetMessageAsync(message.Text);

            if (response.Entities != null)
            {
                if (response.Entities.Count == 0)
                {
                    var buttons = new List <MessengerButtonBase>();
                    buttons.Add(new MessengerChatButton("help", "help"));

                    await this.SendTextWithButtonsAsync(sender, "I didn't quite get that, I'm a still a bit silly ATM :/", buttons);
                }
                else
                {
                    foreach (var entity in response.Entities)
                    {
                        foreach (var value in entity.Value)
                        {
                            if (value.Confidence > 0.5)
                            {
                                var intent = value.Value.ToString();

                                switch (intent)
                                {
                                case "Greetings":
                                    await this.SendTextAsync(sender, "Hi :)", 1000);

                                    break;

                                case "Feelings":
                                    await this.SendTextAsync(sender, "I'm fine thanks! :)", 2000);

                                    break;

                                case "Identity":
                                    await this.SendTextAsync(sender, "I'm rando bot!", 2000);

                                    break;

                                default:
                                    await this.SendTextAsync(sender, "I didn't quite get that, I'm a still a bit silly ATM :/", 3000);

                                    break;
                                }

                                return(true);
                            }
                            else
                            {
                                await this.SendTextAsync(sender, "I didn't quite get that, I'm a still a bit silly ATM :/", 3000);
                            }
                        }
                    }
                }
            }

            return(false);
        }