MandaGram MandaGram

Быстрый старт: первый плагин

5 мин чтения 4 раздела

Как устроен плагин MandaGram

Плагин MandaGram — это нативная динамическая библиотека (.dll на Windows, .so на Linux), помещаемая в папку plugins/. Клиент автоматически отслеживает состояние файлов на диске и перезагружает плагин на лету при перезаписи.

Взаимодействие между ядром клиента и плагином происходит через открытый C ABI, что позволяет писать расширения на любом языке, поддерживающем экспорт C-функций: C++, Rust, Zig, D, Nim, C и других.

Экспортируемые функции

Каждая библиотека плагина обязана экспортировать две функции с соглашением о вызовах C:

C ABI Signature
const PluginMetadata* mandagram_plugin_metadata(void);
bool mandagram_plugin_init(const PluginApi* api);

Возврат true из mandagram_plugin_init активирует плагин. Метаданные (название, версия, автор, описание) отображаются напрямую в интерфейсе настроек клиента.

Минимальный пример (C++)

plugin.cpp
#include "mandagram_plugin.h"

static PluginMetadata s_meta = {
    .name = "Hello Plugin",
    .version = "1.0.0",
    .author = "Dev",
    .description = "Мой первый нативный плагин для MandaGram",
    .api_version = 1
};

extern "C" {
    MANDAGRAM_EXPORT const PluginMetadata* mandagram_plugin_metadata(void) {
        return &s_meta;
    }

    MANDAGRAM_EXPORT bool mandagram_plugin_init(const PluginApi* api) {
        api->log_info("Плагин успешно загружен в MandaGram!");
        return true;
    }
}

Сборка в одну строку

  • C++ (MSVC / Clang): clang++ -shared -O3 -Iinclude plugin.cpp -o plugins/my_plugin.dll
  • Zig: zig build-lib -dynamic plugin.zig -O ReleaseFast
  • Rust: cargo build --release (crate-type ["cdylib"])
  • D: ldc2 -shared -betterC mandagram_plugin.d