/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }