🔌 Plugin System v1.0

Гибкая архитектура для бота с поддержкой динамических плагинов.

🧩 Интерфейсы ядра

📦 IPlugin abstract

Базовый класс для любого плагина.

virtual std::string name() = 0;
virtual std::string version() = 0;
virtual std::string author() = 0;
virtual std::string description() = 0;
virtual std::vector<std::string> commands() = 0;
virtual void onCommand(...)
  • name / version / author / description — метаданные плагина.
  • commands() — список команд, которые обрабатывает плагин.
  • onCommand(command, args, chatId, bot) — вызывается при получении команды.

🤖 IBotApi интерфейс бота

API, которое плагин использует для взаимодействия с ботом.

virtual void sendMessage(int64_t chatId, const std::string& text) = 0;
virtual void sendPhoto(int64_t chatId, const std::vector<unsigned char>& imageBytes) = 0;
virtual void sendMessageWithKeyboard(...)
  • sendMessage — отправка текстового сообщения.
  • sendPhoto — отправка изображения (массив байтов).
  • sendMessageWithKeyboard — сообщение с инлайн-клавиатурой.

🧪 Пример реализации TestPlugin

📋 TestPlugin author: Test v1.0

Плагин реагирует на команду /test и демонстрирует все возможности API.

bot.sendMessage(chatId, "hello"); bot.sendMessageWithKeyboard(chatId, "Hello", {{"Test", "Test"}}); std::vector<unsigned char> imageBytes = getPngBytes(); bot.sendPhoto(chatId, imageBytes);

💡 Команды плагина: /test

⚙️ DLL экспорт · фабрика плагинов

🔹 createPlugin
extern "C" __declspec(dllexport) IPlugin* createPlugin() { return new TestPlugin(); }
🔸 destroyPlugin
extern "C" __declspec(dllexport) void destroyPlugin(IPlugin* p) { delete p; }

🧷 Эти функции используются для загрузки/выгрузки плагина из динамической библиотеки.

🚀 Быстрый старт

  • 1 Унаследуйте свой класс от IPlugin и реализуйте все виртуальные методы.
  • 2 Определите createPlugin / destroyPlugin с extern "C".
  • 3 Соберите как динамическую библиотеку .dll и загрузите в приложение.