Telegram 机器人 C++ 版:勇敢者的分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么用 C++ 开发 Telegram 机器人?这并非疯狂之举

\n

当谈到创建 Telegram 机器人时,首先想到的往往是 Python、Node.js 或 Go。它们简单易用,拥有成千上万的现成库和庞大的社区。但如果您的项目需要极致性能呢?或者您正在编写一个高负载的解析器?又或者,您只是 C++ 的狂热爱好者,想以“硬核”方式完成一切?

\n

用 C++ 编写 Telegram 机器人是完全可行的任务。是的,这不是最流行的途径,但它有显著的优点:运行速度快、内存占用低,并且能完全控制每一个字节。在本指南中,我们将从安装库开始,一直到构建一个能够响应命令和解析数据的完整机器人。让我们开始吧!

\n\n

我们需要什么?

\n

我们需要以下工具:

\n
    \n
  • C++17/20 编译器 — Linux/macOS 上的 g++ 或 Windows 上的 MSVC。
  • \n
  • CMake — 构建系统(版本 3.10+)。
  • \n
  • tgbot-cpp 库 — 最流行的 Telegram Bot API C++ 封装。
  • \n
  • libcurl — 用于 HTTP 请求(包含在 tgbot-cpp 中)。
  • \n
  • nlohmann/json — 用于处理 JSON(也包含在依赖中)。
  • \n
  • 机器人令牌 — 从 Telegram 的 @BotFather 获取。
  • \n
\n

所有代码将在 Linux (Ubuntu 22.04) 下编写,但可以轻松通过 vcpkg 或 Conan 适配到 Windows。

\n\n

步骤 1:安装库

\n

首先安装依赖项。在终端中执行:

\n
sudo apt update\nsudo apt install git cmake g++ libcurl4-openssl-dev libssl-dev nlohmann-json3-dev
\n

现在克隆并构建 tgbot-cpp:

\n
git clone https://github.com/reo7sp/tgbot-cpp.git\ncd tgbot-cpp\nmkdir build && cd build\ncmake ..\nmake -j4\nsudo make install
\n

如果一切顺利,库已安装到系统中。可以通过命令 ls /usr/local/include/tgbot/ 验证——您将看到头文件。

\n\n

步骤 2:项目结构和 CMakeLists.txt

\n

为项目创建一个文件夹:

\n
mkdir my_telegram_bot && cd my_telegram_bot\ntouch main.cpp CMakeLists.txt
\n

在 CMakeLists.txt 中编写构建配置:

\n
cmake_minimum_required(VERSION 3.10)\nproject(MyTelegramBot)\n\nset(CMAKE_CXX_STANDARD 17)\n\nfind_package(TgBot REQUIRED)\nfind_package(OpenSSL REQUIRED)\nfind_package(CURL REQUIRED)\n\nadd_executable(my_bot main.cpp)\ntarget_link_libraries(my_bot TgBot::TgBot OpenSSL::SSL OpenSSL::Crypto CURL::libcurl)
\n

注意:我们链接了 OpenSSL 和 libcurl——它们用于加密和 HTTP 请求。

\n\n

步骤 3:编写 C++ 机器人核心

\n

打开 main.cpp 并编写最小结构:

\n
#include <tgbot/tgbot.h>\n#include <iostream>\n\nint main() {\n    // 替换为您的令牌\n    std::string token = "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz";\n\n    TgBot::Bot bot(token);\n\n    // /start 命令处理器\n    bot.getEvents().onCommand("start", [&bot](TgBot::Message::Ptr message) {\n        bot.getApi().sendMessage(message->chat->id, "你好!我是 C++ 机器人。有什么可以帮您的?");\n    });\n\n    // 任何文本消息的处理器\n    bot.getEvents().onAnyMessage([&bot](TgBot::Message::Ptr message) {\n        if (message->text == "/start") return; // 忽略重复\n        bot.getApi().sendMessage(message->chat->id, "您写道:" + message->text);\n    });\n\n    try {\n        std::cout << "机器人已启动。等待消息..." << std::endl;\n        TgBot::TgLongPoll longPoll(bot);\n        while (true) {\n            longPoll.start();\n        }\n    } catch (TgBot::TgException& e) {\n        std::cerr << "错误:" << e.what() << std::endl;\n    }\n\n                

博客

书籍推荐