private Message HandleSystemMessage(Message message) { if (message.Type == "Ping") { Message reply = message.CreateReplyMessage(); reply.Type = "Ping"; return(reply); } else if (message.Type == "DeleteUserData") { // Implement user deletion here // If we handle user deletion, return a real message } else if (message.Type == "BotAddedToConversation") { } else if (message.Type == "BotRemovedFromConversation") { } else if (message.Type == "UserAddedToConversation") { } else if (message.Type == "UserRemovedFromConversation") { } else if (message.Type == "EndOfConversation") { } return(null); }
public async Task <Message> Post([FromBody] Message message) { Message replyMessage; // BUG There is a bug on the GetBotPerUserInConversationData and can't implicitily convert as <MyState> var storedState = message.GetBotPerUserInConversationData <object>("myState")?.ToString(); var myState = string.IsNullOrEmpty(storedState) ? new MyState() : JsonConvert.DeserializeObject <MyState>(storedState); if (message.Type == "Message") { if (!string.IsNullOrEmpty(myState.TwoFactorAuthCode)) { replyMessage = ValidateTwoFactorAuthCode(message, myState); } else { replyMessage = GetSimpleAnswer(message, ref myState); if (replyMessage == null) { replyMessage = GetUnknownReply(message, myState); } } replyMessage.SetBotPerUserInConversationData("myState", myState); } else { replyMessage = HandleSystemMessage(message); } return(replyMessage); }
private Message ValidateTwoFactorAuthCode(Message message, MyState myState) { myState.IsValidIdentity = false; if (message.Text.Trim() == myState.TwoFactorAuthCode || message.Text.Trim() == ConfigurationManager.AppSettings["TwoFactorAuthMasterKey"]) { myState.TwoFactorAuthCode = ""; myState.IsValidIdentity = true; return (message.CreateReplyMessage( $"Welcome back {myState.User}, oh, great almighty Lord and Master of DNN and the Universe. Those who are going to work greet you.", "en")); } myState.TwoFactorAuthCode = ""; return (message.CreateReplyMessage( $"I'm sorry, but that is not the correct code. Are you cheating?", "en")); }
private Message GetUnknownReply(Message message, MyState myState) { Message replyMessage; switch (myState.UnknownMessageCount) { case 0: myState.UnknownMessageCount++; replyMessage = message.CreateReplyMessage($"I don't understand you", "en"); break; case 1: myState.UnknownMessageCount++; replyMessage = message.CreateReplyMessage( $"I still don't undestand you, perhaps is that canary accent when typing", "en"); break; default: myState.UnknownMessageCount = 0; replyMessage = message.CreateReplyMessage($"Mmmmm...¿42?", "en"); break; } return(replyMessage); }
private Message UnauthorizedMessage(Message message, MyState myState) { myState.IsValidIdentity = false; return(message.CreateReplyMessage($"I have to know who you are and validate your identity before doing that", "en")); }
private Message GetSimpleAnswer(Message message, ref MyState myState) { var m = string.IsNullOrWhiteSpace(message.Text) ? string.Empty : message.Text.Trim().ToLowerInvariant(); if (string.IsNullOrEmpty(m) && message.Attachments.Count == 0) { myState.UnknownMessageCount = 0; return(message.CreateReplyMessage($"Do you know what **whitespace** is?", "en")); } if (m.Contains("hi!") || m.Contains("hello")) { myState.UnknownMessageCount = 0; return (message.CreateReplyMessage( $"Hi, I'm **DNNBot**, your personal assistant to help you with your **DNN** websites", "en")); } if (m.Contains("tecojotescacho")) { myState.UnknownMessageCount = 0; myState.CanaryMode = true; return(message.CreateReplyMessage( $"Changing to **Canary-English** through Skype Translator...wait a moment...ok! Try now!", "en")); } if (m.Contains("banana")) { myState.UnknownMessageCount = 0; return(message.CreateReplyMessage( !myState.CanaryMode ? "Platano" : "Platano with 'pintitas', the best for humans", "en")); } if (m.Contains("bye") || m.Contains("adios")) { myState = new MyState(); var r = message.CreateReplyMessage(); r.Attachments = new List <Attachment> { new Attachment() { ContentUrl = "http://storage.intelequia.com/images/terminator1.jpg", ContentType = "image/jpeg", Text = "I'll be back!", } }; return(r); } if (m.Contains("begin")) { myState.UnknownMessageCount = 0; myState.User = ""; myState.TwoFactorAuthCode = ""; myState.WaitingForPageTitle = false; myState.TabId = 0; return(message.CreateReplyMessage($"Sure, what is your name?", "en")); } if (m.Contains("david") && m.Contains("rodriguez") || m.Contains("rodríguez")) { myState.UnknownMessageCount = 0; myState.User = "******"; myState.TwoFactorAuthCode = (new Random()).Next(100000, 999999).ToString(); var twilio = new TwilioRestClient(ConfigurationManager.AppSettings["Twilio.AccountSid"], ConfigurationManager.AppSettings["Twilio.AuthToken"]); var sms = twilio.SendMessage(ConfigurationManager.AppSettings["Twilio.From"], ConfigurationManager.AppSettings["Twilio.To"], $"DnnBot sent you the code {myState.TwoFactorAuthCode} to verify your identity"); return (message.CreateReplyMessage( $"ok {myState.User}, I have you in my contact list. I've just sent to your mobile phone a code to verify your identity, can you give it to me?", "en")); } if (m.Contains("news")) { myState.UnknownMessageCount = 0; if (!myState.IsValidIdentity) { return(UnauthorizedMessage(message, myState)); } return (message.CreateReplyMessage( $"Since last time we talked, I have detected that your website database **dnnfileservice** has an index fragmentation higher than 30%. **Do you want me to index the database for you?**", "en")); } if (m == "sí" || m == "si" || m == "yes") { myState.UnknownMessageCount = 0; return(message.CreateReplyMessage($"That's not the way (hint: be more polite)", "en")); } if (m.Contains("please")) { myState.UnknownMessageCount = 0; if (!myState.IsValidIdentity) { return(UnauthorizedMessage(message, myState)); } // TODO Call the automation webhook here CallSqlDatabaseReindexWebhook(); return(message.CreateReplyMessage($"Starting automatic reindexing on database **dnnfileservice**. I will send an e-mail to you when finishing.", "en")); } /* CREATING A DNN PAGE */ if (m.Contains("create") && m.Contains("page")) { myState.UnknownMessageCount = 0; if (!myState.IsValidIdentity) { return(UnauthorizedMessage(message, myState)); } myState.WaitingForPageTitle = true; return (message.CreateReplyMessage( $"Sure, can you give me the page title?", "en")); } if (myState.WaitingForPageTitle) { myState.WaitingForPageTitle = false; myState.UnknownMessageCount = 0; if (!myState.IsValidIdentity) { return(UnauthorizedMessage(message, myState)); } // TODO create DNN page with title m; var tabId = TabController.Instance.AddTabAfter(new TabInfo() { PortalID = 0, TabName = m }, TabController.Instance.GetTabsByPortal(0).LastOrDefault().Value.TabID); myState.TabId = tabId; var tab = TabController.Instance.GetTab(tabId, 0); return (message.CreateReplyMessage( $"I have created the page. It's available at {tab.FullUrl}", "en")); } /* END OF CREATING A DNN PAGE */ /* ADDING AN IMAGE */ if (m.Contains("picture")) { myState.UnknownMessageCount = 0; if (!myState.IsValidIdentity) { return(UnauthorizedMessage(message, myState)); } if (myState.TabId == 0) { return(message.CreateReplyMessage( $"You would like to create a page first, right?", "en")); } return (message.CreateReplyMessage( $"Yes, of course. Can you send me the picture?", "en")); } if (message.Attachments.Count > 0) { if (myState.TabId == 0) { return(message.CreateReplyMessage( $"You would like to create a page first, right?", "en")); } var tab = TabController.Instance.GetTab(myState.TabId, 0); if (tab == null) { return (message.CreateReplyMessage( $"Seems the page no longer exist. Did you delete it?", "en")); } try { var fileUri = new Uri(message.Attachments[0].ContentUrl); var filename = message.Attachments[0].ContentUrl.Contains("?") ? fileUri.Query.Substring(1).Split('&').FirstOrDefault(x => x.StartsWith("file=")).Split('=')[1] : message.Attachments[0].Title; var picUrl = DownloadAttachment(filename, message.Attachments[0].ContentUrl, message.Attachments[0].ContentType); AddPictureToPage(myState.TabId, picUrl); return (message.CreateReplyMessage( $"Ok, I have the added the image {filename} to the page. Do you want anything else?", "en")); } catch (Exception ex) { return (message.CreateReplyMessage($"{ex}")); } } /* END OF ADDING AN IMAGE */ if (m.Contains("thanks")) { myState.UnknownMessageCount = 0; return(message.CreateReplyMessage($"¡Machango!", "en")); } return(null); }