Пример #1
0
 public async Task HandleAsync(IUpdateContext context, UpdateDelegate next, CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     Types.Update u = context.Update;
     try
     {
         await next(context);
     }
     catch (Exception e)
     {
         Console.BackgroundColor = ConsoleColor.Black;
         Console.ForegroundColor = ConsoleColor.Red;
         Console.WriteLine("An error occured in handling update {0}.{1}{2}", u.Id, Environment.NewLine, e);
         Console.ResetColor();
         await context.Bot.Client.SendTextMessageAsync(
             chatId : _debugGroupId, string.Format("An error occured in handling update {0}.{1}{2}", u.Id, Environment.NewLine, e)
             );
     }
 }
Пример #2
0
        public void Execute(Bot bot, Types.Update update, string[] commandPieces)
        {
            if (commandPieces.Length < 2)
            {
                bot.SendMessage(
                    chatId: update.Message.Chat.Id,
                    text: "O comando foi utilizado de maneira incorreta.\nSiga o seguinte formato na próxima vez: \"/dicio <palavra>\".",
                    disableWebPagePreview: false,
                    replyToMessageId: update.Message.MessageId);
                return;
            }

            string palavraBusca = commandPieces[1];

            HtmlWeb web = new HtmlWeb
            {
                OverrideEncoding = Encoding.GetEncoding("iso-8859-1")
            };

            HtmlDocument doc = web.Load(String.Format("http://www.dicio.com.br/pesquisa.php?q={0}", palavraBusca));

            bool paginaDefinicaoPalavra = doc.DocumentNode.SelectNodes("//div[@id='content']//h1[@itemprop='name']") != null;

            if (!paginaDefinicaoPalavra)
            {
                bool paginaMultiplasPalavras = doc.DocumentNode.SelectNodes("//*[@id='enchant']/a") == null && doc.DocumentNode.SelectNodes("//*[@id='content']/div[1]/p/text()[1]") == null;

                if (paginaMultiplasPalavras)
                {
                    string pathPaginaPrimeiraPalavra = doc.DocumentNode.SelectNodes("//div[@id='content']//ul[@id='resultados']/li/a")[0].Attributes["href"].Value;
                    doc = web.Load(String.Format("http://www.dicio.com.br{0}", pathPaginaPrimeiraPalavra));
                }
                else
                {
                    bot.SendMessage(
                        chatId: update.Message.Chat.Id,
                        text: String.Format("Não foi possível encontrar o significado de \"{0}\".", palavraBusca),
                        replyToMessageId: update.Message.MessageId);

                    return;
                }
            }

            // TODO: Descobrir uma maneira menos porca de limpar esse HTML.
            string palavra     = doc.DocumentNode.SelectNodes("//*[@id='content']/div[1]/h1")[0].InnerText;
            string significado = doc.DocumentNode.SelectNodes("//*[@id='significado']")[0].InnerHtml.Replace("<br>", "\n");
            string definicao   = doc.DocumentNode.SelectNodes("//*[@id='content']/div[1]/p[2]")[0].InnerHtml
                                 .Replace("<br>", "\n")
                                 .Replace("<b>", "")
                                 .Replace("</b>", "")
                                 .Replace("<span class=\"sep\">", "")
                                 .Replace("</span>", "")
                                 .Replace("</a>", "");

            bool onceAgain;

            do
            {
                onceAgain = false;

                var anchorTagStartIndex = definicao.IndexOf("<a href=\"");
                var anchorTagEndIndex   = definicao.IndexOf("/\">");

                if (anchorTagStartIndex != -1 && anchorTagEndIndex != -1)
                {
                    var anchorTag = definicao.Substring(anchorTagStartIndex, (anchorTagEndIndex + 3) - anchorTagStartIndex);
                    definicao = definicao.Replace(anchorTag, "");

                    onceAgain = true;
                }
            } while (onceAgain);

            bot.SendMessage(
                chatId: update.Message.Chat.Id,
                text: String.Format("Significado de {0}:\n{1}\n\nDefinição de {2}:\n{3}", palavra, significado, palavra, definicao),
                disableWebPagePreview: false,
                replyToMessageId: update.Message.MessageId);
        }