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); // если ключ не подошел - пишем об этом в консоль отладки } }
public async void BotOnCallbackQueryReceived(object sender, CallbackQueryEventArgs callbackQueryEventArgs) { await _telegram.AnswerCallbackQueryAsync(callbackQueryEventArgs.CallbackQuery.Id, $"Received {callbackQueryEventArgs.CallbackQuery.Data}").ConfigureAwait(false); }
async void bw_DoWork(object sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; bool isSub = false; bool isUnSub = false; var key = e.Argument as String; try { var Bot = new Telegram.Bot.TelegramBotClient(key); await Bot.SetWebhookAsync(""); Bot.OnCallbackQuery += async(object sc, Telegram.Bot.Args.CallbackQueryEventArgs ev) => { var message = ev.CallbackQuery.Message; switch (ev.CallbackQuery.Data) { case "VEHICLENUMBER": { await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Please enter /find;VEHICLENUMBER;Your VEHICLENUMBER:", true); } break; case "BODYNUMBER": { await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Please enter /find;BODYNUMBER;Your BODYNUMBER:", true); } break; case "ENGINENUMBER": { await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Please enter /find;ENGINENUMBER;Your ENGINENUMBER:", true); } break; default: break; } }; 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 messages = message.Text.Split(';'); if (message == null) { return; } if (message.Type == Telegram.Bot.Types.Enums.MessageType.Text) { if (message.Text == "/test") { await Bot.SendTextMessageAsync(message.Chat.Id, "test", replyToMessageId : message.MessageId); } else if (message.Text == "/check") { List <CarInfo> result = checkCarForUserSubscribes(); if (result.Count > 0) { foreach (var car in result) { await Bot.SendTextMessageAsync(message.Chat.Id, "This car was found\n" + "ID:" + car.Id + "\n" + "Місце реєстрації:" + car.OVD + "\n" + "Бренд:" + car.BRAND + "\n" + "Колір:" + car.COLOR + "\n" + "Державний номер:" + car.VEHICLENUMBER + "\n" + "Номер кузову:" + car.BODYNUMBER + "\n" + "Номер шасі:" + car.CHASSISNUMBER + "\n" + "Номер двигуна:" + car.ENGINENUMBER + "\n" + "Дата викрадення:" + car.THEFT_DATA + "\n" + "Дата додавання в сховище:" + car.INSERT_DATE + "\n"); } } else { await Bot.SendTextMessageAsync(message.Chat.Id, "Nothing found by your request."); } } else if (message.Text == "/subscribe") { getUsers(); isSub = true; await Bot.SendTextMessageAsync(message.Chat.Id, "Please write car number to subscribe on it", replyToMessageId : message.MessageId); } else if (isSub) { if (CheckIfUserExist(message.Chat.Id.ToString())) { UserSubscribes user = new UserSubscribes { Id = message.Chat.Id.ToString(), Name = message.Chat.Username, Subscribes = new List <string>() { message.Text } }; users.Add(user); setUsers(user); await Bot.SendTextMessageAsync(message.Chat.Id, "You have been subscribed on " + message.Text); } else { foreach (var user in users) { if (user.Id == message.Chat.Id.ToString()) { user.Subscribes.Add(message.Text); updateUsers(user.Id, message.Text); } } await Bot.SendTextMessageAsync(message.Chat.Id, "You have been subscribed on " + message.Text); } isSub = false; } else if (message.Text == "/find") { var keyboard = new InlineKeyboardMarkup( new InlineKeyboardButton[][] { new [] { new InlineKeyboardButton { Text = "VEHICLENUMBER", CallbackData = "VEHICLENUMBER" }, new InlineKeyboardButton { Text = "BODYNUMBER", CallbackData = "BODYNUMBER" }, new InlineKeyboardButton { Text = "ENGINENUMBER", CallbackData = "ENGINENUMBER" }, }, } ); await Bot.SendTextMessageAsync(message.Chat.Id, "Choose parameter which bot will use to find:", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0, keyboard); } else if (messages[0] == "/find" && messages[1] == "VEHICLENUMBER") { List <CarInfo> carInfos = FindCar(messages[1], messages[2]); if (carInfos.Count > 0) { foreach (var car in carInfos) { await Bot.SendTextMessageAsync(message.Chat.Id, "This car was found\n" + "ID:" + car.Id + "\n" + "Місце реєстрації:" + car.OVD + "\n" + "Бренд:" + car.BRAND + "\n" + "Колір:" + car.COLOR + "\n" + "Державний номер:" + car.VEHICLENUMBER + "\n" + "Номер кузову:" + car.BODYNUMBER + "\n" + "Номер шасі:" + car.CHASSISNUMBER + "\n" + "Номер двигуна:" + car.ENGINENUMBER + "\n" + "Дата викрадення:" + car.THEFT_DATA + "\n" + "Дата додавання в сховище:" + car.INSERT_DATE + "\n"); } } else { await Bot.SendTextMessageAsync(message.Chat.Id, "Didn't found any car by this request."); } } else if (messages[0] == "/find" && messages[1] == "BODYNUMBER") { List <CarInfo> carInfos = FindCar(messages[1], messages[2]); if (carInfos.Count > 0) { foreach (var car in carInfos) { await Bot.SendTextMessageAsync(message.Chat.Id, "This car was found\n" + "ID:" + car.Id + "\n" + "Місце реєстрації:" + car.OVD + "\n" + "Бренд:" + car.BRAND + "\n" + "Колір:" + car.COLOR + "\n" + "Державний номер:" + car.VEHICLENUMBER + "\n" + "Номер кузову:" + car.BODYNUMBER + "\n" + "Номер шасі:" + car.CHASSISNUMBER + "\n" + "Номер двигуна:" + car.ENGINENUMBER + "\n" + "Дата викрадення:" + car.THEFT_DATA + "\n" + "Дата додавання в сховище:" + car.INSERT_DATE + "\n"); } } else { await Bot.SendTextMessageAsync(message.Chat.Id, "Didn't found any car by this request."); } } else if (messages[0] == "/find" && messages[1] == "ENGINENUMBER") { List <CarInfo> carInfos = FindCar(messages[1], messages[2]); if (carInfos.Count > 0) { foreach (var car in carInfos) { await Bot.SendTextMessageAsync(message.Chat.Id, "This car was found\n" + "ID:" + car.Id + "\n" + "Місце реєстрації:" + car.OVD + "\n" + "Бренд:" + car.BRAND + "\n" + "Колір:" + car.COLOR + "\n" + "Державний номер:" + car.VEHICLENUMBER + "\n" + "Номер кузову:" + car.BODYNUMBER + "\n" + "Номер шасі:" + car.CHASSISNUMBER + "\n" + "Номер двигуна:" + car.ENGINENUMBER + "\n" + "Дата викрадення:" + car.THEFT_DATA + "\n" + "Дата додавання в сховище:" + car.INSERT_DATE + "\n"); } } else { await Bot.SendTextMessageAsync(message.Chat.Id, "Didn't found any car by this request."); } } else if (message.Text == "/unsubscribe") { getUsers(); isUnSub = true; await Bot.SendTextMessageAsync(message.Chat.Id, "Please write car number to unsubscribe from it", replyToMessageId : message.MessageId); } else if (isUnSub) { if (!CheckIfUserExist(message.Chat.Id.ToString())) { foreach (var user in users) { if (user.Id == message.Chat.Id.ToString()) { user.Subscribes.Remove(message.Text); setUsers(user); } } await Bot.SendTextMessageAsync(message.Chat.Id, "You have been unsubscribed from " + message.Text); } else { foreach (var user in users) { if (user.Id == message.Chat.Id.ToString()) { user.Subscribes.Add(message.Text); updateUsers(user.Id, message.Text); } } await Bot.SendTextMessageAsync(message.Chat.Id, "You have been unsubscribed from " + message.Text); } isUnSub = false; } else if (message.Text == "/help") { await Bot.SendTextMessageAsync(message.Chat.Id, "Available commands:\n/find - check parameter to find a car\n/subscribe - subscribe on car number\n/unsubscribe - unsubscribe from car number\n/check - check your subscribes in database"); } else { await Bot.SendTextMessageAsync(message.Chat.Id, "Unknown command. Try /help to see list of commands"); } } }; Bot.StartReceiving(); } catch (Telegram.Bot.Exceptions.ApiRequestException ex) { Console.WriteLine(ex.Message); } }
async void do_work(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(""); AIMLbot.Bot lazy = new AIMLbot.Bot(); lazy.loadSettings(); lazy.loadAIMLFromFiles(); lazy.isAcceptingUserInput = false; AIMLbot.User us = new AIMLbot.User("Username", lazy); lazy.isAcceptingUserInput = true; bot.OnCallbackQuery += async(object sc, Telegram.Bot.Args.CallbackQueryEventArgs ev) => { Telegram.Bot.Types.FileToSend s; var message = ev.CallbackQuery.Message; if (ev.CallbackQuery.Data == "callback1") { s = new Telegram.Bot.Types.FileToSend("https://i.pinimg.com/originals/f7/e9/80/f7e980c9700c8395535b835e66f02a59.jpg"); } else if (ev.CallbackQuery.Data == "callback2") { s = new Telegram.Bot.Types.FileToSend("https://static.independent.co.uk/s3fs-public/thumbnails/image/2012/02/29/22/pg-28-sloth-cooke.jpg"); } await bot.SendPhotoAsync(message.Chat.Id, s, "Sure! But... not today :)"); 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[0] == '/') { if (message.Text == "/test") { await bot.SendTextMessageAsync(message.Chat.Id, "Yeah...", replyToMessageId : message.MessageId); } if (message.Text == "/sleep") { var s = new Telegram.Bot.Types.FileToSend("https://beano-uploads-production.imgix.net/store/f4046f22dffe92e3f2167accb6942f788159d0f979f970dcda59f1d0e529?auto=compress&w=752&h=423&fit=min"); await bot.SendPhotoAsync(message.Chat.Id, s, "Yeeeeeeeeeah, sleeeeeeeeep!"); } if (message.Text == "/song") { var s = new Telegram.Bot.Types.FileToSend("http://store.naitimp3.ru/download/0/cGR1a0tRTWJwZW8wMlI2aitkT1UzVkxNdXE2dUNiRTAvcGRkeGphMTVFVTdQcGFURWlFOFQyUGZFTXJ6UVo4cWxVSUNza2NOQUpoZkJOU2ozYTJhWUpLSVdiUTRTanQrVmZnN1hQV1U5Tkk9/eels_i_need_some_sleep_(NaitiMP3.ru).mp3"); await bot.SendAudioAsync(message.Chat.Id, s, "", 4, "Eels", "I need some sleep..."); } if (message.Text == "/work") { var keyboard = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardMarkup( new Telegram.Bot.Types.InlineKeyboardButtons.InlineKeyboardButton[][] { // First row new [] { // First column new Telegram.Bot.Types.InlineKeyboardButtons.InlineKeyboardCallbackButton("Work", "callback1"), // Second column new Telegram.Bot.Types.InlineKeyboardButtons.InlineKeyboardCallbackButton("Work harder", "callback2") }, } ); await bot.SendTextMessageAsync(message.Chat.Id, "Hmmmm... What should I do?..!", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0, keyboard); } } else if ((message.Text[0] >= 'а' && message.Text[0] <= 'я') || (message.Text[0] >= 'А' && message.Text[0] <= 'Я')) { await bot.SendTextMessageAsync(message.Chat.Id, "I'm too lazy to learn russian, sorry...", replyToMessageId : message.MessageId); } else { AIMLbot.Request r = new AIMLbot.Request(message.Text, us, lazy); AIMLbot.Result res = lazy.Chat(r); await bot.SendTextMessageAsync(message.Chat.Id, res.Output, 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; string key = "622335668:AAEv62L9dRi4BH6JVyW8gfEg-tCmd-qTRXo"; try { var Bot = new Telegram.Bot.TelegramBotClient(key); await Bot.SetWebhookAsync(""); // Callback'и от кнопок Bot.OnCallbackQuery += async(object sc, Telegram.Bot.Args.CallbackQueryEventArgs ev) => { var message = ev.CallbackQuery.Message; await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); if (ev.CallbackQuery.Data == "callback0") { await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "You hav choosen " + ev.CallbackQuery.Data, true); } else if (ev.CallbackQuery.Data.Contains("correctAnswer")) { await Bot.SendTextMessageAsync(message.Chat.Id, "Вірно!", replyToMessageId : message.MessageId); await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // видаляє очікування (годинник) GetQuestion(Bot, ev, message); string tCountry = ev.CallbackQuery.Data.Replace("correctAnswer", ""); BotAs.RightAnswer(tCountry); } else if (ev.CallbackQuery.Data.Contains("wrongAnswer")) { await Bot.SendTextMessageAsync(message.Chat.Id, "Емм..Ні. Йдем далі...", replyToMessageId : message.MessageId); await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // видаляє очікування (годинник) GetQuestion(Bot, ev, message); BotAs.WrongAnswer(); } else if (ev.CallbackQuery.Data.Contains("Continent:")) { string tContinent = ev.CallbackQuery.Data.Replace("Continent:", ""); await Bot.SendTextMessageAsync(message.Chat.Id, "Хмм, сміливо!", replyToMessageId : message.MessageId); BotAs.ChooseContinent(tContinent); GetQuestion(Bot, ev, message); } }; 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.Text) { if (message.Text == "/hello") { await Bot.SendTextMessageAsync(message.Chat.Id, "Хелова", replyToMessageId : message.MessageId); } if (message.Text == "/getimage") { await Bot.SendPhotoAsync(message.Chat.Id, "https://static.365info.kz/uploads/2019/03/a346a3729504594579883eeb12a38d80.jpg", "Та й таке!"); } if (message.Text == "/stopgame") { await Bot.SendTextMessageAsync(message.Chat.Id, "Гру завершено! Правильних: " + BotAs.RightAnswers + " з " + (BotAs.WrongAnswers + BotAs.RightAnswers), replyToMessageId : message.MessageId); BotAs.OverGame(); } if (message.Text == "/startgame") { BotAs.StartGame(); List <string> continents = BotAs.GetContinents(); continents.Add("Все"); Telegram.Bot.Types.ReplyMarkups.InlineKeyboardButton[] Keys = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardButton[continents.Count]; int i = 0; foreach (string continent in continents) { Keys[i] = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardButton { Text = continent, CallbackData = "Continent:" + continent }; i++; } var keyboard = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardMarkup( new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardButton[][] { Keys } ); await Bot.SendTextMessageAsync(message.Chat.Id, "З чого розпочнемо гру?", replyMarkup : keyboard); } } }; Bot.StartReceiving(); } catch (Telegram.Bot.Exceptions.ApiRequestException ex) { Console.WriteLine(ex.Message); } }
async void GetQuestion(Telegram.Bot.TelegramBotClient Bot, Telegram.Bot.Args.CallbackQueryEventArgs ev, Telegram.Bot.Types.Message message) { await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); if (!BotAs.GameStarted) { BotAs = new BotAssistent(); } Country country = BotAs.GetRandomCountry(); string tCountry1 = country.Name; string tCapital1 = country.Capital; string tFlagPath = country.Flag; string tCapital2 = BotAs.GetRandomCapital(tCapital1, ""); string tCapital3 = BotAs.GetRandomCapital(tCapital1, tCapital2); //Визначаємо рандомно порядок правильної відповіді Random rnd = new Random(); int rndValue = rnd.Next(1, 4); Dictionary <int, string> dic = new Dictionary <int, string>(); dic.Add(rndValue, tCapital1); if (rndValue == 1) { dic.Add(2, tCapital2); dic.Add(3, tCapital3); } else if (rndValue == 2) { dic.Add(1, tCapital2); dic.Add(3, tCapital3); } else { dic.Add(1, tCapital2); dic.Add(2, tCapital3); } dic = dic.OrderBy(x => x.Key).ToDictionary(y => y.Key, z => z.Value); var keyboard = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardMarkup( new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardButton[][] { new [] { new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardButton { Text = dic[1], CallbackData = (rndValue == 1) ? "correctAnswer" + tCountry1 : "wrongAnswer1" }, new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardButton { Text = dic[2], CallbackData = (rndValue == 2) ? "correctAnswer" + tCountry1 : "wrongAnswer2" }, new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardButton { Text = dic[3], CallbackData = (rndValue == 3) ? "correctAnswer" + tCountry1 : "wrongAnswer3" }, }, } ); await Bot.SendTextMessageAsync(message.Chat.Id, tCountry1 + " ?", replyMarkup : keyboard); await Bot.SendPhotoAsync(message.Chat.Id, tFlagPath, ""); }
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(""); // Обязательно! убираем старую привязку к вебхуку для бота // Callback'и от кнопок Bot.OnCallbackQuery += async(object sc, Telegram.Bot.Args.CallbackQueryEventArgs ev) => { var message = ev.CallbackQuery.Message; if (ev.CallbackQuery.Data == "instruction") { await Bot.SendTextMessageAsync(message.Chat.Id, "Инструкция по эксплуатации:" + "\n\n1. Будьте терпеливы.\nУбедительная просьба не тыкать его палкой по крайней мере пока он работает. Он очень обидчивый."+ "\n\n2. Убедитесь в том, что введенные данные правильны ( это можно сделать с помощью команды /check )"+ "\n\n3. Воспользуйтесь командой /work для получения оценок. Терпеливо ждите окончания процесса (это не так много времени занимает)"); await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // отсылаем пустое, чтобы убрать "часики" на кнопке } else if (ev.CallbackQuery.Data == "faq") { await Bot.SendTextMessageAsync(message.Chat.Id, "FAQ:" + "\n\n1. Почему он так долго работает?\n\nОн добросовестно относится к своей работе и очень старается помочь Вам."+ "\n\n2. Что делать, если не выводит оценки?\n\nДождаться завершения работы. По завершению работы бот уведомит об её успешном или не очень результате. При каждом обращении к нему, у бота есть 3 попытки получить доступ к данным электронного дневника, но получается это не всегда в силу непредсказуемых обстоятельств (например: Ростелеком)."+ "\n\n3. Как поддержать разработчика?\n\nЭто не очень популярный вопрос, но всё же я на него отвечу :)"+ "\nПоддержать разработчика можно монетой, узнав реквизиты тыкнув на соответствующую кнопку. Сумма пожертвования никак не повлияет на работу бота, но разработчику будет очень приятно и может быть он прислушается к просьбам пользователей."); await Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // отсылаем пустое, чтобы убрать "часики" на кнопке } else if (ev.CallbackQuery.Data == "support") { if (message.Chat.Id != 402256119) { // Log info await Bot.SendTextMessageAsync(402256119, $"{DateTime.Now}:\nПользователь {message.Chat.FirstName} {message.Chat.LastName} нажал на кнопку поддержки"); } await Bot.SendTextMessageAsync(message.Chat.Id, "Поддержка:" + "\nP.S. Автор ни в коем случае ни к чему не призывает и не обязывает." + "\nМне правда будет очень приятно :з" + "\n\nПоддержать \"программиста\" можно следующими способами:"); await Bot.SendTextMessageAsync(message.Chat.Id, "1. Карта Сбербанка:"); await Bot.SendTextMessageAsync(message.Chat.Id, "5469550037901797"); await Bot.SendTextMessageAsync(message.Chat.Id, "2. Яндекс кошелёк:"); await Bot.SendTextMessageAsync(message.Chat.Id, "410013502974226"); 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 == "/start") { bool newUser = true; string[] data = new string[2]; SqlDataReader sqlReader = null; SqlCommand command = new SqlCommand("SELECT ChatId, Login, Password FROM [Data]", sqlConnection); try { sqlReader = await command.ExecuteReaderAsync(); while (await sqlReader.ReadAsync()) { if (Convert.ToString(sqlReader["ChatId"]) == Convert.ToString(message.Chat.Id)) { newUser = false; data[0] = Convert.ToString(sqlReader["Login"]); data[1] = Convert.ToString(sqlReader["Password"]); break; } } } catch (Exception ex) { await Bot.SendTextMessageAsync(402256119, $"{DateTime.Now}: Начальник, случилась оказия!\n\n{ex.Message.ToString()}\n\n{ex.Source.ToString()}"); } finally { if (sqlReader != null) { sqlReader.Close(); } } if (newUser) { await Bot.SendTextMessageAsync(message.Chat.Id, "Привет! Я бот Параграф. Давай дружить.\nМне нужно, чтобы ты сказал мне логин и пароль. Тогда я думаю смогу тебе помочь"); await Bot.SendTextMessageAsync(message.Chat.Id, "Введи их пожалуйста в одном сообщении через пробел"); SqlCommand commandInsert = new SqlCommand("INSERT INTO [Data] (ChatId)VALUES(@ChatId)", sqlConnection); commandInsert.Parameters.AddWithValue("ChatId", Convert.ToString(message.Chat.Id)); await commandInsert.ExecuteNonQueryAsync(); // Log info await Bot.SendTextMessageAsync(402256119, $"{DateTime.Now}: Новый пользователь {message.Chat.FirstName} {message.Chat.LastName}"); } else { await Bot.SendTextMessageAsync(message.Chat.Id, $"Я тебя помню. Кажется ты уже пользовался моими услугами.\nПроверь пожалуйста свои данные:\n{data[0]}\n{data[1]}"); } } else if (message.Text[0] != '/' && message.Text.Contains(" ") && message.Text.Split().Count() == 2) { if (botFree) { string[] data = message.Text.Split(); // Cheching correct format of e-mail & password string emailPattern = @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$"; Regex regexLogin = new Regex(emailPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); string passwordPattern = @"^(?=.*[a-z])(?=.*[0-9])"; Regex regexPass = new Regex(passwordPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); if (!regexLogin.IsMatch(data[0])) { await Bot.SendTextMessageAsync(message.Chat.Id, "Неправильный формат почты.\nПопробуй еще раз."); } else if (!regexPass.IsMatch(data[1])) { await Bot.SendTextMessageAsync(message.Chat.Id, "Неправильный формат пароля.\nПопробуй еще раз."); } else { SqlCommand command = new SqlCommand("UPDATE [Data] SET [Login]=@Login, [Password]=@Password, [Name]=@Name WHERE [ChatId]=@ChatId", sqlConnection); command.Parameters.AddWithValue("Login", data[0]); command.Parameters.AddWithValue("Password", data[1]); command.Parameters.AddWithValue("Name", message.Chat.FirstName + " " + message.Chat.LastName); command.Parameters.AddWithValue("ChatId", Convert.ToString(message.Chat.Id)); await command.ExecuteNonQueryAsync(); await Bot.SendTextMessageAsync(message.Chat.Id, "Хорошо, я запомнил.\nЕсли ты ввёл почту и пароль правильно, то всё будет хорошо"); await Bot.SendTextMessageAsync(message.Chat.Id, "Теперь введи команду /work, чтобы посмотреть свои оценки"); } } else { await Bot.SendTextMessageAsync(message.Chat.Id, botBusyMessage); } } else if (message.Text == "/work") { if (botFree) { botFree = false; int countOfViews = 0; await Bot.SendTextMessageAsync(message.Chat.Id, "Работаю..."); string currentUserLogin = ""; string currentUserPassword = ""; SqlDataReader sqlReader = null; SqlCommand command = new SqlCommand("SELECT Login, Password, Views FROM [Data] WHERE [ChatId]=@ChatId", sqlConnection); command.Parameters.AddWithValue("ChatId", Convert.ToString(message.Chat.Id)); try { sqlReader = await command.ExecuteReaderAsync(); while (await sqlReader.ReadAsync()) { currentUserLogin = Convert.ToString(sqlReader["Login"]); currentUserPassword = Convert.ToString(sqlReader["Password"]); countOfViews = Convert.ToInt32(Convert.ToString(sqlReader["Views"])); } await Bot.SendTextMessageAsync(message.Chat.Id, "1-ая ступень..."); } catch (Exception ex) { await Bot.SendTextMessageAsync(402256119, $"{DateTime.Now}: Начальник, случилась оказия!\n\n{ex.Message.ToString()}\n\n{ex.Source.ToString()}"); } finally { if (sqlReader != null) { sqlReader.Close(); } } User user = new User(currentUserLogin, currentUserPassword); await Bot.SendTextMessageAsync(message.Chat.Id, "2-ая ступень..."); List <string> data = await user.GetInfoAsync(); int t = 3; while (data.Count < 1 && t <= 5) { await Bot.SendTextMessageAsync(message.Chat.Id, $"{t}-ая ступень..."); data = await user.GetInfoAsync(); t++; } if (t <= 5) { if (user.Names.Count == 1) { if (user.Grades[0].Contains("Электив")) { await Bot.SendTextMessageAsync(message.Chat.Id, user.Names[0] + "\n\n" + user.Grades[0].Substring(0, user.Grades[0].IndexOf("Электив"))); } else { await Bot.SendTextMessageAsync(message.Chat.Id, user.Names[0] + "\n\n" + user.Grades[0]); } } else { for (int i = 0; i < user.Names.Count; i++) { if (user.Grades[i].Contains("Электив")) { await Bot.SendTextMessageAsync(message.Chat.Id, user.Names[i] + "\n\n" + user.Grades[i].Substring(0, user.Grades[i].IndexOf("Электив"))); } else { await Bot.SendTextMessageAsync(message.Chat.Id, user.Names[i] + "\n\n" + user.Grades[i]); } } } // Update count of views try { SqlCommand commandLogInfo = new SqlCommand("UPDATE [Data] SET [Views]=@Views WHERE [ChatId]=@ChatId", sqlConnection); commandLogInfo.Parameters.AddWithValue("Views", Convert.ToString(countOfViews + 1)); commandLogInfo.Parameters.AddWithValue("ChatId", Convert.ToString(message.Chat.Id)); await commandLogInfo.ExecuteNonQueryAsync(); } catch (Exception ex) { await Bot.SendTextMessageAsync(402256119, $"{DateTime.Now}: Начальник, случилась оказия!\n\n{ex.Message.ToString()}\n\n{ex.Source.ToString()}"); } finally { // Log info if (message.Chat.Id != 402256119) { await Bot.SendTextMessageAsync(402256119, $"{DateTime.Now}: Вход\nПользователь {message.Chat.FirstName} {message.Chat.LastName} ({countOfViews + 1})\n{currentUserLogin}"); } } } else { await Bot.SendTextMessageAsync(message.Chat.Id, "Не получилось :(\nПопробуй ещё раз"); } botFree = true; } else { await Bot.SendTextMessageAsync(message.Chat.Id, botBusyMessage); } } else if (message.Text == "/check") { if (botFree) { string[] data = new string[2]; SqlDataReader sqlReader = null; SqlCommand command = new SqlCommand("SELECT Login, Password FROM [Data] WHERE [ChatId]=@ChatId", sqlConnection); command.Parameters.AddWithValue("ChatId", Convert.ToString(message.Chat.Id)); try { sqlReader = await command.ExecuteReaderAsync(); while (await sqlReader.ReadAsync()) { data[0] = Convert.ToString(sqlReader["Login"]); data[1] = Convert.ToString(sqlReader["Password"]); } await Bot.SendTextMessageAsync(message.Chat.Id, "Ты хотел проверить информацию.\nВот твои данные:"); await Bot.SendTextMessageAsync(message.Chat.Id, data[0] + "\n" + data[1]); await Bot.SendTextMessageAsync(message.Chat.Id, "Если хочешь изменить информацию о себе, просто отправь мне логин и пароль через пробел.\nЯ пойму ;)"); } catch (Exception ex) { await Bot.SendTextMessageAsync(402256119, $"{DateTime.Now}: Начальник, случилась оказия!\n\n{ex.Message.ToString()}\n\n{ex.Source.ToString()}"); } finally { if (sqlReader != null) { sqlReader.Close(); } } } else { await Bot.SendTextMessageAsync(message.Chat.Id, botBusyMessage); } } else if (message.Text == "/help") { var keyboard = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardMarkup( new Telegram.Bot.Types.InlineKeyboardButton[][] { // First row new [] { new Telegram.Bot.Types.InlineKeyboardButton("FAQ", "faq"), }, // Second row new [] { new Telegram.Bot.Types.InlineKeyboardButton("Инструкция", "instruction"), }, // Third row new [] { new Telegram.Bot.Types.InlineKeyboardButton("Поддержать разработчика", "support"), }, } ); await Bot.SendTextMessageAsync(message.Chat.Id, "Справка:", false, false, 0, keyboard, Telegram.Bot.Types.Enums.ParseMode.Default); } else if (message.Text == "/revolution") { await Bot.SendPhotoAsync(message.Chat.Id, "http://aftamat4ik.ru/wp-content/uploads/2017/03/photo_2016-12-13_23-21-07.jpg", "Revolution!"); } else { bool madeOfDigits = true; string msg = message.Text.Trim(); int sum = 0; for (int i = 0; i < msg.Length; i++) { if (msg[i] >= '0' && msg[i] <= '9') { sum += (msg[i] - '0'); } else { madeOfDigits = false; break; } } if (madeOfDigits) { await Bot.SendTextMessageAsync(message.Chat.Id, $"Средний балл: {(float)sum/msg.Length}"); } } } }; // запускаем прием обновлений Bot.StartReceiving(); } catch (Telegram.Bot.Exceptions.ApiRequestException ex) { Console.WriteLine(ex.Message); // если ключ не подошел - пишем об этом в консоль отладки } }