телеграм-бот

Ответить
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

телеграм-бот

Сообщение ya »

https://core.telegram.org/bots/samples

Код: Выделить всё

sudo apt-get install libboost-all-dev libjson-c-dev

Код: Выделить всё

git clone https://github.com/libcpr/cpr.git
cd cpr
mkdir build
cd build
cmake ..
make
sudo make install

Код: Выделить всё

#include <cpr/cpr.h>
#include <iostream>
#include <string>
#include <json/json.h>

const std::string BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"; // Замените на ваш токен
const std::string BASE_URL = "https://api.telegram.org/bot" + BOT_TOKEN;

void sendMessage(const std::string& chat_id, const std::string& text) {
    std::string url = BASE_URL + "/sendMessage";

    // Создаем JSON-объект
    Json::Value jsonData;
    jsonData["chat_id"] = chat_id;
    jsonData["text"] = text;

    // Отправляем POST-запрос
    auto response = cpr::Post(cpr::Url{url},
                               cpr::Body{jsonData.toStyledString()},
                               cpr::Header{{"Content-Type", "application/json"}});

    std::cout << "Response: " << response.text << std::endl; // Выводим ответ от Telegram
}

int main() {
    std::string chat_id = "CHAT_ID"; // Замените на ID вашего чата
    std::string text = "Hello, World!";

    sendMessage(chat_id, text);

    return 0;
}
Компиляция:

Код: Выделить всё

g++ -std=c++11 -o telegram_bot telegram_bot.cpp -lcpr -lboost_system -lboost_thread -lpthread -ljson-c -I/usr/include/json
Запуск

Код: Выделить всё

./telegram_bot
Для реализации асинхронных операций вы можете использовать boost::asio для создания многопоточных операций или событийного цикла.

Не забудьте заменить YOUR_TELEGRAM_BOT_TOKEN и CHAT_ID на фактический токен вашего бота и ID вашего чата соответственно.
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

Код: Выделить всё

#include <cpr/cpr.h>
#include <iostream>
#include <string>
#include <json-c/json.h> // Изменено на json-c

const std::string BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"; // Замените на ваш токен
const std::string BASE_URL = "https://api.telegram.org/bot" + BOT_TOKEN;

void sendMessage(const std::string& chat_id, const std::string& text) {
    std::string url = BASE_URL + "/sendMessage";

    // Создаем JSON-объект
    json_object *jsonData = json_object_new_object();
    json_object_object_add(jsonData, "chat_id", json_object_new_string(chat_id.c_str()));
    json_object_object_add(jsonData, "text", json_object_new_string(text.c_str()));

    // Получаем строку JSON
    const char *jsonStr = json_object_to_json_string(jsonData);

    // Отправляем POST-запрос
    auto response = cpr::Post(cpr::Url{url},
                               cpr::Body{jsonStr},
                               cpr::Header{{"Content-Type", "application/json"}});

    std::cout << "Response: " << response.text << std::endl; // Выводим ответ от Telegram

    // Освобождаем память
    json_object_put(jsonData);
}

int main() {
    std::string chat_id = "CHAT_ID"; // Замените на ID вашего чата
    std::string text = "Hello, World!";

    sendMessage(chat_id, text);

    return 0;
}

Код: Выделить всё

g++ -std=c++17 -o telegram_bot telegram_bot.cpp -lcpr -lboost_system -lboost_thread -lpthread -ljson-c  -I/usr/include/json-c
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот v2

Сообщение ya »

Код: Выделить всё

sudo apt-get install libcpprest-dev

Код: Выделить всё

#include <cpprest/http_client.h>
#include <cpprest/json.h>
#include <iostream>

using namespace web;
using namespace web::http;
using namespace web::http::client;

const std::string BOT_TOKEN = "YOUR_BOT_TOKEN";
const std::string BASE_URL = "https://api.telegram.org/bot" + BOT_TOKEN;

// Функция для отправки сообщения
void sendMessage(const std::string& chat_id, const std::string& text) {
    http_client client(U(BASE_URL + "/sendMessage"));
    uri_builder builder(U(""));
    builder.append_query(U("chat_id"), U(chat_id));
    builder.append_query(U("text"), U(text));

    client.request(methods::POST, builder.to_string()).then([](http_response response) {
        if (response.status_code() == status_codes::OK) {
            std::cout << "Message sent successfully!" << std::endl;
        } else {
            std::cout << "Error sending message." << std::endl;
        }
    }).wait();
}

// Основная функция
int main() {
    std::string chat_id = "CHAT_ID"; // Замените на ID вашего чата
    std::string message = "Hello, this is a test message!";
    
    sendMessage(chat_id, message);

    return 0;
}
В этом разделе более подробно рассматриваются платежи через API бота Telegram
https://core.telegram.org/bots/payments#the-payments-api

Подключение платежей
Чтобы начать принимать платежи, вам нужен Telegram-бот . Используйте BotFather для создания бота, если у вас его еще нет.

Теперь у вас есть торговый бот, который может предлагать товары или услуги пользователям Telegram. Давайте назовем его @merchantbotв этом документе.

Получение токена
Используйте /mybotsк оманду в чате с BotFather и выберите того @merchantbot, кто будет предлагать товары или услуги.
Перейдите в Настройки бота > Платежи .
Выберите провайдера, и вы будете перенаправлены на соответствующего бота.
Введите необходимые данные для успешного подключения к платежному провайдеру, вернитесь в чат с Botfather.
Теперь в сообщении будут показаны доступные поставщики. У каждого будет имя, токен и дата подключения поставщика.
Токен будет использоваться при работе с API бота.
Осуществление платежей
Необходимые методы для создания вашей платежной реализации вы найдете в разделе «Платежи» Руководства по API бота .

https://core.telegram.org/bots/api#payments
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

https://github.com/reo7sp/tgbot-cpp
https://www.youtube.com/watch?v=dwij9ZytWbQ
https://www.youtube.com/playlist?list=PLlxYwLnXeoE32ZbnD_BwwQ0cEbw8lIPg2

Документация по tgbot-cpp
http://reo7sp.github.io/tgbot-cpp/

Установка необходимых библиотек tgbot-cpp для сборки Телеграм-бота

Код: Выделить всё

#!/bin/bash

sudo apt update
sudo apt install git build-essential cmake libssl-dev libcurl4-openssl-dev

git clone https://github.com/reo7sp/tgbot-cpp

mkdir -p tgbot-cpp/build
cd tgbot-cpp/build
cmake ..
make -j$(nproc)
sudo make install
далее нужно создать сам телеграм-бот, например, назовём его telegram_bot

Теперь, когда у нас установлены необходимые глобальные библиотеки сборки бота, можно создать каталог в произвольном месте и в нём создать файл проекта (telegram_bot.cpp) и файл сборки (Makefile) . Или можно перейти в каталог samples/проект/src и в нём создать файл сборки, и собрать бота на основе предложенных вариантов. Или можно собрать Makefile из предложенных примеров samples/проект/CMakeLists.txt командой:

telegram_bot.cpp

Код: Выделить всё

#include <stdio.h>
#include <tgbot/tgbot.h>

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;
}

Создадим файл сборки (Makefile) бота telegram_bot

Makefile

Код: Выделить всё

# Makefile для компиляции telegram_bot

CC = g++
CFLAGS = -std=c++14 -I/usr/local/include
LIBS = -lTgBot -lboost_system -lssl -lcrypto -lpthread
EXECUTABLE = telegram_bot

# Список исходных файлов
SOURCES = telegram_bot.cpp

# Создание объектных файлов
OBJECTS = $(SOURCES:.cpp=.o)

# Правило для компиляции
$(OBJECTS): %.o: %.cpp
    $(CC) $(CFLAGS) -c $< -o $@

# Правило для линковки
$(EXECUTABLE): $(OBJECTS)
    $(CC) $(OBJECTS) -o $@ $(LIBS)

# Правило для очистки
clean:
    rm -f $(OBJECTS) $(EXECUTABLE)


# Правило для запуска
run: $(EXECUTABLE)
    ./$(EXECUTABLE)


теперь бот можно собрать и/или пересобрать командой

Код: Выделить всё

make clear && make -j$(nproc)
запуск бота

Код: Выделить всё

./telegram_bot
Чтобы избежать ошибок сборки из tgbot-cpp/samples/проект/

Код: Выделить всё

#pragma message: The practice of declaring the Bind placeholders (_1, _2, ...) in the global namespace is deprecated. Please use <boost/bind/bind.hpp> + using namespace boost::placeholders, or define BOOST_BIND_GLOBAL_PLACEHOLDERS to retain the current behavior.
нужно добавить в файл CMakeLists.txt

Код: Выделить всё

add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS)
затем уже выполнять сборку

Код: Выделить всё

cmake .
make -j$(nproc)
Если не используется переменная окружения для токена, то функцию для возврата переменной окружения getenv() из кода проекта удалить

Установка переменной окружения:

Код: Выделить всё

export TELEGRAM_BOT_TOKEN=token
тогда функция getenv() будет в коде проекта выглядеть так

Код: Выделить всё

getenv(TELEGRAM_BOT_TOKEN)
или в код проекта можно вставить проверку наличия соответствующей переменной окружения

Код: Выделить всё

    const char* tokenEnv = getenv(TELEGRAM_BOT_TOKEN);
    if (tokenEnv == nullptr) {
        std::cerr << "Error: Environment variable TELEGRAM_BOT_TOKEN not set." << std::endl;
        return 1; // Возвращаем код ошибки
    }

В проект подключить заголовочный файл <iostream> ввода-вывода потока

Код: Выделить всё

#include <iostream>
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

/bin/bash

Код: Выделить всё

sudo make install
После того как бот будет протестирован, можно его сделать демоном и включить в автозапуск
пост по сабжу: автозапуск autorun1
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

Для подключения к базе данных MySQL (mariadb) добавить в CMakeLists.txt

Код: Выделить всё

#MySQL
# Добавьте include директорию
target_include_directories(имя_проекта PRIVATE /usr/include/mariadb/mysql)
# Укажите путь к библиотекам (если необходимо)
target_link_directories(имя_проекта PRIVATE /usr/lib/mysql)
# Линковка библиотек
target_link_libraries(имя_проекта
    mariadb
    mysqlcppconn
    mysqlclient_r
    pthread
)
"имя_проекта" в CMakeLists.txt замените на своё, как указано в строке project(имя_проекта)

сборка проекта

Код: Выделить всё

#!/bin/bash

make clean
cmake .
make -j$(nproc)
пост по сабжу: Подключение к базе данных MySQL (библиотека mariadb.hpp)
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

Telegram bot powered by C++ | Бот для наблюдения за курсом валют | Currency monitoring Telegram bot
https://www.youtube.com/watch?v=dwij9ZytWbQ
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

Код: Выделить всё

~/cpp-telegram/tgbot-cpp/samples/echobot-submodule/
├── CMakeLists.txt
└── tgbot-cpp/  (скопированная папка)
cmake .
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

https://tdlib.github.io/telegram-bot-api/build.html?os=Linux

su -
apt-get update
apt-get upgrade
apt-get install make git zlib1g-dev libssl-dev gperf cmake g++
exit
git clone --recursive https://github.com/tdlib/telegram-bot-api.git
cd telegram-bot-api
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=.. ..
cmake --build . --target install
cd ../..

# Важно: Получите токен вашего бота из @BotFather
# в Telegram.
TOKEN="YOUR_BOT_TOKEN"

# Создайте файл main.cpp:
cat << EOF > main.cpp
#include <iostream>
#include <fstream>
#include <string>

#include <telegram-bot-api/telegram-bot-api.h>

int main() {
telegram::Bot bot(TOKEN);

bot.getUpdates([&bot](const telegram::Update& update) {
if (update.message) {
std::cout << "Получено сообщение: " << update.message->text << std::endl;
bot.sendMessage(update.message->chat_id, "Привет!");
}
});

return 0;
}
EOF

# Скомпилируйте бота:
g++ -std=c++11 -I/path/to/telegram-bot-api/include -o telegram_bot main.cpp -L/path/to/telegram-bot-api/lib -ltgbot

# Замените `/path/to/telegram-bot-api` на фактический путь к вашей папке.
# Запустите бота:
./telegram_bot
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

Код: Выделить всё

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
ya
^-^
Сообщения: 2534
Зарегистрирован: 16 дек 2021, 19:56

Re: телеграм-бот

Сообщение ya »

https://github.com/baderouaich/tgbotxx

Код: Выделить всё

git clone https://github.com/baderouaich/tgbotxx
cd tgbotxx
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo make install 
# On Windows run `make install` as administrator 
Ответить