боты в телеге. тбот. Содержание Введение 3 1 Анализ технического задания 5 1 Принцип создания бота в телеграм 5 2 Особенности протокола телеграмм 6 2 Разработка телеграм бота 7 3 Тестирование бота 15 Заключение 17 Список литературы 18 Приложение 20 Введение
Скачать 0.88 Mb.
|
СодержаниеВведение 3 1 Анализ технического задания 5 1.1 Принцип создания бота в телеграм 5 1.2 Особенности протокола телеграмм 6 2 Разработка телеграм бота 7 3 Тестирование бота 15 Заключение 17 Список литературы 18 Приложение 20 ВведениеКод, написанный на C++, можно найти в вашем телефоне, в стиральной машине, в автомобиле, в самолетах, в банках и вообще везде, где только можно представить. Многие приложения для работы с изображениями, такие как Adobe Photoshop или Illustrator, написаны на C++. 3D-игры также часто пишут на C++. Программное обеспечение для 3D-анимации, моделирования и рендеринга также в основном написано на C++. Манипуляции с изображениями — довольно сложная и ресурсоемкая область, требующая скорости и близости к аппаратной части C++. Эволюция C++ была направлена на то, чтобы минимизировать головную боль разработчиков и сделать написание более безопасного кода проще. Одной из важнейших особенностей C++ является предсказуемое управление памятью. Тут нет сборки мусора, которая в конечном итоге происходит (или нет). Когда и как память будет освобождена и возвращена операционной системе - абсолютно детерминировано. Хотя все всегда было абсолютно детерминировано, было также довольно легко выстрелить себе в ногу и испортить все, не высвобождая память или наоборот пытаясь высвободить ее дважды или даже больше раз... Современный C++ предоставляет интеллектуальные указатели, которые сделали динамическое управление памятью менее подверженным ошибкам за счет добавления указателей, которые могут “убирать за собой”. C++ близок к аппаратному обеспечению, может легко манипулировать ресурсами, поддерживает процедурное программирование для функций, интенсивно использующих ЦП, и является очень быстрым. Он также отлично справляется со сложностями 3D-игр и позволяет создавать многослойные сетевые конфигурации. Все эти преимущества делают его главным выбором для разработки игровых систем, а также инструментария для разработки игр. Благодаря тому, что С++ создавался на базе языка программирования С, он сумел перенять всю скорострельность своего родителя. При этом, он сегодня используется во всех сферах программирования. К преимуществам этого языка можно отнести: Высокая скорость. Можно открыть любой тестер скоростей языков программирования, и увидеть, что С++ является одним из наиболее высокоскоростных. При этом, можно использовать любой язык для решения локальных задач. Но если необходимо написать все приложение на одном языке, с этой задачей отлично справится С++. Универсальность. Компиляторы языка С++ есть в любой операционной системе. При этом, написанные на этом языке программы могут без проблем исполняться на любой платформе. Широкая сфера применения. Язык С++ можно использовать для разработки буквально всего от интернета вещей до умных часов, беспилотных транспортных средств и игр. Большое сообщество. Язык постоянно обновляются и сюда внедряются различные полезные новшества. Но и это не все. С++ дополняется библиотеками и шаблонами, которые могут пригодиться как опытным программистам, так и начинающим разработчикам. Помимо этого, под С++ написано множество полезных книг и самоучителей, которые помогут быстрее освоить тонкости языка. Принципы С++ заложены во многие современные языки программирования. Поэтому те. Кто его досконально изучат, смогут без труда освоить Java, JavaScript или C#. Высокий уровень востребованности. Программисты, работающие с С++ сегодня крайне востребованы, причем во всех странах мира. Что касается недостатков, к ним можно отнести лишь то, что он достаточно сложен с точки зрения синтаксиса и понимания. На изучение С++ уйдет гораздо больше времени, чем на освоение JavaScript, например. 1 Анализ технического задания1.1 Принцип создания бота в телеграмВсё начинается с официального клиента Telegram — BotFather. Он тоже бот. Это основа для любого из описанных выше решений. Именно он отвечает за создание и внешний вид бота — его название, описание и аватарку. Как работать в BotFather. Сначала нужно нажать в нём кнопку «Запустить» и выбрать пункт /newbot из предложенного списка команд. Далее необходимо придумать имя для бота — оно может быть на любом языке — и юзернейм — название, которое будет отображаться в адресной строке. В конце юзернейма должно стоять слово bot. Рисунок 1 – создание бота На этом этапе BotFather создаст токен бота — он выделен на скриншоте выше. Это его уникальное название для интеграции через HTTP API. Интеграция со сторонними сервисами позволяет добавлять в бота нужные функции — об этом чуть ниже. Чтобы установить аватарку бота, выбирается команда /setuserpic; чтобы добавить описание — /setdescription. Описание бота особенно важно — это первое, что увидит пользователь ещё до того, как нажмёт «Запустить». Также стоит добавить небольшой текст о боте в шапку его профиля. Это делается через меню /setabouttext. Функциональность ботов, собранных на конструкторах, ограничена. Функциональность самописного бота ограничена только возможностями самого Telegram. Программистов стоит привлечь, если у есть задачи, которые нельзя решить с помощью конструкторов. 1.2 Особенности протокола телеграммЛюбой HTTP запрос состоит из заголовков отделенных между собой "\r\n", и тела отделенного от заголовков "\r\n\r\n", может быть пустым, но разделитель "\r\n\r\n" присутствует всегда. Запросы от Telegram будут приходить методом POST, тело будет в формате JSON. Пример запроса похожего на Telegram: POST /(URI указанный при установке WebHook) HTTP/1.1\r\n ....Неважные для нас поля заголовков Content-Type: application/json\r\n (Тип данных в теле) Content-Length: 256\r\n (Размер тела в байтах, целое число) ..../r/n/r/n Json тело При каждой отправке человеком боту сообщения, сервер телеграма будет посылать подобные запросы нашему серверу. В общем случае на них отвечать не обязательно, но в случае с Telegram — обязательно, иначе он будет циклично посылать один и тот же запрос. Для этого подготовим короткий HTTP response: HTTP/1.1 200 OK\r\n Connection: close\r\n\r\n Этих двух полей достаточно что бы сказать серверу Telegram что все нормально, ответ 200 и можно закрывать соединение. 2 Разработка телеграм ботаСогласно требованию задания рабботка должна вестись с применением make файлов. CMake — это кроссплатформенное средство с открытым кодом, которое позволяет определять процессы сборки, выполняемые на множестве платформ. Встроенная поддержка CMake в Visual Studio позволяет изменять проекты CMake, а также выполнять их сборку и отладку в Windows, в подсистеме Windows для Linux (WSL) и в удаленных системах из одного и того же экземпляра Visual Studio. Файлы проекта CMake (например, CMakeLists.txt ) используются непосредственно Visual Studio в целях IntelliSense и для обзора. cmake.exe вызывается напрямую средой Visual Studio для конфигурации и сборки CMake. Средства C++ CMake для Windows устанавливаются в рамках рабочих нагрузок Разработка классических приложений на C++ и Разработка приложений для Linux на C++ . Для кроссплатформенного развертывания с использованием CMake требуются инструменты C++ CMake для Windows и разработка Linux на C++ . Рисунок 2 – установка cmake Если открыть папку, содержащую файл CMakeLists.txt , происходит следующее: Visual Studio добавляет пункт CMake в меню Проект с командами для просмотра и редактирования сценариев CMake. В обозревателе решений отображаются структура папок и файлы. Visual Studio запускает CMake и создает файл кэша CMake ( CMakeCache.txt ) для конфигурации по умолчанию. В окне вывода отображается командная строка CMake, а также прочие выходные данные CMake. В фоновом режиме Visual Studio индексирует исходные файлы для поддержки функций IntelliSense, просмотра информации, рефакторинга и т. д. По мере работы Visual Studio отслеживает изменения в редакторе, а также на диске, чтобы синхронизировать индекс с источниками. Для управления сборками CMake Visual Studio использует файл конфигурации CMake. Файлы конфигурации CMake инкапсулируют параметры сборки, такие как параметры машинного кода и переменные среды сборки. Открытие проектов осуществляется папками Рисунок 3 – открытие cmake проекта. CMake обладает достаточно развитыми средствами поиска установленых библиотек, правда они не встроеные, а реализованы в виде отдельных модулей. В стандартной поставке довольно много модулей, но некоторые проекты (например Ogre) поставляют свои. Они позволяют системе автоматически определить наличие необходимых для линковки проекта библиотек. Установка библиотеки в Windows Скачать vcpkg и tgbot-cpp Windows 7 или новее Visual Studio 2015 Обновление 3 или более поздней версии с английским языковым пакетом. Сначала надо загрузить и запустить сам vcpkg; его можно установить где угодно, но обычно рекомендуется использовать vcpkg в качестве подмодуля для проектов CMake и устанавливать его глобально для проектов Visual Studio. Рекомендуется C:\src\vcpkg или C:\dev\vcpkg , поскольку в противном случае можно столкнуться с проблемами пути для некоторых систем сборки портов. > клонирование git https://github.com/microsoft/vcpkg > .\vcpkg\bootstrap-vcpkg.bat Чтобы использовать vcpkg с Visual Studio, выполняется следующая команда (может потребоваться повышение прав администратора): > .\vcpkg\vcpkg интегрировать установить Чтобы установить библиотеки для Windows x64, запустите: > .\vcpkg\vcpkg установить tgbot-cpp:x64-windows Чтобы установить для Windows x86, запустите: > .\vcpkg\vcpkg установить tgbot-cpp Теперь библиотека будет установлена, и Visual Studio должна быть в состоянии найти установку vcpkg. Пример кода телеграм бота. #include #include int main() { TgBot::Bot bot("PLACE YOUR TOKEN HERE"); bot.getEvents().onCommand("start", [&bot](TgBot::Message::Ptr message) { bot.getApi().sendMessage(message->chat->id, "Hi!"); }); bot.getEvents().onAnyMessage([&bot](TgBot::Message::Ptr message) { printf("User wrote %s\n", message->text.c_str()); if (StringTools::startsWith(message->text, "/start")) { return; } bot.getApi().sendMessage(message->chat->id, "Your message is: " + message->text); }); try { printf("Bot username: %s\n", bot.getApi().getMe()->username.c_str()); TgBot::TgLongPoll longPoll(bot); while (true) { printf("Long poll started\n"); longPoll.start(); } } catch (TgBot::TgException& e) { printf("error: %s\n", e.what()); } return 0; } Работа со строками позволит сформировать ссылку на онлайн загрузчик музыки из видео в разных форматах. Для хранения строк в C++ применяется тип string. Для использования этого типа его необходимо подключить в код с помощью директивы include: 1 2 3 4 5 6 7 8 9 #include #include int main() { std::string hello = "Hello World!"; std::cout << hello << "\n"; return 0; } Тип string определен в стандартной библиотеке и при его использовании надо указывать пространство имен std. Либо можно использовать выражение using, чтобы не указывать префикс std: 1 using std::string; В данном случае значение переменной hello, которая представляет тип string, выводится на консоль. При компиляции через g++ может потребоваться указать флаг -static. То есть если код определен в файл hello.cpp, то команда на компиляцию для g++ может выглядеть следующим образом: 1 g++ hello.cpp -o hello -static Для инициализации строк можно использовать различные способы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include #include int main() { std::string s1; // пустая строка std::string s2 = "hello"; // hello std::string s3("welcome"); // welcome std::string s4(5, 'h'); // hhhhh std::string s5 = s2; // hello std::cout << s1 << "\n"; std::cout << s2 << "\n"; std::cout << s3 << "\n"; std::cout << s4 << "\n"; std::cout << s5 << "\n"; return 0; } Если при определении переменной типа string мы не присваиваем ей никакого значения, то по умолчанию данная переменная содержит пустую строку: std::string s1; Также можно инициализировать переменную строчным литералом, который заключается в двойные кавычки: std::string s2 = "hello"; В качестве альтернативы можно передавать строку в скобках после определения переменной: std::string s3("welcome"); Если необходимо, чтобы строка содержала определенное количесто определеных символов, то можно указать в скобках количество символов и сам символ: std::string s4(5, 'h'); И также можно передать переменной копию другой строки: std::string s5 = s2; Конкатенация строк Над строками можно выполнять ряд операций. В частности, можно объединять строки с помощью стандартной операции сложения. К строкам можно применять операции сравнения. Оператор == возвращает true, если все символы обеих строк равны. std::string s1 = "hello"; std::string s2 = "world"; bool result = s1 == s2; // false result = s1 == "Hello"; // false result = s1 == "hello"; // true Таким образом функция замены строки для формирования ссылки bool replace(std::string& str, const std::string& from, const std::string& to) { size_t start_pos = str.find(from); if (start_pos == std::string::npos) return false; str.replace(start_pos, from.length(), to); return true; } Сама замена и отправка std::string s = message->text; replace(s, "youtube.com", "youtubeZZ.com"); replace(s, "youtu.be/", "youtubeZZ.com/watch?v="); bot.getApi().sendMessage(message->chat->id, "your audio is: " + s); 3 Тестирование ботаПри запуске приложение имеет консольный вид и отображает служебную информацию. Рисунок 4 – консольный бот Вид в телеграм. Рисунок 5 – телеграм ссылка. Тесты определяются и выполняются в одном или нескольких тестовых проектах. Тестовый проект создает отдельное приложение, которое вызывает код в исполняемом файле и информирует о его поведении. Проекты создаются в том же решении, что и тестируемый код. Unit тесты предназначены для тестирования отдельных независимых участков кода, которые реализуют определенное поведение. Интеграционные тесты, в свою очередь, проверяют взаимодействие разных компонентов системы (работа с БД, сторонним АПИ и тд.) и корректную реализацию бизнес логики. ЗаключениеДля написания данного отчета были применены различные теоретические материалы, благодаря которым была закреплена теория и подготовлена база для применения ее на практике. Благодаря производственной практике я собрал общую информацию о проделанной работе и актуализировал свои знания в области программирования. На практике изучались назначения и принципы построения уникальных баз данных, особенности функционирования, практическое использование, исследовалось использование систем и языков программирования в процессе решения производственных задач. Изучались существующие на предприятии метод защиты информации от зловредного несанкционированного доступа, осуществлялось экономическое и экологическое обоснование применения информационных технологий. Знания в сфере информационных технологий и их применение в различных сферах деятельности являются важнейшей частью в информатике. Благодаря производственной практике я углубил свои знания в программировании и информатики, применил свои теоретические знания, полученные на курсах обучения. Список литературыMicrosoft Corporation. Разработка приложений на Microsoft Visual C++ 6.0. Учебный курс: Официальное пособие Microsoft для самостоятельной подготовки / Пер. с англ.- М.: Издательско-торговый дом «Русская Редакция», 2000. – 576 стр.: илл. C/С++. Программирование на языке высокого уровня / Т.А. Павловская — СПб.: Питер, 2011 . Абельсон Х., Сассман Д. Структура и интерпретация компьютерных программ. — М.: Добросвет, 2010. Архангельский А.Я. Программирование в C++ Builder 5 (или 6). – М.: ЗАО «Издательство БИНОМ», 2002 г. – 1152 с. Архангельский А.Я., Тагин М.А. Приемы программирования в C++ Builder. Механизмы Windows, сети. – М.: ООО «Бином-Пресс», 2004 г. – 656 с. Ашарина, И.В. Основы программирования на языках С и С++: Курс лекций для высших учебных заведений / И.В. Ашарина. — М.: Гор. линия-Телеком, 2018. — 208 c. Бабэ Б. Просто и ясно о Borland C++: Пер. с англ. -M.:Бином. -416 с.: илл. Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2018. — 368 c. Березин, Б. И. Начальный курс С и С++ / Б. И. Березин, С. Б. Березин. – М. : Диалог– МРТИ, 1999. Бухтияров, А. М. Сборник задач по программированию на алгоритмических языках / А. М. Бухтияров, Г. Д. Фролов. – М. : Статистика, 1978. Бьянкуцци, Ф. Пионеры программирования: Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден; Пер. с англ. С. Маккавеев. — СПб.: Символ-Плюс, 2017. — 608 c. Приложение// CMakeProject1.cpp: определяет точку входа для приложения. // #include #include #include "CMakeProject1.h" bool replace(std::string& str, const std::string& from, const std::string& to) { size_t start_pos = str.find(from); if (start_pos == std::string::npos) return false; str.replace(start_pos, from.length(), to); return true; } int main() { TgBot::Bot bot("5945711211:AAGcEwX676XgJl6REI8Fzx6BEluMgxUt4gU"); bot.getEvents().onCommand("start", [&bot](TgBot::Message::Ptr message) { bot.getApi().sendMessage(message->chat->id, "Hi! Send me youtube link"); }); bot.getEvents().onAnyMessage([&bot](TgBot::Message::Ptr message) { printf("youtube link is %s\n", message->text.c_str()); if (StringTools::startsWith(message->text, "/start")) { return; } std::string s = message->text; replace(s, "youtube.com", "youtubeZZ.com"); replace(s, "youtu.be/", "youtubeZZ.com/watch?v="); bot.getApi().sendMessage(message->chat->id, "your audio is: " + s); }); try { printf("Bot username: %s\n", bot.getApi().getMe()->username.c_str()); TgBot::TgLongPoll longPoll(bot); while (true) { printf("Long poll started\n"); longPoll.start(); } } catch (TgBot::TgException& e) { printf("error: %s\n", e.what()); } return 0; } Сборка CMAKE "CMakeProject1.exe" (Win32). Загружено "C:\Intel\telegram\CMakeProject1\out\build\x64-Debug\CMakeProject1.exe". Символы загружены. "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\ntdll.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\kernel32.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\KernelBase.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\ws2_32.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\rpcrt4.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Intel\telegram\CMakeProject1\out\build\x64-Debug\TgBot.dll". Символы загружены. "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\msvcp140d.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\vcruntime140d.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\vcruntime140_1d.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\ucrtbased.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Intel\telegram\CMakeProject1\out\build\x64-Debug\libssl-3-x64.dll". Символы загружены. "CMakeProject1.exe" (Win32). Загружено "C:\Intel\telegram\CMakeProject1\out\build\x64-Debug\libcrypto-3-x64.dll". Символы загружены. "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\advapi32.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\msvcrt.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\sechost.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\crypt32.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\ucrtbase.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\user32.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\win32u.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\gdi32.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\gdi32full.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\msvcp_win.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Intel\telegram\CMakeProject1\out\build\x64-Debug\libcurl-d.dll". Символы загружены. "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\bcrypt.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Intel\telegram\CMakeProject1\out\build\x64-Debug\zlibd1.dll". Символы загружены. "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\imm32.dll". Поток 0x5320 завершился с кодом 0 (0x0). "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\bcryptprimitives.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\kernel.appcore.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\mswsock.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\dnsapi.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\IPHLPAPI.DLL". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\nsi.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\rasadhlp.dll". "CMakeProject1.exe" (Win32). Загружено "C:\Windows\System32\FWPUCLNT.DLL". Поток 0x18c0 завершился с кодом 3221225786 (0xc000013a). Поток 0x3c74 завершился с кодом 3221225786 (0xc000013a). Поток 0x4964 завершился с кодом 3221225786 (0xc000013a). Поток 0x49c4 завершился с кодом 3221225786 (0xc000013a). Поток 0x5db8 завершился с кодом 3221225786 (0xc000013a). Поток 0x1ae0 завершился с кодом 3221225786 (0xc000013a). Программа "[23888] CMakeProject1.exe" завершилась с кодом 3221225786 (0xc000013a). |