Ejemplo n.º 1
0
        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); // если ключ не подошел - пишем об этом в консоль отладки
            }
        }
Ejemplo n.º 2
0
 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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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, "");
        }
Ejemplo n.º 7
0
        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); // если ключ не подошел - пишем об этом в консоль отладки
            }
        }