private async Task ProcessInline(InlineQuery query) { Console.WriteLine($"Got query: {query.Query}"); List <InlineQueryResultArticle> returnResults = new List <InlineQueryResultArticle>(); try { var MediaApiQuery = await MediaWikiApi.GetStringAsync(string.Format(queryFormat, query.Query)); var result = JsonConvert.DeserializeObject <JsonResultFormat.Root>(MediaApiQuery); if (result.Query?.Search?.Any() == true) { Dictionary <string, JsonResultFormat.Page> URLresult = null; try { var MediaApiQueryUrls = await MediaWikiApi.GetStringAsync(string.Format(urlsQueryFormat, string.Join('|', result.Query.Search.Select(c => c.Pageid).ToArray()))); URLresult = JsonConvert.DeserializeObject <JsonResultFormat.UrlRoot>(MediaApiQueryUrls).Query.Pages; } catch (Exception) // Fallback to titles { var MediaApiQueryUrls = await MediaWikiApi.GetStringAsync(string.Format(urlsQueryFormatFallbackTitle, string.Join('|', result.Query.Search.Select(c => c.Title).ToArray()))); URLresult = JsonConvert.DeserializeObject <JsonResultFormat.UrlRoot>(MediaApiQueryUrls).Query.Pages; foreach (var item in result.Query.Search) { item.Pageid = URLresult.FirstOrDefault(c => c.Value.Title == item.Title).Value.Pageid; } } returnResults = result .Query .Search .Join(URLresult, c => c.Pageid, c => c.Value.Pageid, (c, d) => new { c, d }) .Take(10) // limit .Select(c => new InlineQueryResultArticle(c.c.Pageid.ToString(), c.c.Title, new InputTextMessageContent(c.d.Value.Canonicalurl.ToString())) { Description = StripHTML(System.Net.WebUtility.HtmlDecode(c.c.Snippet)) }).ToList(); } await client.AnswerInlineQueryAsync(query.Id, returnResults); } catch (Exception e) { Console.WriteLine(e.Message); } }
private void _botClient_OnInlineQuery(object sender, Telegram.Bot.Args.InlineQueryEventArgs e) { if (e.InlineQuery.Query == null) { return; } if (e.InlineQuery.Query == "") { return; } try { var inlineQueryResults = GetInlineQueryResultPhotos(e.InlineQuery.Query); _logger.LogInformation($"Query:{e.InlineQuery.Query} From:{e.InlineQuery.From.FirstName} {e.InlineQuery.From.LastName} Results:{inlineQueryResults.Count()}"); var task = _botClient.AnswerInlineQueryAsync(e.InlineQuery.Id, inlineQueryResults, 6000000, true); task.Wait(); } catch (Exception ex) { _logger.LogError(ex.ToString(), ex); } }
async void bw_DoWork(object sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; var key = e.Argument as String; // получаем ключ из аргументов try { var Bot = new Telegram.Bot.TelegramBotClient(key); // инициализируем API await Bot.SetWebhookAsync(""); // Обязательно! убираем старую привязку к вебхуку для бота // Inlin'ы Bot.OnInlineQuery += async(object si, Telegram.Bot.Args.InlineQueryEventArgs ei) => { var query = ei.InlineQuery.Query; var msg = new Telegram.Bot.Types.InputMessageContents.InputTextMessageContent { MessageText = @"Это супер крутой текст статьи с переносами и <b>html</b> <i>тегами!</i>", ParseMode = Telegram.Bot.Types.Enums.ParseMode.Html, }; Telegram.Bot.Types.InlineQueryResults.InlineQueryResult[] results = { new Telegram.Bot.Types.InlineQueryResults.InlineQueryResultArticle { Id = "1", Title = "Тестовый тайтл", Description = "Описание статьи тут", InputMessageContent = msg, }, new Telegram.Bot.Types.InlineQueryResults.InlineQueryResultAudio { Url = "http://aftamat4ik.ru/wp-content/uploads/2017/05/mongol-shuudan_-_kozyr-nash-mandat.mp3", Id = "2", FileId = "123423433", Title = "Монгол Шуудан - Козырь наш Мандат!", }, new Telegram.Bot.Types.InlineQueryResults.InlineQueryResultPhoto { Id = "3", Url = "http://aftamat4ik.ru/wp-content/uploads/2017/05/14277366494961.jpg", ThumbUrl = "http://aftamat4ik.ru/wp-content/uploads/2017/05/14277366494961-150x150.jpg", Caption = "Текст под фоткой", Description = "Описание", }, new Telegram.Bot.Types.InlineQueryResults.InlineQueryResultVideo { Id = "4", Url = "http://aftamat4ik.ru/wp-content/uploads/2017/05/bb.mp4", ThumbUrl = "http://aftamat4ik.ru/wp-content/uploads/2017/05/joker_5-150x150.jpg", Title = "демо видеоролика", MimeType = "video/mp4", } }; await Bot.AnswerInlineQueryAsync(ei.InlineQuery.Id, results); }; // Callback'и от кнопок Bot.OnCallbackQuery += async(object sc, Telegram.Bot.Args.CallbackQueryEventArgs ev) => { var message = ev.CallbackQuery.Message; if (ev.CallbackQuery.Data == "callback1") { await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "You hav choosen " + ev.CallbackQuery.Data, true); } else if (ev.CallbackQuery.Data == "callback2") { await Bot.SendTextMessageAsync(message.Chat.Id, "тест", replyToMessageId : message.MessageId); await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // отсылаем пустое, чтобы убрать "частики" на кнопке } }; Bot.OnUpdate += async(object su, Telegram.Bot.Args.UpdateEventArgs evu) => { if (evu.Update.CallbackQuery != null || evu.Update.InlineQuery != null) { return; // в этом блоке нам келлбэки и инлайны не нужны } var update = evu.Update; var message = update.Message; if (message == null) { return; } if (message.Type == Telegram.Bot.Types.Enums.MessageType.TextMessage) { if (message.Text == "/hello") { // в ответ на команду /saysomething выводим сообщение await Bot.SendTextMessageAsync(message.Chat.Id, "Ну здарова! Как сам? :)", replyToMessageId : message.MessageId); } if (message.Text == "/help") { string txt = "Сори, я сам тут новенький :)\n /help - помощь\n /hello - поздароваться\n /getimg - получи картинку\n /rbuttons - Reply - кнопки\n /ibuttons - Inline кнопки"; // в ответ на команду /saysomething выводим сообщение await Bot.SendTextMessageAsync(message.Chat.Id, txt, replyToMessageId : message.MessageId); } if (message.Text == "/getimg") { // в ответ на команду /getimage выводим картинку await Bot.SendPhotoAsync(message.Chat.Id, "http://aftamat4ik.ru/wp-content/uploads/2017/03/photo_2016-12-13_23-21-07.jpg", "Revolution!"); } // inline buttons if (message.Text == "/ibuttons") { var keyboard = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardMarkup( new Telegram.Bot.Types.InlineKeyboardButton[][] { // First row new [] { // First column new Telegram.Bot.Types.InlineKeyboardButton("раз", "callback1"), // Second column new Telegram.Bot.Types.InlineKeyboardButton("два", "callback2"), }, } ); await Bot.SendTextMessageAsync(message.Chat.Id, "Давай накатим, товарищ, по одной!", false, false, 0, keyboard, Telegram.Bot.Types.Enums.ParseMode.Default); } // reply buttons if (message.Text == "/rbuttons") { var keyboard = new Telegram.Bot.Types.ReplyMarkups.ReplyKeyboardMarkup { Keyboard = new[] { new[] // row 1 { new Telegram.Bot.Types.KeyboardButton("Накатим!"), new Telegram.Bot.Types.KeyboardButton("Рря!") }, }, ResizeKeyboard = true }; await Bot.SendTextMessageAsync(message.Chat.Id, "Давай накатим, товарищ, мой!", false, false, 0, keyboard, Telegram.Bot.Types.Enums.ParseMode.Default); } // обработка reply кнопок if (message.Text.ToLower() == "накатим!") { await Bot.SendTextMessageAsync(message.Chat.Id, "Ну, за здоровье!", replyToMessageId : message.MessageId); } if (message.Text.ToLower() == "рря!") { await Bot.SendTextMessageAsync(message.Chat.Id, "Ну, за демократию!", replyToMessageId : message.MessageId); } } }; // запускаем прием обновлений Bot.StartReceiving(); } catch (Telegram.Bot.Exceptions.ApiRequestException ex) { Console.WriteLine(ex.Message); // если ключ не подошел - пишем об этом в консоль отладки } }
async void bw_DoWork(object sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; var key = e.Argument as String; try { var Bot = new Telegram.Bot.TelegramBotClient(key); await Bot.SetWebhookAsync(""); Bot.OnInlineQuery += async(object si, Telegram.Bot.Args.InlineQueryEventArgs ei) => { var query = ei.InlineQuery.Query; var msg = new Telegram.Bot.Types.InputMessageContents.InputTextMessageContent { ParseMode = Telegram.Bot.Types.Enums.ParseMode.Html, }; Telegram.Bot.Types.InlineQueryResults.InlineQueryResult[] results = { new Telegram.Bot.Types.InlineQueryResults.InlineQueryResultArticle { }, new Telegram.Bot.Types.InlineQueryResults.InlineQueryResultAudio { }, new Telegram.Bot.Types.InlineQueryResults.InlineQueryResultPhoto { }, new Telegram.Bot.Types.InlineQueryResults.InlineQueryResultVideo { } }; await Bot.AnswerInlineQueryAsync(ei.InlineQuery.Id, results); }; Bot.OnUpdate += async(object su, Telegram.Bot.Args.UpdateEventArgs evu) => { if (evu.Update.CallbackQuery != null || evu.Update.InlineQuery != null) { return; } var update = evu.Update; var message = update.Message; //пусть будут чрезвычайно длинные строки, мне лень делать что-то умное, ключ апи раздают всем подряд, палить его не боюсь var randomRestaurantUrl = "https://search-maps.yandex.ru/v1/?apikey=0d7404f4-957c-4116-b9a3-efe9fc40fbc7&results=500&text=Куда сходить пообедать баумана казань&lang=ru_RU&type=biz"; var buhichUrl = "https://search-maps.yandex.ru/v1/?apikey=0d7404f4-957c-4116-b9a3-efe9fc40fbc7&results=500&text=Куда сходить выпить пива баумана казань&lang=ru_RU&type=biz"; if (message == null) { return; } if (message.Type == Telegram.Bot.Types.Enums.MessageType.TextMessage) { if (message.Text == "/кудакушац") { string[] restaurants = { "Арома", "The Woods", "Brownbear", "ТЫ ПИДОР", "Big Butcher Grill", "OmNomNom", "Rock'n'Roll'ы", "Черный ящик", "Wok and Go", "Agafredo", "Твин Пикс", "KFC", "Тринити", "МАКДАК", "Бивень", "Соль", "The Тёлки", "Бинхартс" }; //хотел отправлять фотки, но потом стало лень их заливать //string[] restaurantsPhotos = { "AgADAgAD5KkxG-nNgUsmW5IeJEGSBBIySw0ABA_maPNgEFdds1gRAAEC"}; //var randomPhoto = restaurantsPhotos[new Random().Next(0, restaurantsPhotos.Length)]; var randomCommand = restaurants[new Random().Next(0, restaurants.Length)]; //var photos = new Telegram.Bot.Types.FileToSend { FileId = randomPhoto }; string outputText = randomCommand + " - это место куда ты сегодня пойдешь обедать"; await Bot.SendTextMessageAsync(message.Chat.Id, outputText, replyToMessageId : message.MessageId); //await Bot.SendPhotoAsync(message.Chat.Id, photos, replyToMessageId: message.MessageId); } if (message.Text == "/кудахавать") { await Bot.SendTextMessageAsync(message.Chat.Id, YandexRandomiser.GetRandomSearchResult(randomRestaurantUrl).Result, replyToMessageId : message.MessageId); } if (message.Text == "/кудабухать") { await Bot.SendTextMessageAsync(message.Chat.Id, YandexRandomiser.GetRandomSearchResult(buhichUrl).Result, replyToMessageId : message.MessageId); } } }; // запускаем прием обновлений Bot.StartReceiving(); } catch (Telegram.Bot.Exceptions.ApiRequestException ex) { Console.WriteLine(ex.Message); // если ключ не подошел - пишем об этом в консоль отладки } }