Главная страница
Навигация по странице:

  • 1 Анализ технического задания

  • 1.2 Особенности протокола телеграмм

  • 2 Разработка телеграм бота

  • 3 Тестирование бота

  • Список литературы

  • боты в телеге. тбот. Содержание Введение 3 1 Анализ технического задания 5 1 Принцип создания бота в телеграм 5 2 Особенности протокола телеграмм 6 2 Разработка телеграм бота 7 3 Тестирование бота 15 Заключение 17 Список литературы 18 Приложение 20 Введение


    Скачать 0.88 Mb.
    НазваниеСодержание Введение 3 1 Анализ технического задания 5 1 Принцип создания бота в телеграм 5 2 Особенности протокола телеграмм 6 2 Разработка телеграм бота 7 3 Тестирование бота 15 Заключение 17 Список литературы 18 Приложение 20 Введение
    Анкорботы в телеге
    Дата18.02.2023
    Размер0.88 Mb.
    Формат файлаdocx
    Имя файлатбот.docx
    ТипПротокол
    #943960




    Содержание




    Введение 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 тесты предназначены для тестирования отдельных независимых участков кода, которые реализуют определенное поведение.

    Интеграционные тесты, в свою очередь, проверяют взаимодействие разных компонентов системы (работа с БД, сторонним АПИ и тд.) и корректную реализацию бизнес логики.

    Заключение


    Для написания данного отчета были применены различные теоретические материалы, благодаря которым была закреплена теория и подготовлена база для применения ее на практике. Благодаря производственной практике я собрал общую информацию о проделанной работе и актуализировал свои знания в области программирования.

    На практике изучались назначения и принципы построения уникальных баз данных, особенности функционирования, практическое использование, исследовалось использование систем и языков программирования в процессе решения производственных задач. Изучались существующие на предприятии метод защиты информации от зловредного несанкционированного доступа, осуществлялось экономическое и экологическое обоснование применения информационных технологий. Знания в сфере информационных технологий и их применение в различных сферах деятельности являются важнейшей частью в информатике. Благодаря производственной практике я углубил свои знания в программировании и информатики, применил свои теоретические знания, полученные на курсах обучения.

    Список литературы


    1. Microsoft Corporation. Разработка приложений на Microsoft Visual C++ 6.0. Учебный курс: Официальное пособие Microsoft для самостоятельной подготовки / Пер. с англ.- М.: Издательско-торговый дом «Русская Редакция», 2000. – 576 стр.: илл.

    2. C/С++. Программирование на языке высокого уровня / Т.А. Павловская — СПб.: Питер, 2011 .

    3. Абельсон Х., Сассман Д. Структура и интерпретация компьютерных программ. — М.: Добросвет, 2010.

    4. Архангельский А.Я. Программирование в C++ Builder 5 (или 6). – М.: ЗАО «Издательство БИНОМ», 2002 г. – 1152 с.

    5. Архангельский А.Я., Тагин М.А. Приемы программирования в C++ Builder. Механизмы Windows, сети. – М.: ООО «Бином-Пресс», 2004 г. – 656 с.

    6. Ашарина, И.В. Основы программирования на языках С и С++: Курс лекций для высших учебных заведений / И.В. Ашарина. — М.: Гор. линия-Телеком, 2018. — 208 c.

    7. Бабэ Б. Просто и ясно о Borland C++: Пер. с англ. -M.:Бином. -416 с.: илл.

    8. Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2018. — 368 c.

    9. Березин, Б. И. Начальный курс С и С++ / Б. И. Березин, С. Б. Березин. – М. : Диалог– МРТИ, 1999.

    10. Бухтияров, А. М. Сборник задач по программированию на алгоритмических языках / А. М. Бухтияров, Г. Д. Фролов. – М. : Статистика, 1978.

    11. Бьянкуцци, Ф. Пионеры программирования: Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден; Пер. с англ. С. Маккавеев. — СПб.: Символ-Плюс, 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).


    написать администратору сайта