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

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.03.2024

Просмотров: 63

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.




Содержание




Введение 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).