Beispiel #1
0
        public static IEnumerable <InlineKeyboardButton[]> GetInlineKeyboard(IReadOnlyList <string> stringArray)
        {
            var rows    = stringArray.Count / 4;
            var haveMod = false;
            var columns = 4;
            var mod     = stringArray.Count % 4;

            if (mod != 0)
            {
                rows++;
                haveMod = true;
            }
            var k = 0;
            var keyboardInline = new InlineKeyboardButton[rows][];

            for (var i = 0; i < rows; i++)
            {
                InlineKeyboardButton[] keyboardButton;


                if (i == rows - 1 && haveMod)
                {
                    keyboardButton = new InlineKeyboardButton[mod];
                    columns        = mod;
                }
                else
                {
                    keyboardButton = new InlineKeyboardButton[4];
                }

                for (var j = 0; j < columns; j++)
                {
                    keyboardButton[j] = InlineKeyboardButton.WithCallbackData(stringArray[k]);
                    k++;
                }

                keyboardInline[i] = keyboardButton;
            }
            return(keyboardInline);
        }
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }
            var name = message.From.FirstName;

            Console.WriteLine(message.Text + " от " + name);
            switch (message.Text)
            {
            case "/start":
                var text = "Команда для вызова меню - /menu";
                await Bot.SendTextMessageAsync(e.Message.From.Id, text);

                break;

            case "/menu":
                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new[]
                    {
                        InlineKeyboardButton.WithUrl("Кинопоиск", "https://www.kinopoisk.ru/"),
                        InlineKeyboardButton.WithUrl("IMDb", "https://www.imdb.com/")
                    },
                    new[]
                    {
                        InlineKeyboardButton.WithCallbackData("Поиск случайного фильма")
                    }
                });
                await Bot.SendTextMessageAsync(message.From.Id, "Выбери пункт меню", replyMarkup : inlineKeyboard);

                break;

            default:
                break;
            }
        }
Beispiel #3
0
            static async Task StartMessage(Message message)
            {
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new[] { InlineKeyboardButton.WithCallbackData("Доступные стажировки", "/internships") },
                    new[] { InlineKeyboardButton.WithCallbackData("FAQ", "/faq") },
                    new[] { InlineKeyboardButton.WithCallbackData("Правила приёма", "/rules") },
                });

                await Bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text :  GoogleSheetsInterference.GetHelloMessage()
                    );

                await Bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Мои команды:",
                    replyMarkup : inlineKeyboard
                    );
            }
Beispiel #4
0
        static async Task SendInlineKeyboard(Message message)
        {
            await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

            await Task.Delay(500);

            var inlineKeyboard = new InlineKeyboardMarkup(new[]
            {
                new []
                {
                    InlineKeyboardButton.WithCallbackData("1.1", "1.2"),
                },
                new []
                {
                    InlineKeyboardButton.WithUrl("Залететь на Хабр", "https://habr.com/ru/"),
                }
            });
            await Bot.SendTextMessageAsync(
                chatId : message.Chat.Id,
                text : "choose your destiny",
                replyMarkup : inlineKeyboard
                );
        }
        /// <summary>
        /// Вызывает команду
        /// </summary>
        /// <param name="message">принимает сообщение</param>
        /// <param name="client">Ссылка на экземпляр бота</param>
        public async void Execute(Message message, TelegramBotClient client)
        {
            var chatId    = message.Chat.Id;
            var messageId = message.MessageId;
            var keyboard  = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardMarkup(new[]
            {
                new [] // first row
                {
                    InlineKeyboardButton.WithUrl("1.1", "www.google.com"),
                    InlineKeyboardButton.WithCallbackData("1.2", "callback1"),
                },
                new [] // second row
                {
                    InlineKeyboardButton.WithCallbackData("2.1", "callback2"),
                    InlineKeyboardButton.WithCallbackData("2.2"),
                }
            });
            await client.SendTextMessageAsync(chatId, "Жамкни!", replyMarkup : keyboard);

            client.OnCallbackQuery += async(object sender, Telegram.Bot.Args.CallbackQueryEventArgs ev) =>
            {
                var CBQMessage = ev.CallbackQuery.Message;
                if (ev.CallbackQuery.Data == "callback1")
                {
                    await client.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Ты выбрал " + ev.CallbackQuery.Data, true);
                }
                else
                if (ev.CallbackQuery.Data == "callback2")
                {
                    await client.SendTextMessageAsync(CBQMessage.Chat.Id, "тест", replyToMessageId : CBQMessage.MessageId);

                    await client.AnswerCallbackQueryAsync(ev.CallbackQuery.Id); // отсылаем пустое, чтобы убрать "часики" на кнопке
                }
            };
            client.StartReceiving();
        }
Beispiel #6
0
 public static InlineKeyboardMarkup MainMenuForMainAdmin() => new InlineKeyboardMarkup(
     new[]
 {
     new []
     {
         InlineKeyboardButton.WithCallbackData("Выбрать девушку"),
     },
     new []
     {
         InlineKeyboardButton.WithCallbackData("Добавить новую девушку"),
     },
     new []
     {
         InlineKeyboardButton.WithCallbackData("Удалить девушку из списка"),
     },
     new []
     {
         InlineKeyboardButton.WithCallbackData("Показать статистику"),
     },
     new []
     {
         InlineKeyboardButton.WithCallbackData("Оповестить всех 'Я в сети'")
     }
 });
Beispiel #7
0
        static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
        {
            if (update.Type == UpdateType.Message && update.Message != null && update.Message.Type == MessageType.Text)
            {
                long   chatId      = update.Message.Chat.Id;
                string messageText = update.Message.Text;
                if (messageText == "/start")
                {
                    string menu = "/start - запуск\n/inline - меню\n/keyboard - сообщения\n/clearkeyboard - убрать кнопки";
                    await botClient.SendTextMessageAsync(chatId, menu, cancellationToken : cancellationToken);
                }
                else if (messageText == "/inline")
                {
                    InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup(new[]
                    {
                        new[]
                        {
                            InlineKeyboardButton.WithUrl("VK", "https://vk.com/mishanya167"),
                            InlineKeyboardButton.WithUrl("LinkedIn", "https://www.linkedin.com/in/%D0%BC%D0%B8%D1%85%D0%B0%D0%B8%D0%BB-%D0%BA%D0%BE%D0%B2%D0%B0%D0%BB%D1%91%D0%B2-79637b164/")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("Дата и время", "DateTime"),
                            InlineKeyboardButton.WithCallbackData("Картинка", "Photo")
                        }
                    });
                    await botClient.SendTextMessageAsync(chatId, "Выберите пункт меню: ", replyMarkup : inlineKeyboard, cancellationToken : cancellationToken);
                }
                else if (messageText == "/keyboard")
                {
                    ReplyKeyboardMarkup replayKeyBoard = new ReplyKeyboardMarkup(new[]
                    {
                        new[]
                        {
                            new KeyboardButton("Привет"),
                            new KeyboardButton("Как дела?")
                        },
                        new[]
                        {
                            KeyboardButton.WithRequestContact("Контакт"),
                            KeyboardButton.WithRequestLocation("Геолокация")
                        }
                    });
                    await botClient.SendTextMessageAsync(chatId, "Выберите сообщение.", replyMarkup : replayKeyBoard, cancellationToken : cancellationToken);
                }
                else if (messageText == "/clearkeyboard")
                {
                    await botClient.SendTextMessageAsync(chatId, "Кнопки убраны.", replyMarkup : new ReplyKeyboardRemove(), cancellationToken : cancellationToken);
                }
                else
                {
                    SessionsClient sessionsClient = await SessionsClient.CreateAsync();

                    SessionName sessionName = new SessionName("small-talk-srqi", Guid.NewGuid().ToString());
                    QueryInput  queryInput  = new QueryInput
                    {
                        Text = new TextInput
                        {
                            Text         = messageText,
                            LanguageCode = "ru-Ru"
                        }
                    };
                    DetectIntentResponse response = await sessionsClient.DetectIntentAsync(sessionName, queryInput);

                    if (response.QueryResult.FulfillmentMessages.Count > 0)
                    {
                        await botClient.SendTextMessageAsync(chatId, response.QueryResult.FulfillmentText, cancellationToken : cancellationToken);
                    }
                    else
                    {
                        await botClient.SendTextMessageAsync(chatId, "Прости, я тебя не понимаю.", cancellationToken : cancellationToken);
                    }
                }
            }
            if (update.Type == UpdateType.CallbackQuery && update.CallbackQuery.Message != null)
            {
                string data = update.CallbackQuery.Data;
                if (data == "DateTime")
                {
                    await botClient.AnswerCallbackQueryAsync(update.CallbackQuery.Id, DateTime.Now.ToString(), cancellationToken : cancellationToken);
                }
                if (data == "Photo")
                {
                    await botClient.SendPhotoAsync(update.CallbackQuery.Message.Chat.Id, "https://big-rostov.ru/wp-content/uploads/2021/04/i-7-1.jpg", cancellationToken : cancellationToken);
                }
            }
        }
Beispiel #8
0
        private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }

            switch (message.Text.Split(' ').First())
            {
            // send inline keyboard
            case "/inline":
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                await Task.Delay(500);     // simulate longer running task

                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new []     // first row
                    {
                        InlineKeyboardButton.WithCallbackData("First"),
                        InlineKeyboardButton.WithCallbackData("Second"),
                    },
                    new []     // second row
                    {
                        InlineKeyboardButton.WithCallbackData("First"),
                        InlineKeyboardButton.WithCallbackData("Second"),
                    }
                });

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : inlineKeyboard);

                break;

            // send custom keyboard
            case "/keyboard":
                ReplyKeyboardMarkup ReplyKeyboard = new[]
                {
                    new[] { "First", "Second" },
                    new[] { "First", "Second" },
                };

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Choose",
                    replyMarkup : ReplyKeyboard);

                break;

            // request location or contact
            case "/request":
                var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Who or Where are you?",
                    replyMarkup : RequestReplyKeyboard);

                break;

            default:
                const string usage = @"
Usage:
/inline   - send inline keyboard
/keyboard - send custom keyboard
/request  - request location or contact
/subscribe - add to db datas";

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    usage,
                    replyMarkup : new ReplyKeyboardRemove());

                break;
            }
        }
Beispiel #9
0
        private static async void BotOnCallbackQueryReceived(object sender, CallbackQueryEventArgs e)
        {
            var    message = e.CallbackQuery.Message;
            string data    = e.CallbackQuery.Data;

            switch (data)
            {
            case "Абитуриент":
                var keyboard_first = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Как поступить в SU?", "first")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Список документов для поступления", "second")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("В какое время можно подать документы? Можно ли сделать это в субботу или воскресенье?", "third")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Могу ли я подать документы лично, если мне меньше 18 лет? Или обязательно присутствие родителей?", "four")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Контакты приемной комиссии?", "five")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("График работы приемной комиссии?", "six")
                    }
                });

                await Bot.SendTextMessageAsync(message.Chat.Id, e.CallbackQuery.Message.Text, replyMarkup : keyboard_first);

                Bot.OnCallbackQuery += async(object sc, CallbackQueryEventArgs ev) =>
                {
                    var message = ev.CallbackQuery.Message;
                    switch (ev.CallbackQuery.Data)
                    {
                    case "first":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Зарегистрироваться в онлайн режиме по адресу kb.satbayev.university");

                        break;

                    case "second":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "1. Заявление на поступление 2.Аттестат о среднем общем или диплом о начальном профессиональном или среднем профессиональном образовании(оригинал) 3.Фото формата 3х4 – 6шт 4.Медицинская справка по форме 086 - У 5.Прививочная карта по форме 063 6.Снимок флюорографии 7.Документ, подтверждающий преимущественное право 8.Сертификат ЕНТ или комплексного тестирования 9.Свидетельство о присуждении гранта(при его наличии) 10.Копия удостоверении личности 11.Приписное свидетельство ");

                        break;

                    case "third":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Подать документы можно в рабочие часы Приёмной комиссии. Они будут объявлены ближе к старту приёмной кампании.");

                        break;

                    case "four":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Вы можете подать документы и самостоятельно, только не забудьте взять с собой паспорт. Но помните: если вы поступаете на место на коммерческой основе, то заключить договор, будучи несовершеннолетним, вы самостоятельно не сможете — необходимо присутствие родителя. Кроме того, если вам меньше 18, вам обязательно нужно будет принести форму согласия на обработку ваших персональных данных, подписанную родителем или опекуном (без неё документы не примут!).");

                        break;

                    case "five":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Республика Казахстан, г. Алматы, ул. Сатпаева 22а, Главный учебный корпус (ГУК). Вход со стороны ул. Байтурсынова. +7 (727) 292 7301  +7 (727) 292 7779  +7 (727) 320 4112 [email protected]");

                        break;

                    case "six":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "График работы: пн - пт, с 8:30 до 17:30 сб, с 9:00 до 17:00 ");

                        break;
                    }
                };
                break;


            case "Бакалавриат":
                var keyboard_second = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Есть ли общежитие? Какие критерии и требования для получения комнаты в общежитии SU?", "first"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Имеется ли в университете военная кафедра? Есть ли необходимость доплаты за военную кафедру?", "second"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Что такое кредитная технология обучения?", "third"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Какие студентческие сообщества есть в университете?", "forth"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Как вступить в один из таких сообществ?", "fifth"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("При каких обстоятельствах студент лишается гранта", "sixth"),
                    }
                });

                await Bot.SendTextMessageAsync(message.Chat.Id, e.CallbackQuery.Message.Text, replyMarkup : keyboard_second);

                Bot.OnCallbackQuery += async(object sc, CallbackQueryEventArgs ev) =>
                {
                    var message = ev.CallbackQuery.Message;
                    switch (ev.CallbackQuery.Data)
                    {
                    case "firth":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Да, в SU есть общежитие. Для того, чтобы получить место в общежитии необходимо написать заявление, все заявления в конце августа рассматривает комиссия. В первую очередь места предоставляются иногородним первокурсникам для благополучной адаптации и привыканию к новому месту жительства в первый год обучения. Вторым не маловажным условием для получения места в общежитии является материальное положение студента (при наличии подтверждающих документов).");

                        break;

                    case "second":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "В университете имеется военная кафедра, зачисление юношей на военную подготовку производится после 1 курса на конкурсной основе. Для обучения на военной кафедре выделяется государственный заказ.");

                        break;

                    case "third":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Кредитная технология обучения – способ организации учебного процесса, при котором обучающиеся в определенных границах имеют возможность индивидуально планировать последовательность образовательной траектории.");

                        break;

                    case "forth":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "«Жас Отан», «Лига Волонтеров», Дебатные клубы, Enactus, Society of Automotive Engineers, American Association of Petroleum Geologists, Society of Petroleum Engineers");

                        break;

                    case "fifth":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Ежегодно в сентябре проводится «Ярмарка студенческих сообществ», во время которой каждый желающий может открыть и презентовать свое сообщество или вступить в то сообщество, которое ему понравилось.");

                        break;

                    case "sixth":
                        await Bot.SendTextMessageAsync(message.Chat.Id, "Обучающиеся, обладатели образовательных грантов, оставленные на повторный курс обучения, лишаются образовательного гранта и продолжают свое дальнейшее обучение на платной основе. Если годовой gpa будет меньше 1,6 то студент теряет государственный образовательный грант. Если студент в итоге за дисциплину получает удовлетворительную оценку, то студент теряет стипендию.");

                        break;
                    }
                };
                break;


            case "Преподаватель":
                var keyboard_third = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithUrl("Академический календарь", "https://drive.google.com/uc?export=download&id=10Z7T0DhO08kwQLA76YI1aYqkP8ZVxBSK"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithUrl("Скачать форму отчета", "https://drive.google.com/uc?export=download&id=1nEEsECD2od_zsFZlgLMWKUnB3f3VOK0T"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("", "third"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("", "forth"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("", "fifth"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("", "sixth"),
                    }
                });
                await Bot.SendTextMessageAsync(message.Chat.Id, e.CallbackQuery.Message.Text, replyMarkup : keyboard_third);

                break;

            case "МК":
                var keyboard_fourth = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Главный учебный корпус", "first")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Горно-металлургический институт имени О. Байконурова", "second")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Медицинский пункт", "third")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Нефтянной корпус", "four")
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Военная кафедра", "five")
                    }
                });

                await Bot.SendTextMessageAsync(message.Chat.Id, e.CallbackQuery.Message.Text, replyMarkup : keyboard_fourth);

                Bot.OnCallbackQuery += async(object sc, CallbackQueryEventArgs ev) =>
                {
                    var message = e.CallbackQuery.Message;
                    switch (ev.CallbackQuery.Data)
                    {
                    case "first":
                        float Latitude1  = 43.236422f;
                        float Longitude1 = 76.929755f;
                        await Bot.SendLocationAsync(message.Chat.Id, Latitude1, Longitude1);

                        break;

                    case "second":
                        float Latitude2  = 43.236520f;
                        float Longitude2 = 76.931572f;
                        await Bot.SendLocationAsync(message.Chat.Id, Latitude2, Longitude2);

                        break;

                    case "third":
                        float Latitude3  = 43.237319f;
                        float Longitude3 = 76.934405f;
                        await Bot.SendLocationAsync(message.Chat.Id, Latitude3, Longitude3);

                        break;

                    case "four":
                        float Latitude4  = 43.237093f;
                        float Longitude4 = 76.931374f;
                        await Bot.SendLocationAsync(message.Chat.Id, Latitude4, Longitude4);

                        break;

                    case "five":
                        float Latitude5  = 43.231572f;
                        float Longitude5 = 76.934406f;
                        await Bot.SendLocationAsync(message.Chat.Id, Latitude5, Longitude5);

                        break;
                    }
                };
                break;
            }

            /*if (buttonText == "Картинка")
             * {
             *  await Bot.SendTextMessageAsync(e.CallbackQuery.From.Id, "https://cdn.lifehacker.ru/wp-content/uploads/2019/06/telegram_1560950950.jpg");
             * }
             * else if (buttonText == "Документ")
             * {
             * // await Bot.SendTextMessageAsync(e.CallbackQuery.From.Id, "https://drive.google.com/uc?export=download&id=0B3Rr6xomyKzhc09hSW4xOGt2SmlHYl95ZWpRYnVOZkhwa0NJ");
             * }
             *
             * await Bot.AnswerCallbackQueryAsync(e.CallbackQuery.Id, $"Вы нажали кнопку {buttonText}");*/
        }
        private static async void BotOnMessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }

            string name = $"{message.From.FirstName} {message.From.LastName}";

            Console.WriteLine($"{name} sent message: {message.Text}");

            switch (message.Text)
            {
            case "/start":
            {
                string text =
                    @"List of commands:
 /start - launch bot;
 /inline - show menu;
 /keyboard - show keyboard;";

                await Bot.SendTextMessageAsync(message.From.Id, text);

                break;
            }

            case "/keyboard":
            {
                var replyKeyboard = new ReplyKeyboardMarkup(new[]
                    {
                        new[]
                        {
                            new KeyboardButton("Привет!"),
                            new KeyboardButton("Как дела?")
                        },
                        new[]
                        {
                            new KeyboardButton("Контакт")
                            {
                                RequestContact = true
                            },
                            new KeyboardButton("Геолокация")
                            {
                                RequestLocation = true
                            }
                        }
                    });

                await Bot.SendTextMessageAsync(message.Chat.Id, "Message",
                                               replyMarkup : replyKeyboard);

                break;
            }

            case "/inline":
            {
                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                    {
                        new[]
                        {
                            InlineKeyboardButton.WithUrl("VK", "https://vk.com/id11833696"),
                            InlineKeyboardButton.WithUrl("Telegram", "https://t.me/trakhimovichilya")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("картинка"),
                            InlineKeyboardButton.WithCallbackData("видео")
                        }
                    });

                await Bot.SendTextMessageAsync(message.From.Id, "Select menu",
                                               replyMarkup : inlineKeyboard);

                break;
            }

            default:
            {
                var    response = apiAi.TextRequest(message.Text);
                string answer   = response.Result.Fulfillment.Speech;

                if (answer == "")
                {
                    answer = "Прости, я тебя не понял. Я тупой еще :(.";
                }

                await Bot.SendTextMessageAsync(message.From.Id, answer);

                break;
            }
            }
        }
Beispiel #11
0
        private static async void BotOnMessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }

            string name = $"{message.From.FirstName} {message.From.LastName}";

            Console.WriteLine($"{name} отправил(-а) сообщение: '{message.Text}'");

            switch (message.Text)

            {
            case "/start":
                string text =
                    @" Список команд: 
 /start - запустить бота 
 /hello - поприветствовать
 /callback - вывод меню
 /keyboard - клавиатура";

                await Bot.SendTextMessageAsync(message.From.Id, text);

                break;

            case "/callback":     // для отправки меню
                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new []      // первая строка
                    {
                        InlineKeyboardButton.WithUrl("Github", "Github.com"),
                        InlineKeyboardButton.WithUrl("Instagram", "instagram.com"),
                        InlineKeyboardButton.WithUrl("Telegram", "https://t.me/")
                    },

                    new []      // вторая строка
                    {
                        InlineKeyboardButton.WithCallbackData("Point 1"),
                        InlineKeyboardButton.WithCallbackData("Point 2"),
                    }
                });
                await Bot.SendTextMessageAsync(message.From.Id, "Выберите пункт меню", replyMarkup : inlineKeyboard);

                break;

            case "/keyboard": // клавиатура
                var replyKeyboard = new ReplyKeyboardMarkup(new []
                {
                    new []
                    {
                        new KeyboardButton("Профиль"),
                        new KeyboardButton("О боте")
                    },
                    new []
                    {
                        new KeyboardButton("Контакт"),
                        new KeyboardButton("Геолокация")
                    }
                });
                await Bot.SendTextMessageAsync(message.Chat.Id, "Сообщение", replyMarkup : replyKeyboard);

                break;

            case "/hello":
                string text1 =
                    @"Приветствую!";
                await Bot.SendTextMessageAsync(message.From.Id, text1);

                break;

            default:
                var    response = apiAi.TextRequest(message.Text);    // ответ юзеру
                string answer   = response.Result.Fulfillment.Speech; // получаем ответ от диалогфлоу
                if (answer == "")
                {
                    answer = "Прости, моя твоя не понимать :( ";
                }

                await Bot.SendTextMessageAsync(message.From.Id, answer);

                break;
            }
        }
        private async Task BotOnMessageReceived(Message message)
        {
            Console.WriteLine($"Receive message type: {message.Type}");
            if (message.Type != MessageType.Text)
            {
                return;
            }

            var action = (message.Text.Split(' ').First()) switch
            {
                "/inline" => SendInlineKeyboard(message),
                "/keyboard" => SendReplyKeyboard(message),
                "/photo" => SendFile(message),
                "/request" => RequestContactAndLocation(message),
                "/help" => Usage(message),
                _ => Nope(message)
            };
            await action;

            // Send inline keyboard
            // You can process responses in BotOnCallbackQueryReceived handler
            async Task SendInlineKeyboard(Message message)
            {
                await _bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                // Simulate longer running task
                await Task.Delay(500);

                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    // first row
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("1.1", "11"),
                        InlineKeyboardButton.WithCallbackData("1.2", "12"),
                    },
                    // second row
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("2.1", "21"),
                        InlineKeyboardButton.WithCallbackData("2.2", "22"),
                    }
                });
                await _bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Choose",
                    replyMarkup : inlineKeyboard
                    );
            }

            async Task SendReplyKeyboard(Message message)
            {
                var replyKeyboardMarkup = new ReplyKeyboardMarkup(
                    new KeyboardButton[][]
                {
                    new KeyboardButton[] { "1.1", "1.2" },
                    new KeyboardButton[] { "2.1", "2.2" },
                },
                    resizeKeyboard: true
                    );

                await _bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Choose",
                    replyMarkup : replyKeyboardMarkup

                    );
            }

            async Task SendFile(Message message)
            {
                await _bot.SendChatActionAsync(message.Chat.Id, ChatAction.UploadPhoto);

                const string filePath = @"Files/tux.png";

                using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                var fileName = filePath.Split(Path.DirectorySeparatorChar).Last();
                await _bot.SendPhotoAsync(
                    chatId : message.Chat.Id,
                    photo : new InputOnlineFile(fileStream, fileName),
                    caption : "Nice Picture"
                    );
            }

            async Task RequestContactAndLocation(Message message)
            {
                var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    KeyboardButton.WithRequestLocation("Location"),
                    KeyboardButton.WithRequestContact("Contact"),
                });
                await _bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Who or Where are you?",
                    replyMarkup : RequestReplyKeyboard
                    );
            }

            async Task Usage(Message message)
            {
                const string usage = "Usage:\n" +
                                     "/inline   - send inline keyboard\n" +
                                     "/keyboard - send custom keyboard\n" +
                                     "/photo    - send a photo\n" +
                                     "/request  - request location or contact";
                await _bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : usage,
                    replyMarkup : new ReplyKeyboardRemove()
                    );
            }

            Task Nope(Message message)
            {
                return(Task.CompletedTask);
            }
        }
Beispiel #13
0
        // async OnMessage event task for the bot
        // it has to be async so the bot can be always listening
        private async static void BotClient_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            // Normal text message. Checks wether the message does have text.
            // in case it does, the bot answers.
            #region Text Message
            if (e.Message.Text != null)
            {
                Console.WriteLine($"Received text message in chat {e.Message.Chat.Id}.");

                // the bot sends asynchronously a message to the chat
                await botClient.SendTextMessageAsync(
                    chatId : e.Message.Chat.Id,
                    text : "You said:\n" + e.Message.Text
                    );
            }
            #endregion

            // Normal text message, with all the properties
            // a text message can have.
            #region Text message with properties
            Message textMessage = await botClient.SendTextMessageAsync(
                chatId : e.Message.Chat, // or a chat id: 123456789
                text : "Trying *all the parameters* of `sendMessage` method",
                parseMode : ParseMode.Markdown,
                disableNotification : true,
                replyToMessageId : e.Message.MessageId,
                replyMarkup : new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl(
                                                           "Check sendMessage method",
                                                           "https://core.telegram.org/bots/api#sendmessage"
                                                           ))
                );

            #endregion

            // Almost all of the methods for sending messages return you
            // the message you just sent.
            #region Messages return you the message you sent (as an object)
            Console.WriteLine(
                $"{textMessage.From.FirstName} sent message {textMessage.MessageId} " +
                $"to chat {textMessage.Chat.Id} at {textMessage.Date.ToLocalTime()}. " + // if you don't use ToLocalTime(), the bot will show the UTC time.
                $"It is a reply to message {textMessage.ReplyToMessage.MessageId} " +
                $"and has {textMessage.Entities.Length} message entities."
                );
            #endregion

            // Photo message. It gets the image from a URL on the internet.
            // All images can have captions. You can use HTML or Markdown on them.
            #region Photo Message
            Message photoMessage = await botClient.SendPhotoAsync(
                chatId : e.Message.Chat,
                photo : "https://github.com/TelegramBots/book/raw/master/src/docs/photo-ara.jpg",
                caption : "<b>Ara bird</b>. <i>Source</i>: <a href=\"https://pixabay.com\">Pixabay</a>",
                parseMode : ParseMode.Html
                );

            #endregion

            // Sticker message. Sticker files should be in WebP format.
            // Sends two messages. The first one gets the sticker by passing HTTP URL
            // to WebP sticker file, and the second by reusing the file_id of the
            // first sticker (kinda like a cache?)
            #region Sticker Messages
            Message stickerMessage1 = await botClient.SendStickerAsync(
                chatId : e.Message.Chat,
                sticker : "https://github.com/TelegramBots/book/raw/master/src/docs/sticker-fred.webp"
                );

            Message stickerMessage2 = await botClient.SendStickerAsync(
                chatId : e.Message.Chat,
                sticker : stickerMessage1.Sticker.FileId
                );

            #endregion

            // Audio message. Opens it in Media Player. MP3 Format.
            // Telegram can read metadata from the MP3 file (that's why
            // there are commented properties; the bot gets the same
            // properties, but from the file metadata!)
            #region Audio Message
            Message audioMessage = await botClient.SendAudioAsync(
                e.Message.Chat,
                "https://github.com/TelegramBots/book/raw/master/src/docs/audio-guitar.mp3"

                /*,
                 * performer: "Joel Thomas Hunger",
                 * title: "Fun Guitar and Ukulele",
                 * duration: 91 // in seconds
                 */
                );

            #endregion

            // Voice message. Not opened in Media Player (played directly
            // on the chat). OGG Format.
            // In this case, the OGG file is on our disk!
            #region Voice Message
            Message voiceMessage;
            using (var stream = System.IO.File.OpenRead("C:/Users/Biel/source/repos/TelegramBot/voice-nfl_commentary.ogg"))
            {
                voiceMessage = await botClient.SendVoiceAsync(
                    chatId : e.Message.Chat,
                    voice : stream,
                    duration : 36
                    );
            }
            #endregion


            // You can send MP4 files as a regular video or as a video note.
            // Other video formats must be sent as a file.

            // Video message. They can have caption, reply, and reply markup
            // (like other multimedia messages)
            // You can optionally specify the duration and the resolution
            // of the video. In this case the video is streamed,
            // meaning the user can partly watch the video on stream, without
            // having to download it completely.
            #region Video Message
            Message videoMessage = await botClient.SendVideoAsync(
                chatId : e.Message.Chat,
                video : "https://raw.githubusercontent.com/TelegramBots/book/master/src/docs/video-countdown.mp4",
                thumb : "https://raw.githubusercontent.com/TelegramBots/book/master/src/2/docs/thumb-clock.jpg",
                supportsStreaming : true
                );

            #endregion

            // Video note message. They are shown in circles to the user.
            // They are usually short (1 minute or less).
            // You can send a video note only by the video file or
            // reusing the file_id of another video note.
            // (sending it by its HTTP URL is not supported currently)
            #region Video Note Message
            Message videoNoteMessage;
            using (var stream = System.IO.File.OpenRead("C:/Users/step/Source/Repos/TelegramBotExamples/video-waves.mp4"))
            {
                videoNoteMessage = await botClient.SendVideoNoteAsync(
                    chatId : e.Message.Chat,
                    videoNote : stream,
                    duration : 47,
                    length : 360    // value of width/height
                    );
            }
            #endregion

            // Poll message. They can be sent only to groups and channels.
            // You can optionally send a keyboard with a poll,
            // both inline and a regular one.
            #region Poll Message
            Message pollMessage = await botClient.SendPollAsync(
                chatId : "@group_or_channel_username",
                question : "Did you ever hear the tragedy of Darth Plagueis The Wise?",
                options : new []
            {
                "Yes for the hundredth time!",
                "No, who's that?"
            }
                );

            #endregion

            // To stop the poll, you need to know original chat and message ids
            // (you get them from the Poll object you get on SendPollAsync, the pollMessage)
            #region Closing a Poll
            Poll poll = await botClient.StopPollAsync(
                chatId : pollMessage.Chat.Id,
                messageId : pollMessage.MessageId
                );

            #endregion


            // Filtering messages for commands
            if (e.Message.Text == "/sayhello")
            {
                Message sayHello = await botClient.SendTextMessageAsync
                                   (
                    chatId : e.Message.Chat.Id,
                    text : "Hello! Glad to see you!"
                                   );
            }

            if (e.Message.Text == "/saygoodbye")
            {
                Message sayHello = await botClient.SendTextMessageAsync
                                   (
                    chatId : e.Message.Chat.Id,
                    text : "Bye! Have a nice day!"
                                   );
            }
        }
Beispiel #14
0
        private static async void BotOnMessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }
            string name = $"{message.From.FirstName} {message.From.LastName}";

            Console.WriteLine($"{name} отправил сообщение: {message.Text}");
            switch (message.Text)
            {
            case "/start":
                string text =
                    @"Список команд:
                        /start - запуск бота
                        /menu - вывод меню
                        /keyboard - ввод с клавиатуры";
                await Bot.SendTextMessageAsync(message.From.Id, text);

                break;

            case "/menu":
                var inlineKeyboard = new InlineKeyboardMarkup(new[] {
                    new[]
                    {
                        InlineKeyboardButton.WithUrl("VK ILUSHA", "https://vk.com/special0ps"),
                        InlineKeyboardButton.WithUrl("VK ANDRUSHA", "https://vk.com/id231468284")
                    },
                    new[]
                    {
                        InlineKeyboardButton.WithCallbackData("Картинка"),
                        InlineKeyboardButton.WithCallbackData("Видео")
                    }
                });
                await Bot.SendTextMessageAsync(message.From.Id, "Выберите пункт меню", replyMarkup : inlineKeyboard);

                break;

            case "/keyboard":
                var replyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    new[]
                    {
                        new KeyboardButton("Привет"),
                        new KeyboardButton("Как дела?")
                    },
                    new[]
                    {
                        new KeyboardButton("Контакт")
                        {
                            RequestContact = true
                        },
                        new KeyboardButton("Геолокация")
                        {
                            RequestLocation = true
                        }
                    }
                });
                await Bot.SendTextMessageAsync(message.Chat.Id, "Сообщение", replyMarkup : replyKeyboard);

                break;

            default:
                var    response = apiAi.TextRequest(message.Text);
                string answer   = response.Result.Fulfillment.Speech;
                if (answer == "")
                {
                    answer = "Я тебя не понимаю:(";
                }
                await Bot.SendTextMessageAsync(message.From.Id, answer);

                break;
            }
        }
Beispiel #15
0
        private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message == null || message.Type != MessageType.TextMessage)
            {
                mainInfo(message.Chat.Id);
            }
            else if (message.Text.StartsWith("/getacronym"))
            {
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                string acronym = String.Empty;

                string[] delimiter = { " " };
                if (message.Text.Contains(delimiter[0]))
                {
                    acronym = message.Text.Split(delimiter, StringSplitOptions.RemoveEmptyEntries)[1].Trim();

                    var url = "http://10.10.11.35:3000/earthtionary/acronym/" + acronym;

                    var json = new WebClient().DownloadString(url);

                    List <Acronym> deserializedProduct = JsonConvert.DeserializeObject <List <Acronym> >(json);

                    List <string> allWords = new List <string>();
                    deserializedProduct.ForEach(x =>
                    {
                        x.word.ToList().ForEach(y =>
                        {
                            allWords.Add(y);
                        });
                    });

                    string[] words = allWords.ToArray();

                    InlineKeyboardButton[] buttons = new InlineKeyboardButton[words.Length];

                    if (words.Length > 0)
                    {
                        int i = 0;
                        words.ToList().ForEach(x =>
                        {
                            buttons[i] = new InlineKeyboardButton(x);
                            i++;
                        });

                        var keyboard = new InlineKeyboardMarkup(buttons);

                        await Task.Delay(500);

                        await Bot.SendTextMessageAsync(message.Chat.Id, "Choose",
                                                       replyMarkup : keyboard);
                    }
                    else
                    {
                        await Bot.SendTextMessageAsync(message.Chat.Id, "No result was founded");
                    }
                }
                else
                {
                    await Bot.SendTextMessageAsync(message.Chat.Id, "You have to send an acronym, if you want to find a definition");
                }
            }
            else if (message.Text.StartsWith("/getdefinition"))
            {
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                string acronym = String.Empty;

                string[] delimiter = { " " };
                if (message.Text.Contains(delimiter[0]))
                {
                    string[] def = message.Text.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);

                    if (def.Length > 1)
                    {
                        string word = String.Empty;

                        int i = 0;
                        def.ToList().ForEach(x =>
                        {
                            if (i != 0)
                            {
                                if (String.IsNullOrEmpty(word))
                                {
                                    word += x;
                                }
                                else
                                {
                                    word += " " + x;
                                }
                            }

                            i++;
                        });

                        var url = "http://10.10.11.35:3000/earthtionary/word/" + word.Replace(" ", "%20");

                        var json = new WebClient().DownloadString(url);

                        List <Acronym> deserializedProduct = JsonConvert.DeserializeObject <List <Acronym> >(json);

                        int    j          = 1;
                        string definition = "Definition of " + word + ":\r\n\r\n";
                        deserializedProduct.ForEach(x =>
                        {
                            if (!String.IsNullOrEmpty(x.text))
                            {
                                definition += "Definition " + j + ": " + x.text + "\r\n";
                                j++;
                            }
                        });

                        if (j > 1)
                        {
                            await Bot.SendTextMessageAsync(message.Chat.Id, definition);
                        }
                        else
                        {
                            await Bot.SendTextMessageAsync(message.Chat.Id, "No result was founded");
                        }
                    }
                }
                else
                {
                    await Bot.SendTextMessageAsync(message.Chat.Id, "You have to send a word, if you want to find a definition");
                }
            }
            else if (message.Text.StartsWith("/"))
            {
                return;
            }
            else
            {
                mainInfo(message.Chat.Id);
            }
        }
        private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message.Type == MessageType.Photo)
            {
                var test = Bot.GetFileAsync(message.Photo[message.Photo.Count() - 1].FileId);
                Console.Write(test.Result);
                var download_url = @"https://api.telegram.org/file/bot<token>/" + test.Result.FilePath;
            }

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }

            if (message.Text.Equals("1") || message.Text.Equals("2") || message.Text.Equals("3") || message.Text.Equals("4") || message.Text.Equals("5"))
            {
                await ListarHotelesAsync(message.Chat.Id, "Clasificación", message.Text);

                return;
            }

            if (message.Text.Equals("San José") || message.Text.Equals("Cartago") || message.Text.Equals("Alajuela") || message.Text.Equals("Heredia") ||
                message.Text.Equals("Limón") || message.Text.Equals("Puntarenas") || message.Text.Equals("Guanacaste"))
            {
                await ListarHotelesAsync(message.Chat.Id, "Provincia", message.Text);

                return;
            }

            if (message.ReplyToMessage != null && message.ReplyToMessage.Text.Equals("Para listar sus reservas, por favor ingrese su número de cédula"))
            {
                await ListarReservasAsync(message.Chat.Id, message.Text);
            }

            switch (message.Text.Split(' ').First())
            {
            case "/reservas":
                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Mis reservas");

                break;

            case "/ubicacion":
                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Ubicación");

                break;

            case "Todos":
                await ListarHotelesAsync(message.Chat.Id, "Todos", message.Text);

                break;

            case "Estrellas":
                List <string> estrellasHotel = new List <string>
                {
                    "5", "4", "3", "2", "1"
                };

                await Bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "¿Cantidad de estrellas?",
                    replyMarkup : GetReplyKeyboard(estrellasHotel));

                break;

            case "Provincia":
                ReplyKeyboardMarkup ubicacionHotel = new[]
                {
                    new[] { "San José", "Cartago" },
                    new[] { "Alajuela", "Heredia" },
                    new[] { "Limón", "Puntarenas" },
                    new[] { "Guanacaste" }
                };

                await Bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "Seleccione una provincia",
                    replyMarkup : ubicacionHotel);

                break;

            case "/hoteles":
                List <string> filtroHoteles = new List <string>
                {
                    "Todos",
                    "Estrellas",
                    "Ubicación",
                    "Calificación"
                };

                await Bot.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "¿Cómo desea listar los hoteles?",
                    replyMarkup : GetReplyKeyboard(filtroHoteles));

                break;

            default:
                await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

                await Task.Delay(5);

                var keyboardEjemplo1 = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData(
                            text: "Hoteles",
                            callbackData: "hoteles"),
                        InlineKeyboardButton.WithCallbackData(
                            text: "Reservas",
                            callbackData: "reservas"),
                    }
                });

                await Bot.SendTextMessageAsync(
                    message.Chat.Id,
                    "Hola, " + message.Chat.FirstName + " ¿En qué podemos ayudarle?",
                    replyMarkup : keyboardEjemplo1);

                break;
            }
        }
Beispiel #17
0
        static async void LoadChoices(string data, long chat_id, string start_choice) // Ситуация с выборами.
        {
            var description = dataBase.recive_text(data, start_choice) + "\n";

            var childs = dataBase.get_childs(data, start_choice);

            if (childs[0] == "0" || childs[0] == "-1")
            {
                if (childs[0] == "-1")
                {
                    usersDataBase.situation_done(chat_id, int.Parse(data));
                    var backButton = new InlineKeyboardButton()
                    {
                        Text = "Успешно, назад", CallbackData = "/start"
                    };
                    var local_markup = new InlineKeyboardMarkup(backButton);

                    await botClient.SendTextMessageAsync(
                        chatId : chat_id,
                        text : description,
                        replyMarkup : local_markup
                        );
                }
                else
                {
                    var backButton = new InlineKeyboardButton()
                    {
                        Text = "Назад", CallbackData = "/start"
                    };
                    var local_markup = new InlineKeyboardMarkup(backButton);

                    await botClient.SendTextMessageAsync(
                        chatId : chat_id,
                        text : description,
                        replyMarkup : local_markup
                        );
                }

                return;
            }

            List <InlineKeyboardButton> buttons = new List <InlineKeyboardButton>();


            for (var i = 0; i < childs.Length; i++)
            {
                description += $"<b>\n{i}. " + dataBase.recive_text(data, childs[i]) + "</b>";
                buttons.Add(new InlineKeyboardButton()
                {
                    Text         = i.ToString(),
                    CallbackData = "Choice." + dataBase.get_childs(data, childs[i])[0] + "." + data // Всегда отсылают к одному варианту.
                });
            }

            var markup = new InlineKeyboardMarkup(buttons);

            await botClient.SendTextMessageAsync(
                chatId : chat_id,
                text : description,
                replyMarkup : markup,
                parseMode : ParseMode.Html
                );
        }
Beispiel #18
0
 public async Task SendChancellorChooseLawAsync(string txt)
 {
     var replyKeyboardMarkup = new InlineKeyboardMarkup(DraftedLaws.Select((law, index) => InlineKeyboardButton.WithCallbackData(
                                                                               law.ToString(),
                                                                               $"{ChatId}:ChooseLaw:{index}"
                                                                               )));
     await Bot.Instance.SendTextMessageAsync(
         chatId : Board.Chancellor.User.Id,
         text : txt,
         replyMarkup : replyKeyboardMarkup);
 }
Beispiel #19
0
        private static async void BotOnMessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }
            string user_name = $"{message.From.FirstName} {message.From.LastName} {message.From.Id} @{message.From.Username}";

            Console.WriteLine($"{user_name} отправил:  '{message.Text}'");

            /*
             * if (check_method == true)
             * {
             *  check_dilog(message.From.Id, message.From.FirstName, "@" + message.From.Username);
             * }
             */


            string Users_message = "Выберите, что хотите сделать или нажмите \"помощь\", для прочтение подсказки";


            switch (message.Text)
            {
            case "/start":
                check_method = true;
                if (check_method == true)
                {
                    check_dilog(message.From.Id, message.From.FirstName, "@" + message.From.Username);
                    if (users_autorization == true)
                    {
                        number_button_info = "Добавить данные";
                    }
                    else if (users_autorization == false)
                    {
                        number_button_info = "Изменить данные";
                    }
                }

                var inlinekeyboard = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData(number_button_info),
                        InlineKeyboardButton.WithCallbackData("Найти людей"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Помощь")
                    }
                });
                await Bot.SendTextMessageAsync(message.Chat.Id, Users_message, replyMarkup : inlinekeyboard);

                break;

            case "/help":
                string info_message = "Добрый день! " +
                                      "\n Данный бот может помочь тебе найти человека, " +
                                      "\n с которым тебе было бы интересно общаться. " +
                                      "\n Если у тебя совпадут более, чем 2 хобби, " +
                                      "\n то вы сможете познакомиться!!!" +
                                      "\n\n Скорее нажимай на \"Назад\", затем на \"Найти людей\" и закомься)";
                var back_button = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Назад")
                    }
                });
                await Bot.SendTextMessageAsync(message.Chat.Id, info_message, replyMarkup : back_button);

                break;

            case "/clear":
                await Bot.SendTextMessageAsync(message.Chat.Id, "Подождите немного...");

                for (int i = e.Message.MessageId - 20; i < e.Message.MessageId + 20; i++)
                {
                    try
                    {
                        await Bot.DeleteMessageAsync(e.Message.Chat.Id, i);
                    }
                    catch
                    { }
                }

                if (users_autorization == true)
                {
                    number_button_info = "Добавить данные";
                }
                else if (users_autorization == false)
                {
                    number_button_info = "Изменить данные";
                }

                var inlinekeyboard_after_clear = new InlineKeyboardMarkup(new[]
                {
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData(number_button_info),
                        InlineKeyboardButton.WithCallbackData("Найти людей"),
                    },
                    new []
                    {
                        InlineKeyboardButton.WithCallbackData("Помощь")
                    }
                });
                await Bot.SendTextMessageAsync(message.Chat.Id, Users_message, replyMarkup : inlinekeyboard_after_clear);

                break;

            default:
                if (Users_answer == "Добавить данные")
                {
                    string error = data_base(false, message.Text, message.From.Id);

                    for (int i = message_id - 20; i < message_id + 20; i++)
                    {
                        //{
                        //    try
                        //    {
                        //        await Bot.DeleteMessageAsync(e.Message.Chat.Id, i);
                        //    }
                        //    catch
                        //    { }
                        //}

                        if (users_autorization == true)
                        {
                            number_button_info = "Добавить данные";
                        }
                        else if (users_autorization == false)
                        {
                            number_button_info = "Изменить данные";
                        }
                    }

                    var inlinekeyboard_after_add = new InlineKeyboardMarkup(new[]
                    {
                        new []
                        {
                            InlineKeyboardButton.WithCallbackData(number_button_info),
                            InlineKeyboardButton.WithCallbackData("Найти людей"),
                        },
                        new []
                        {
                            InlineKeyboardButton.WithCallbackData("Помощь")
                        }
                    });

                    await Bot.SendTextMessageAsync(message.Chat.Id, Users_message, replyMarkup : inlinekeyboard_after_add);

                    if (error != "")
                    {
                        await Bot.SendTextMessageAsync(message.Chat.Id, error);
                    }
                }
                else if (Users_answer == "Изменить данные")
                {
                    string error = data_base(true, message.Text, message.From.Id);
                    for (int i = message_id - 2; i < message_id + 10; i++)
                    {
                        try
                        {
                            await Bot.DeleteMessageAsync(e.Message.Chat.Id, i);
                        }
                        catch
                        {
                        }
                    }

                    if (users_autorization == true)
                    {
                        number_button_info = "Добавить данные";
                    }
                    else if (users_autorization == false)
                    {
                        number_button_info = "Изменить данные";
                    }

                    var inlinekeyboard_after_upgrade = new InlineKeyboardMarkup(new[]
                    {
                        new []
                        {
                            InlineKeyboardButton.WithCallbackData(number_button_info),
                            InlineKeyboardButton.WithCallbackData("Найти людей"),
                        },
                        new []
                        {
                            InlineKeyboardButton.WithCallbackData("Помощь")
                        }
                    });

                    await Bot.SendTextMessageAsync(message.Chat.Id, Users_message, replyMarkup : inlinekeyboard_after_upgrade);

                    if (error != "")
                    {
                        await Bot.SendTextMessageAsync(message.Chat.Id, error);
                    }
                }
                else if (Users_answer == "Найти людей")
                {
                    await Bot.DeleteMessageAsync(e.Message.Chat.Id, message_id + 1);            //

                    await Bot.DeleteMessageAsync(e.Message.Chat.Id, e.Message.MessageId);       // Удаляет последнее сообщение
                }
                else
                {
                    //for (int i = e.Message.MessageId - 2; i <= e.Message.MessageId + 10; i++)
                    //{
                    //    try
                    //    {
                    //        await Bot.DeleteMessageAsync(e.Message.Chat.Id, i);
                    //    }
                    //    catch
                    //    {
                    //        if (i != e.Message.MessageId - 2)
                    //            break;
                    //    }
                    //
                    //await Bot.SendTextMessageAsync(message.Chat.Id, Users_message, replyMarkup: inlinekeyboard);
                    //await Bot.SendTextMessageAsync(message.From.Id, "Я вас не понимаю!");
                }
                Users_answer = "";
                break;
            }
        }
Beispiel #20
0
        private async void Bot_OnCallbackQuery(object sender, Telegram.Bot.Args.CallbackQueryEventArgs e)
        {
            var cbid = e.CallbackQuery.Id;
            var user = e.CallbackQuery.From.Username;
            var cid  = e.CallbackQuery.Message.Chat.Id;
            var mid  = e.CallbackQuery.Message.MessageId;
            var data = e.CallbackQuery.Data;
            var text = e.CallbackQuery.Message.Text;
            var chat = e.CallbackQuery.ChatInstance;

            if (!string.IsNullOrEmpty(data))
            {
                if (data == "yes")
                {
                    Voit++;
                    var inlineKeyboard = new InlineKeyboardMarkup(new[]
                    {
                        new [] // first row
                        {
                            InlineKeyboardButton.WithCallbackData("1.1"),
                            InlineKeyboardButton.WithCallbackData("1.2"),
                        },
                        new [] // second row
                        {
                            InlineKeyboardButton.WithCallbackData("2.1"),
                            InlineKeyboardButton.WithCallbackData("2.2"),
                        }
                    });
                    await bot.AnswerCallbackQueryAsync(cbid, "Ваш голос принят!");

                    await bot.EditMessageTextAsync(cid, mid, $"Всего голосов:\n{Voit}");

                    await bot.EditMessageReplyMarkupAsync(
                        chatId : cid,
                        messageId : mid,
                        replyMarkup : inlineKeyboard
                        );

                    //await bot.EditMessageTextAsync(
                    //    chatId: cid,
                    //    messageId: mid,
                    //    text: text,
                    //    replyMarkup: inline
                    //    );
                }
                else if (data == "no")
                {
                    Voit--;
                    await bot.AnswerCallbackQueryAsync(cbid, "Ваш голос удален!");
                }

                //switch (data)
                //{
                //    case "yes":
                //        await bot.EditMessageTextAsync(cid, mid, $"{text}");
                //        break;
                //    case "no":
                //        await bot.EditMessageTextAsync(cid, mid, $"{data} is pressed");
                //        break;
                //    default:
                //        break;
                //}
            }
        }
Beispiel #21
0
        private static void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            //file jonatishni boshlang'ichi
            //var stream = new FileStream(@"C:\Users\User\Desktop\1.jpg", FileMode.Open);  // faylni yuklab olindi
            //var fileToSend = new FileToSend("asdasdas", stream); //filetosendga fileni tiqildi

            var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]// bu yerda location qabul qilish ishlatilvotdi
            {
                new KeyboardButton("Location")
                {
                    RequestLocation = true
                }                                                                     //keyboard bilan locationi qabul qilinvotdi
            });
            // key board yasash
            var rkm = new ReplyKeyboardMarkup();

            rkm.Keyboard =
                new KeyboardButton[][]
            {
                new KeyboardButton[]
                {
                    new KeyboardButton("item"),
                    new KeyboardButton("item")
                },
                new KeyboardButton[]
                {
                    new KeyboardButton("item")
                }
            };
            var RequestReplyKeyboard = new ReplyKeyboardMarkup(new[]// bu yerda location qabul qilish ishlatilvotdi
            {
                new KeyboardButton("Location")
                {
                    RequestLocation = true
                }                                                                     //keyboard bilan locationi qabul qilinvotdi
            });

            RequestReplyKeyboard.ResizeKeyboard = true;    // keyboart buttoni razmerini kichkina qiladi
            Bot.SendTextMessageAsync(e.Message.Chat.Id, "Text", ParseMode.Default, false, false, 0, rkm);
            //inline yasash
            var inlineKeyboard = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData("asdas") },
                                                                  new[] { InlineKeyboardButton.WithCallbackData("asdasdd") },
                                                                  new[] { InlineKeyboardButton.WithCallbackData("asdasd") } });

            Bot.SendTextMessageAsync(e.Message.Chat.Id, "-->", replyMarkup: inlineKeyboard);


            //var result = Bot.SendTextMessageAsync(e.Message.Chat.Id, "Who or Where are you?", replyMarkup: RequestReplyKeyboard);
            //Console.WriteLine(e.Message.Location.Longitude+ " :Longitude   " + e.Message.Location.Latitude+ " :Latitude"); //locationni langetud va latetudesini consolga yozilvotdi

            //Bot.SendPhotoAsync(e.Message.Chat.Id, fileToSend);// file jonatildi
            //Console.WriteLine(e.Message.Date);
            if (e.Message.Location != null)
            {
                Bot.SendLocationAsync(e.Message.Chat.Id, e.Message.Location.Latitude, e.Message.Location.Longitude);
            }
            if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.TextMessage)
            {
                //Bot.SendPhotoAsync(e.Message.Chat.Id, fileToSend);
                Console.WriteLine(e.Message.Chat.Id + "    " + e.Message.Text);
            }
        }
Beispiel #22
0
        private static async Task BotOnMessageReceived(Message message)
        {
            Console.WriteLine($"Receive message type: {message.Type}");
            if (message.Type != MessageType.Text)
            {
                return;
            }

            if (IsRequest)
            {
                if (Count == -1)
                {
                    IsRequest = false;
                    Count     = 7;
                    GoogleSheetsInterference.AppendList(ListName, Data);

                    var keyboard = new InlineKeyboardMarkup(new[]
                    {
                        new[] { InlineKeyboardButton.WithCallbackData("Назад", "/internships") }
                    });

                    await Bot.SendTextMessageAsync(
                        chatId : message.Chat.Id,
                        text :  $"Заявка на вакансию {ListName} успешно отправлена!",
                        replyMarkup : keyboard
                        );


                    Data     = new List <object>();
                    ListName = null;
                }

                else
                {
                    if (Count == 7)
                    {
                        Data = new List <object> {
                            message.Chat.Username, message.Date.ToString(CultureInfo.InvariantCulture)
                        };
                        Count = 5;
                    }

                    Data.Add(message.Text);

                    await Bot.SendTextMessageAsync(
                        chatId : message.Chat.Id,
                        text :  $"{Props[Count]}"
                        );

                    Count--;
                }
            }

            else
            {
                var action = message.Text.Split(' ').First() switch
                {
                    "/start" => StartMessage(message),
                    _ => StartMessage(message)
                };

                await action;
            }
Beispiel #23
0
        private async static void BotOnMessageReceived(object sender, MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }
            string name = $"{message.From.FirstName } {message.From.LastName}";

            Console.WriteLine($"{name} sent text: '{message.Text}'");


            User            userrr = new User();
            ClassStatusList st     = JsonConvert.DeserializeObject <ClassStatusList>(File.ReadAllText(stpath));

            int        index     = 0;
            bool       contains  = false;
            UserStatus usrstatus = new UserStatus();


            for (int i = 0; i < st.statuses.Count; i++)
            {
                if (st.statuses[i].Id == Convert.ToString(message.From.Id))
                {
                    contains  = true;
                    usrstatus = st.statuses[i];
                    index     = i;
                    break;
                }
            }

            if (contains == false)
            {
                usrstatus.status1 = 0;
                usrstatus.status2 = 0;
                usrstatus.Id      = Convert.ToString(message.From.Id);
                st.statuses.Add(usrstatus);
            }



            switch (st.statuses[index].status1)
            {
            case 0:
            {
                switch (message.Text)
                {
                case "/start":
                {
                    string text =
                        @"Список команд:
/gettoptracks - Топ-10 треков
/gettrack - Найти трек по названию
/getartistinfo - Информация об исполнителе
/getfavorite - Список избранных";

                    await Bot.SendTextMessageAsync(message.From.Id, text);

                    usrstatus.status1  = 0;
                    usrstatus.status2  = 0;
                    usrstatus.Id       = Convert.ToString(message.From.Id);
                    st.statuses[index] = usrstatus;
                    File.WriteAllText(stpath, JsonConvert.SerializeObject(st));
                    break;
                }

                case "/gettoptracks":
                {
                    var json = JsonConvert.SerializeObject(userrr);
                    var data = new StringContent(json, Encoding.UTF8, "application/json");

                    userrr.Id = Convert.ToString(message.From.Id);

                    HttpClient client   = new HttpClient();
                    var        response = await client.PostAsync($"https://localhost:44348/api/Music/GetTopTracks", data);

                    string      result   = response.Content.ReadAsStringAsync().Result;
                    ClassTracks useritem = JsonConvert.DeserializeObject <ClassTracks>(result);

                    List <List <InlineKeyboardButton> > inlineKeyboardList = new List <List <InlineKeyboardButton> >();


                    foreach (var track in useritem.tracks.track)
                    {
                        //if (track.url.Length <= 60)
                        {
                            List <InlineKeyboardButton> ts = new List <InlineKeyboardButton>();
                            ts.Add(InlineKeyboardButton.WithUrl(track.name + " - " + track.artist.name, track.url));
                            ts.Add(InlineKeyboardButton.WithCallbackData("+", Convert.ToString(message.From.Id) + "⁜" + track.name + "⁜" + track.artist.name));
                            inlineKeyboardList.Add(ts);
                        }
                    }
                    var inline = new InlineKeyboardMarkup(inlineKeyboardList);

                    await Bot.SendTextMessageAsync(message.From.Id, "Топ-10 треков:", replyMarkup : inline);


                    usrstatus.status1  = 0;
                    usrstatus.status2  = 1;
                    st.statuses[index] = usrstatus;

                    File.WriteAllText(stpath, JsonConvert.SerializeObject(st));

                    break;
                }

                case "/getartistinfo":
                {
                    await Bot.SendTextMessageAsync(e.Message.Chat.Id, "Введите исполнителя");

                    st.statuses[index].status1 = 1;
                    File.WriteAllText(stpath, JsonConvert.SerializeObject(st));

                    break;
                }

                case "/gettrack":
                {
                    await Bot.SendTextMessageAsync(e.Message.Chat.Id, "Введите название песни");


                    st.statuses[index].status1 = 2;
                    File.WriteAllText(stpath, JsonConvert.SerializeObject(st));

                    break;
                }

                case "/getfavorite":
                {
                    userrr.Id = Convert.ToString(message.From.Id);

                    var json = JsonConvert.SerializeObject(userrr);
                    var data = new StringContent(json, Encoding.UTF8, "application/json");


                    HttpClient client   = new HttpClient();
                    var        response = await client.PostAsync($"https://localhost:44348/api/Music/GetFavorite", data);

                    string result = response.Content.ReadAsStringAsync().Result;

                    if (result == "BAD")
                    {
                        await Bot.SendTextMessageAsync(e.Message.Chat.Id, "Списка нету");

                        break;
                    }


                    List <SearchTrackMain> js = JsonConvert.DeserializeObject <List <SearchTrackMain> >(result);

                    List <List <InlineKeyboardButton> > inlineKeyboardList = new List <List <InlineKeyboardButton> >();


                    foreach (var track in js)
                    {
                        List <InlineKeyboardButton> ts = new List <InlineKeyboardButton>();
                        ts.Add(InlineKeyboardButton.WithUrl(track.name + " - " + track.artist, track.url));
                        ts.Add(InlineKeyboardButton.WithCallbackData("х", Convert.ToString(message.From.Id) + "⁜" + track.name + "⁜" + track.artist));
                        inlineKeyboardList.Add(ts);
                    }
                    var inline = new InlineKeyboardMarkup(inlineKeyboardList);
                    if (js.Count != 0)
                    {
                        await Bot.SendTextMessageAsync(message.From.Id, "Список фаворитов:", replyMarkup : inline);
                    }
                    else
                    {
                        await Bot.SendTextMessageAsync(message.From.Id, "Список фаворитов пуст.");
                    }

                    usrstatus.status1  = 0;
                    usrstatus.status2  = 2;
                    st.statuses[index] = usrstatus;

                    File.WriteAllText(stpath, JsonConvert.SerializeObject(st));

                    break;
                }

                default:
                {
                    break;
                }
                }
                break;
            }

            case 1:     //для getartistinfo
            {
                try
                {
                    st.statuses[index].status1 = 0;
                    File.WriteAllText(stpath, JsonConvert.SerializeObject(st));

                    userrr.Id     = Convert.ToString(message.From.Id);
                    userrr.Artist = e.Message.Text;

                    var json = JsonConvert.SerializeObject(userrr);
                    var data = new StringContent(json, Encoding.UTF8, "application/json");

                    HttpClient client   = new HttpClient();
                    var        response = await client.PostAsync($"https://localhost:44348/api/Music/GetArtistInfo", data);

                    string result = response.Content.ReadAsStringAsync().Result;
                    ClassListArtistInfo useritem = JsonConvert.DeserializeObject <ClassListArtistInfo>(result);

                    await Bot.SendTextMessageAsync(message.From.Id, $"Artist: {useritem.artist.name}\n\nBio: {useritem.artist.bio.summary}.");

                    break;
                }
                catch
                {
                    await Bot.SendTextMessageAsync(message.From.Id, "Было введено некорректное имя исполнителя.");

                    break;
                }
            }

            case 2:     //для gettrack
            {
                st.statuses[index].status1 = 0;
                st.statuses[index].status2 = 1;

                userrr.Id   = Convert.ToString(message.From.Id);
                userrr.Name = e.Message.Text;

                var json = JsonConvert.SerializeObject(userrr);
                var data = new StringContent(json, Encoding.UTF8, "application/json");


                HttpClient client   = new HttpClient();
                var        response = await client.PostAsync($"https://localhost:44348/api/Music/GetTrack", data);

                string       result   = response.Content.ReadAsStringAsync().Result;
                ClassResults useritem = JsonConvert.DeserializeObject <ClassResults>(result);

                List <List <InlineKeyboardButton> > inlineKeyboardList = new List <List <InlineKeyboardButton> >();


                foreach (var track in useritem.results.trackmatches.track)
                {
                    if (track.url.Length <= 60)
                    {
                        List <InlineKeyboardButton> ts = new List <InlineKeyboardButton>();
                        ts.Add(InlineKeyboardButton.WithUrl(track.name + " - " + track.artist, track.url));
                        ts.Add(InlineKeyboardButton.WithCallbackData("+", Convert.ToString(message.From.Id) + "⁜" + track.name + "⁜" + track.artist));
                        inlineKeyboardList.Add(ts);
                    }
                }
                var inline = new InlineKeyboardMarkup(inlineKeyboardList);
                if (result == "It's bad")
                {
                    await Bot.SendTextMessageAsync(message.From.Id, "Ничего не найдено. Попробуйте ввести название по-другому.");
                }
                else
                {
                    await Bot.SendTextMessageAsync(message.From.Id, "Найденные треки:", replyMarkup : inline);
                }
                File.WriteAllText(stpath, JsonConvert.SerializeObject(st));

                break;
            }

            default:
            {
                goto case 0;
            }
            }
        }
Beispiel #24
0
        private static async void OnMessageHandlet(object sender, MessageEventArgs e)
        {
            var msg = e.Message;

            string[] answers;
            int      indexCorrectAnswer;

            InlineKeyboardButton[] ikb;
            InlineKeyboardMarkup   ikm;

            ReplyKeyboardMarkup rkm = new ReplyKeyboardMarkup();

            switch (msg.Text)
            {
            case "/start":
                Console.WriteLine($"Входящее: ({msg.Chat.Username}) — НОВЫЙ");

                rkm.Keyboard = new KeyboardButton[][]
                {
                    new KeyboardButton[]
                    {
                        new KeyboardButton("🏁 Начать игру")
                    }
                };

                await client.SendTextMessageAsync(msg.Chat.Id, @"Добро пожаловать!
Этот бот позволит Вам немного напрячь свой мозг несложной математикой.
Попробуй если не струсил...", replyMarkup : rkm);

                break;

            case "🔄 Обновить пример":

                try
                {
                    await client.DeleteMessageAsync(msg.Chat.Id, msg.MessageId - 1);
                }catch {}

                try
                {
                    await client.DeleteMessageAsync(msg.Chat.Id, msg.MessageId);
                }
                catch { }

                anEquationAndAnswers.FormAnEquationAndAnswers();     //Создаётся новое уравнение и ответы

                answers            = anEquationAndAnswers.GetAnswers();
                indexCorrectAnswer = anEquationAndAnswers.GetIndexCorrectAnswer();

                ikb = new InlineKeyboardButton[3];

                for (int i = 0; i < answers.Length; i++)
                {
                    ikb[i] = InlineKeyboardButton.WithCallbackData(answers[i].ToString(), (i == indexCorrectAnswer) ? $"True|{answers[indexCorrectAnswer]}" : $"False|{answers[indexCorrectAnswer]}|{answers[i]}");
                }

                ikm = new InlineKeyboardMarkup(ikb);
                await client.SendTextMessageAsync(msg.Chat.Id, anEquationAndAnswers.GetEquation(), replyMarkup : ikm);

                break;

            case "🏁 Начать игру":

                anEquationAndAnswers.FormAnEquationAndAnswers();     //Создаётся новое уравнение и ответы

                answers            = anEquationAndAnswers.GetAnswers();
                indexCorrectAnswer = anEquationAndAnswers.GetIndexCorrectAnswer();

                ikb = new InlineKeyboardButton[3];

                for (int i = 0; i < answers.Length; i++)
                {
                    ikb[i] = InlineKeyboardButton.WithCallbackData(answers[i].ToString(), (i == indexCorrectAnswer) ? $"True|{answers[indexCorrectAnswer]}" : $"False|{answers[indexCorrectAnswer]}|{answers[i]}");
                }

                ikm = new InlineKeyboardMarkup(ikb);

                rkm.Keyboard = new KeyboardButton[][]
                {
                    new KeyboardButton[]
                    {
                        new KeyboardButton("🔄 Обновить пример")
                    }
                };
                await client.SendTextMessageAsync(msg.Chat.Id, "Хорошей игры 🎲", replyMarkup : rkm);

                await client.SendTextMessageAsync(msg.Chat.Id, anEquationAndAnswers.GetEquation(), replyMarkup : ikm);

                break;

            default:
                return;
            }
        }
Beispiel #25
0
        /// <summary>
        /// Обработчик сообщения боту
        /// </summary>
        /// <param name="sender">Объект отправивший сигнал</param>
        /// <param name="e">Событие отправки сообщения</param>
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null)
            {
                return;                     // если сообщение null выходим из метода
            }
            long chatId = message.Chat.Id;  // идентификатор чата

            // Получение и сохранение ботом фото, аудио, видео и документа (и отправка их назад пользователю)
            switch (message.Type)
            {
            case MessageType.Photo:                                                                    // пользователь прислал фото
                string fileNamePhoto = message.Photo[message.Photo.Length - 1].FileUniqueId + ".jpeg"; // имя файла фото
                string fileIdPhoto   = message.Photo[message.Photo.Length - 1].FileId;                 // идентификатор файла фото

                // Последнее фото в массиве PhotoSize является оригиналом
                DownLoad(fileIdPhoto, fileNamePhoto);

                // Отправка фото обратно
                await Bot.SendPhotoAsync(chatId, fileIdPhoto);

                break;

            case MessageType.Audio:                                                                      // пользователь прислал аудио
                string fileNameAudio = message.Audio.Title + "." + message.Audio.MimeType.Split("/")[1]; // имя файла аудио
                string fileIdAudio   = message.Audio.FileId;                                             // идентификатор файла аудио

                DownLoad(fileIdAudio, fileNameAudio);

                // Отправка аудио обратно
                await Bot.SendAudioAsync(chatId, fileIdAudio);

                break;

            case MessageType.Video:                                                                             // пользователь прислал видео
                string fileNameVideo = message.Video.FileUniqueId + "." + message.Video.MimeType.Split("/")[1]; // имя файла видео
                string fileIdVideo   = message.Video.FileId;                                                    // идентификатор файла видео

                DownLoad(fileIdVideo, fileNameVideo);

                // Отправка аудио обратно
                await Bot.SendVideoAsync(chatId, fileIdVideo);

                break;

            case MessageType.Document:                               // пользователь прислал документ
                string fileNameDocument = message.Document.FileName; // имя файла документа
                string fileIdDocument   = message.Document.FileId;   // идентификатор файла документа

                DownLoad(fileIdDocument, fileNameDocument);

                // Отправка аудио обратно
                await Bot.SendDocumentAsync(chatId, fileIdDocument);

                break;


            case MessageType.Text:
                // Если чат пользователя в игре, то играем
                if (games.isFindId(chatId))
                {
                    string city = message.Text;     // город, который отправил пользователь

                    // Если пользователь решил выйти из игры
                    if (city.ToUpper() == "КОНЕЦ")
                    {
                        games.removeGame(chatId);       // удаляем игру
                        return;
                    }

                    // Если город есть в "википедии" бота
                    if (games.returnGame(chatId).isWikiKnowCity(city))
                    {
                        string lastCityBot = games.returnGame(chatId).LastCityBotSay;       // предыдущий названный ботом город

                        // Если бот уже называл город
                        if (!String.IsNullOrEmpty(lastCityBot))
                        {
                            if (char.ToUpper(lastCityBot[lastCityBot.Length - 1]) == 'Ь')
                            {
                                if (char.ToUpper(lastCityBot[lastCityBot.Length - 2]) != char.ToUpper(city[0]))
                                {
                                    await Bot.SendTextMessageAsync(chatId, $"Город должен начинаться на букву '{lastCityBot[lastCityBot.Length - 2]}'!");

                                    return;
                                }
                            }
                            else
                            {
                                if (char.ToUpper(lastCityBot[lastCityBot.Length - 1]) != char.ToUpper(city[0]))
                                {
                                    await Bot.SendTextMessageAsync(chatId, $"Город должен начинаться на букву '{lastCityBot[lastCityBot.Length - 1]}'!");

                                    return;
                                }
                            }
                        }


                        games.returnGame(chatId).delCitiyInWikiBOT(city);       // удаляем город из общего списка городов ("википедии бота"), чтобы город не повторялся
                        games.returnGame(chatId).delCityInKnowBOT(city);        // удаляем город из "базы знаний" бота

                        // Если город оканчивается на мягкий знак, то бот ищет в своей "базе знаний" город начинающийся на предпоследнюю букву
                        if (city[city.Length - 1] == 'ь')
                        {
                            city = games.returnGame(chatId).cityWhoBotKnow(city[city.Length - 2]);
                        }
                        else
                        {
                            city = games.returnGame(chatId).cityWhoBotKnow(city[city.Length - 1]);
                        }

                        // Если бот не может дать ответ то завершаем игру
                        if (String.IsNullOrEmpty(city))
                        {
                            await Bot.SendTextMessageAsync(chatId, "Молодец, выигрышь за тобой!");

                            await Bot.SendTextMessageAsync(chatId, "конец");

                            Console.WriteLine($"Выиграл! username: '******', имя: '{message.Chat.FirstName}', фамилия: {message.Chat.LastName}"); // логирование

                            games.removeGame(chatId);                                                                                                              // удаляем игру
                            return;
                        }

                        games.returnGame(chatId).LastCityBotSay = city;     // последний названный ботом город (для проверки следующего города, введенного пользователем)

                        string htmlCity = $"<i>{city}</i>";
                        await Bot.SendTextMessageAsync(chatId, htmlCity, parseMode : ParseMode.Html);

                        games.returnGame(chatId).delCitiyInWikiBOT(city);       // удаляем город из общего списка городов ("википедии бота"), чтобы город не повторялся
                        games.returnGame(chatId).delCityInKnowBOT(city);        // удаляем город из "базы знаний" бота
                    }
                    else
                    {
                        // Если города нет в "википедии" бота, либо его уже называли
                        await Bot.SendTextMessageAsync(chatId, $"Город '{city}' моя Википедия не знает! Возможно этот город уже называли.");

                        return;
                    }

                    return;
                }

                break;

            default:

                break;
            }


            if (message.Text == null)
            {
                return;                         // если текст сообщения null выходим из метода
            }
            // Сообщение от бота (в формате HTML)
            var answerText = "Меня зовут Сказочник.\nЯ люблю общаться с людьми, рассказывать разные сказки и играть в 'Города'!\n\n" +
                             "<b>Выбери команду:</b>\n" +
                             "/start - <i>запуск бота</i>\n" +
                             "/menu - <i>вывод меню</i>";

            switch (message.Text)
            {
            case "/start":
                await Bot.SendTextMessageAsync(chatId, answerText, ParseMode.Html);     // вывод начального сообщения

                break;

            case "/menu":
                // Создаем меню (клавиатуру)
                var inlineKeyboard = new InlineKeyboardMarkup(new[] {
                    new[] { InlineKeyboardButton.WithCallbackData(menu["Story"]) },
                    new[] { InlineKeyboardButton.WithCallbackData(menu["Sities"]) }
                });

                await Bot.SendTextMessageAsync(chatId, "<b>Чем займемся?</b>", parseMode : ParseMode.Html, replyMarkup : inlineKeyboard);

                break;

            default:
                // Общение с ботом через DialogFlow
                // Инициализируем аргументы ответа
                SessionName session    = SessionName.FromProjectSession(projectID, sessionID);
                var         queryInput = new QueryInput {
                    Text = new TextInput {
                        Text         = message.Text,
                        LanguageCode = "ru-ru"
                    }
                };

                // Создаем ответ пользователю
                DetectIntentResponse response = await dFlowClient.DetectIntentAsync(session, queryInput);

                answerText = response.QueryResult.FulfillmentText;

                if (answerText == "")
                {
                    // Intents для непонятных боту фраз
                    queryInput.Text.Text = "непонятно";
                }

                // Создаем ответ пользователю, если введен непонятный вопрос (набор букв)
                response = await dFlowClient.DetectIntentAsync(session, queryInput);

                answerText = response.QueryResult.FulfillmentText;

                Console.WriteLine($"Общается username: '******', имя: '{message.Chat.FirstName}', фамилия: {message.Chat.LastName}"); // логирование

                await Bot.SendTextMessageAsync(chatId, answerText);                                                                                    // отправляем пользователю ответ

                break;
            }
        }
Beispiel #26
0
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            var message = e.Message;

            if (message == null || message.Type != MessageType.Text)
            {
                return;
            }
            string name = $"{message.From.FirstName} {message.From.LastName}";

            Console.WriteLine($"{name} отправил сообщение :'{message.Text}'");

            switch (message.Text)
            {
            case "/start":
                string text = "@Список команд:                  " +
                              "/start -запуск бота,                    " +
                              " /callback - вывод меню,                  " +
                              "/keyboard - вывод клавиатуры             ";
                await Bot.SendTextMessageAsync(message.From.Id, text);

                break;

            case "/callback":
                var inlineKeyboard = new InlineKeyboardMarkup(new[]
                {
                    new[]
                    {
                        InlineKeyboardButton.WithUrl("Rozetka", "https://rozetka.com.ua/"),
                        InlineKeyboardButton.WithUrl("Citrus", "https://www.citrus.ua/")
                    },


                    new[]
                    {
                        InlineKeyboardButton.WithCallbackData("Картинка"),
                        InlineKeyboardButton.WithCallbackData("Видео")
                    }
                });
                await Bot.SendTextMessageAsync(message.From.Id, "Выберите пункт меню", replyMarkup : inlineKeyboard);



                break;

            case "/keyboard":

                var replyKeyboard = new ReplyKeyboardMarkup(new[]
                {
                    new[]
                    {
                        new KeyboardButton("Привет"),
                        new KeyboardButton("Как делишки?")
                    },
                    new[]
                    {
                        new KeyboardButton("Контакт")
                        {
                            RequestContact = true
                        },
                        new KeyboardButton("Геолокация")
                        {
                            RequestLocation = true
                        }
                    }
                }
                                                            );
                await Bot.SendTextMessageAsync(message.Chat.Id, "Сообщение", replyMarkup : replyKeyboard);

                break;

            default:
                var    response = apiAi.TextRequest(message.Text);
                string answer   = response.Result.Fulfillment.Speech;
                if (answer == "")
                {
                    answer = "Сорри, но я тебя не понял";
                }
                await Bot.SendTextMessageAsync(message.From.Id, answer);

                break;
            }
        }
Beispiel #27
0
        private static async void OnMessage(object sender, MessageEventArgs e)
        {
            if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.Text && e.Message.Date.AddMinutes(1) > DateTime.UtcNow)
            {
                string messageText      = e.Message.Text;
                string lowerMessageText = messageText.ToLower();
                long   chatId           = e.Message.Chat.Id;

                // LearnedPhrases
                if (lowerMessageText.Contains("/remove") && lowerMessageText.Length > 8)
                {
                    int    position    = e.Message.Text.IndexOf("/remove") + 8;
                    string keyToRemove = lowerMessageText.Substring(position);
                    if (LearnedPhrases.ContainsKey(keyToRemove))
                    {
                        var valuesList = LearnedPhrases[keyToRemove];
                        if (valuesList.Count == 1)
                        {
                            LearnedPhrases.Remove(keyToRemove);
                            await Bot.SendTextMessageAsync(chatId, "Borrado!");
                        }
                        else
                        {
                            InlineKeyboardButton[][] buttons = new InlineKeyboardButton[valuesList.Count][];
                            for (int i = 0; i < valuesList.Count; i++)
                            {
                                var value = valuesList[i];
                                buttons[i] = new InlineKeyboardButton[] {
                                    InlineKeyboardButton.WithCallbackData(
                                        value,
                                        string.Format("{0};#!{1}", keyToRemove, value.Substring(0, value.Length < 20 ? value.Length : 20))
                                        )
                                };
                            }
                            var keyboardMarkup = new InlineKeyboardMarkup(buttons);

                            await Bot.SendTextMessageAsync(chatId, "Cual quieres eliminar?", replyMarkup : keyboardMarkup);
                        }
                    }
                    else
                    {
                        await Bot.SendTextMessageAsync(chatId, "No he encontrado esa frase para borrar");
                    }
                }
                else if (lowerMessageText.ContainsAll(new List <string>()
                {
                    "amigo", "aprende a contestar"
                }))
                {
                    int           position   = e.Message.Text.IndexOf("aprende a contestar") + 20;
                    List <string> nuevaFrase = new List <string>();
                    bool          learned    = false;

                    foreach (Match match in Regex.Matches(messageText, "\"([^\"]*)\""))
                    {
                        nuevaFrase.Add(match.ToString());
                    }

                    if (nuevaFrase.Count == 2)
                    {
                        string key   = nuevaFrase.Last().ToLower().Replace("\"", string.Empty).Trim();
                        string value = nuevaFrase.First().Replace("\"", string.Empty).Trim();

                        if (!string.IsNullOrEmpty(key) &&
                            !string.IsNullOrEmpty(value) &&
                            key.Length >= 3)
                        {
                            if (LearnedPhrases.ContainsKey(key))
                            {
                                if (LearnedPhrases[key].Contains(value))
                                {
                                    await Bot.SendTextMessageAsync(chatId, "Esta ya me la sabía!");
                                }
                                else
                                {
                                    LearnedPhrases[key].Add(value);
                                }
                            }
                            else
                            {
                                LearnedPhrases.Add(key, new List <string>()
                                {
                                    value
                                });
                            }
                            await Bot.SendTextMessageAsync(chatId, "Aprendido!");

                            System.IO.File.WriteAllText(LearnedPhrasesPath, JsonConvert.SerializeObject(LearnedPhrases));

                            learned = true;
                        }
                    }

                    if (!learned)
                    {
                        await Bot.SendTextMessageAsync(chatId, "Eso no lo he podido aprender...");
                    }
                }
                else if (lowerMessageText.ContainsAll(new List <string>()
                {
                    "amigo", "di:"
                }))
                {
                    int position = e.Message.Text.IndexOf("di:") + 3;
                    await Bot.SendTextMessageAsync(chatId, e.Message.Text.Substring(position));
                }
                else if (lowerMessageText.ContainsAny(LearnedPhrases.Keys))
                {
                    foreach (var key in lowerMessageText.GetAllContainingKeysIn(LearnedPhrases.Keys.ToList()))
                    {
                        var valuesList     = LearnedPhrases[key];
                        int randomPosition = random.Next(valuesList.Count);

                        await Bot.SendTextMessageAsync(chatId, valuesList[randomPosition]);
                    }
                }

                // SPAM
                if (lowerMessageText.Contains("/start") &&
                    (e.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Group ||
                     e.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Supergroup))
                {
                    await Bot.SendTextMessageAsync(chatId, "Quereis empezar una partida? Eso merece un buen patataspam!!");
                    await SpamAdmins(chatId);
                }
                else if (lowerMessageText.Contains("patataspa") &&
                         (e.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Group ||
                          e.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Supergroup))
                {
                    await SpamAdmins(chatId);
                }
            }
        }