Beispiel #1
0
        public virtual async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            if (activity != null)
            {
                using (MathBotDataContext dbContext = new MathBotDataContext())
                {
                    ActivityModel model = new ActivityModel();
                    model.Activity = activity.ToJson();
                    dbContext.Activities.Add(model);
                    await dbContext.SaveChangesAsync();
                }

                string message   = activity.Text;
                string _fullText = activity.Text;
                var    _tokens   = _fullText.GetHasTags();
                var    _emails   = _fullText.GetEmails();

                if (activity.Type == ActivityTypes.Message)
                {
                    StateClient sc       = activity.GetStateClient();
                    BotData     userData = sc.BotState.GetPrivateConversationData(activity.ChannelId,
                                                                                  activity.Conversation.Id, activity.From.Id);
                    await Conversation.SendAsync(activity, () => new RootDialog());
                }
                else
                {
                    HandleSystemMessage(activity);
                }
            }
            return(new HttpResponseMessage(System.Net.HttpStatusCode.Accepted));
        }
Beispiel #2
0
        public string SearchInDictionary(string text)
        {
            string _word = text.ToLower();

            using (MathBotDataContext dbContext = new MathBotDataContext())
            {
                var _result = dbContext.Dictionaries.Where(t => t.English.ToLower().Contains(_word));
                if (_result != null)
                {
                    return(dbContext.Dictionaries
                           .Where(t => t.English.ToLower().Contains(_word))
                           .Select(t => t.Vietnameses)
                           .FirstOrDefault());
                }
                else if (dbContext.Dictionaries.Where(t => t.Vietnameses.ToLower().Contains(_word)) != null)
                {
                    return(dbContext.Dictionaries
                           .Where(t => t.Vietnameses.ToLower().Contains(_word))
                           .Select(t => t.English)
                           .FirstOrDefault());
                }
                else
                {
                    return(string.Empty);
                }
            }
        }
Beispiel #3
0
        public List <string> Search(string[] keywords)
        {
            List <string> _urlsResult = new List <string>();

            foreach (string _keyword in keywords)
            {
                using (MathBotDataContext dbContext = new MathBotDataContext())
                {
                    var _urls = dbContext.Urls.Where(t => t.Url.ToLower()
                                                     .Contains(_keyword.ToLower()))
                                .Select(t => t.Url).ToList();
                    _urlsResult.AddRange(_urls);
                }
            }
            return(_urlsResult.Distinct().ToList());
        }
Beispiel #4
0
        public async Task ProcessMessageAsync(IDialogContext context, IMessageActivity message)
        {
            UserMessage userText = new UserMessage(message.Text);

            if (userText.Type == UserMessageType.Url)
            {
                UrlModel url = new UrlModel(userText.Text);
                if (url.Ping())
                {
                    using (MathBotDataContext dbContext = new MathBotDataContext())
                    {
                        if (!dbContext.Urls.Select(t => t.Url).Contains(url.Url))
                        {
                            try
                            {
                                dbContext.Urls.Add(url);
                                await dbContext.SaveChangesAsync();
                                await BotTalk(context, MakeBotMessage(userText));
                            }
                            catch (Exception ex)
                            {
                                await BotTalk(context, ex.Message);
                            }
                        }
                        else
                        {
                            await BotTalk(context, url.Url + " is exits");
                        }
                    }
                }
                return;
            }
            else if (userText.Type == UserMessageType.MathExpression)
            {
                MathEngine mathEngine = new MathEngine();
                string     _result    = mathEngine.Calc(userText.Text);
                await BotTalk(context, _result);

                return;
            }
            else if (userText.Type == UserMessageType.DatabaseCommand)
            {
                string command = "";
                string sql     = userText.Text.GetFromEndTo("#");
                string table   = userText.Text.NextWords("#")[0];
                using (MathBotDataContext dbContext = new MathBotDataContext())
                {
                    if (table == "Url")
                    {
                        string lastUrl = dbContext.Urls
                                         .OrderByDescending(t => t.CreatedDate)
                                         .FirstOrDefault().Url;
                        await BotTalk(context, lastUrl);

                        return;
                    }
                    else
                    {
                        return;
                    }
                }
            }
            else if (userText.Type == UserMessageType.Translate)
            {
                await BotTranslate(context, userText);

                return;
            }
            else if (userText.Type == UserMessageType.ChangeCurrency)
            {
                if (userText.Text.ToLower().EndsWith("vnd"))
                {
                    string  amount       = userText.Text.GetFromBeginTo("?").Trim();
                    decimal _amount      = decimal.Parse(amount);
                    string  endToken     = userText.Text.GetFromEndTo("?").Trim();
                    var     results      = Convertor.CurrencyConvert(_amount, "USD", "VND");
                    string  replyMessage = results;
                    await BotTalk(context, replyMessage);
                }
                return;
            }
            else if (userText.Text.StartsWith("#vietlott"))
            {
                string _url = "http://vietlott.vn/vi/trung-thuong/ket-qua-trung-thuong/";
                await BotTalk(context, "Now i'm reading from (url): " + _url);

                WebPage _page = new WebPage(_url.Trim());
                if (_page.HtmlTables != null && _page.HtmlTables.Count > 0)
                {
                    foreach (var table in _page.HtmlTables)
                    {
                        foreach (var row in table.Rows)
                        {
                            if (row.IsContainsNumber())
                            {
                                string text    = row.ToHtmlDocument().DocumentNode.InnerText;
                                var    numbers = text.GetNumbers()
                                                 .WordsToString();
                                if (!numbers.IsNullOrEmptyOrWhiteSpace())
                                {
                                    await BotTalk(context, numbers);
                                }
                            }
                        }
                    }
                }
            }
            else if (userText.Type == UserMessageType.Search)
            {
                string command = userText.Text;
                var    results = new GoogleServices()
                                 .Search(command);
                var items = results.Items.TakeMax(5);
                foreach (var item in results.Items)
                {
                    await BotTalk(context, item.HtmlSnippet);
                }
                return;
            }
            else if (userText.Type == UserMessageType.ImageSearch)
            {
                string command = userText.Text;
                var    results = new GoogleServices()
                                 .SearchImage(command);
                var items = results.Items.TakeMax(5);
                foreach (var item in results.Items)
                {
                    await BotTalk(context, item.HtmlSnippet);
                }
                return;
            }
            else if (userText.Type == UserMessageType.SayGoodbye)
            {
                await BotTalk(context, "Goodbye");

                return;
            }
            else if (userText.Type == UserMessageType.SayHello)
            {
                await BotTalk(context, "Hello");

                return;
            }
            else
            {
                await this.SendUnknowMessageAsync(context);
            }
        }
Beispiel #5
0
        private async Task BotTranslate(IDialogContext context, UserMessage userText)
        {
            bool   isSave      = true;
            string _text       = userText.Text.GetFromBeginTo("?").Trim();
            string _token      = userText.Text.GetFromEndTo("?").Trim();
            string messageText = userText.Text.GetFromBeginTo("?").Trim();

            var _results = SearchInDictionary(_text);

            if (_results != null)
            {
                isSave = false;
                await context.PostAsync(_results);

                return;
            }
            else
            {
                Translator     translator = new Translator();
                WordDictionary _newWord   = new WordDictionary();
                _newWord.CountViews   = 0;
                _newWord.IsRemembered = false;

                if (_token.IsEnglishLangCode())
                {
                    _newWord.English     = _text;
                    _newWord.Vietnameses = translator.Translate(_text, "vi", "en");
                    _newWord.Vietnameses = System.Web.HttpUtility.HtmlDecode(_newWord.Vietnameses);
                    await context.PostAsync(_newWord.Vietnameses);
                }
                else if (_token.IsVietnameseLangCode())
                {
                    _newWord.Vietnameses = _text;
                    _newWord.English     = translator.Translate(_text, "en", "vi");
                    _newWord.English     = System.Web.HttpUtility.HtmlDecode(_newWord.English);
                    await context.PostAsync(_newWord.English);
                }
                else
                {
                    isSave = false;
                    await context.PostAsync("Sorry, i don't understand this language");

                    return;
                }

                if (isSave)
                {
                    using (MathBotDataContext dbContext = new MathBotDataContext())
                    {
                        dbContext.Dictionaries.Add(_newWord);
                        try
                        {
                            dbContext.SaveChanges();
                            return;
                        }
                        catch (Exception ex)
                        {
                            await context.PostAsync(ex.Message);

                            return;
                        }
                    }
                }
            }
        }