لماذا C++ لبوت تيليجرام؟ هذا ليس جنونًا
\nعند الحديث عن إنشاء بوتات تيليجرام، يتبادر إلى الذهن أولاً Python أو Node.js أو Go. فهي بسيطة، ولديها آلاف المكتبات الجاهزة ومجتمعات ضخمة. ولكن ماذا لو كان مشروعك يتطلب أقصى أداء؟ أو كنت تكتب محلل بيانات عالي التحميل؟ أو ربما كنت فقط من محبي C++ وتريد فعل كل شيء "بالطريقة الصعبة"؟
\nكتابة بوت تيليجرام بلغة C++ هي مهمة ممكنة تمامًا. نعم، هذا ليس المسار الأكثر شيوعًا، لكن له مزايا جدية: سرعة الأداء، استهلاك منخفض للذاكرة، وتحكم كامل في كل بايت. في هذا الدليل، سننتقل من تثبيت المكتبات إلى بوت جاهز يرد على الأوامر ويحلل البيانات. هيا بنا!
\n\nماذا نحتاج؟
\nللعمل نحتاج إلى:
\n- \n
- مترجم C++17/20 — g++ (لينكس/macOS) أو MSVC (ويندوز). \n
- CMake — نظام بناء (الإصدار 3.10+). \n
- مكتبة tgbot-cpp — أشهر غلاف C++ لواجهة برمجة تطبيقات بوتات تيليجرام. \n
- libcurl — لطلبات HTTP (مضمنة مع tgbot-cpp). \n
- nlohmann/json — للعمل مع JSON (مضمنة أيضًا في التبعيات). \n
- رمز البوت (Token) — احصل عليه من @BotFather في تيليجرام. \n
سنكتب كل الكود تحت لينكس (Ubuntu 22.04)، لكن يمكن تكييفه بسهولة مع ويندوز عبر vcpkg أو Conan.
\n\nالخطوة 1: تثبيت المكتبات
\nأولاً، نثبت التبعيات. في الطرفية ننفذ:
\nsudo apt update\nsudo apt install git cmake g++ libcurl4-openssl-dev libssl-dev nlohmann-json3-dev\nالآن نستنسخ ونبني tgbot-cpp:
\ngit 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/ — سترى ملفات الرأس.
الخطوة 2: هيكل المشروع وملف CMakeLists.txt
\nننشئ مجلدًا للمشروع:
\nmkdir my_telegram_bot && cd my_telegram_bot\ntouch main.cpp CMakeLists.txt\nفي CMakeLists.txt نكتب تكوين البناء:
\ncmake_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