Файл: Содержание Введение 3 1 Анализ технического задания 5 1 Принцип создания бота в телеграм 5 2 Особенности протокола телеграмм 6 2 Разработка телеграм бота 7 3 Тестирование бота 15 Заключение 17 Список литературы 18 Приложение 20 Введение.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.03.2024
Просмотров: 70
Скачиваний: 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 тесты предназначены для тестирования отдельных независимых участков кода, которые реализуют определенное поведение.
Интеграционные тесты, в свою очередь, проверяют взаимодействие разных компонентов системы (работа с БД, сторонним АПИ и тд.) и корректную реализацию бизнес логики.
Заключение
Для написания данного отчета были применены различные теоретические материалы, благодаря которым была закреплена теория и подготовлена база для применения ее на практике. Благодаря производственной практике я собрал общую информацию о проделанной работе и актуализировал свои знания в области программирования.
На практике изучались назначения и принципы построения уникальных баз данных, особенности функционирования, практическое использование, исследовалось использование систем и языков программирования в процессе решения производственных задач. Изучались существующие на предприятии метод защиты информации от зловредного несанкционированного доступа, осуществлялось экономическое и экологическое обоснование применения информационных технологий. Знания в сфере информационных технологий и их применение в различных сферах деятельности являются важнейшей частью в информатике. Благодаря производственной практике я углубил свои знания в программировании и информатики, применил свои теоретические знания, полученные на курсах обучения.
Список литературы
-
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).