Примеры на C++, Rust, Zig и D
Пример на C++
Плагин перехватывает отправку сообщений и форматирует текст:
examples/cpp/plugin.cpp
#include "mandagram_plugin.hpp" #include <string> #include <algorithm> static bool OnSendMessage(int64_t chat_id, char** text_ptr) { if (!text_ptr || !*text_ptr) return true; std::string s(*text_ptr); // Преобразуем команду .shout в верхний регистр if (s.rfind(".shout ", 0) == 0) { s = s.substr(7); for (auto& c : s) c = toupper(c); *text_ptr = strdup(s.c_str()); } return true; } MANDAGRAM_EXPORT bool mandagram_plugin_init(const PluginApi* api) { api->register_message_send_hook(OnSendMessage); return true; }
Пример на Rust
Использование cdylib в Cargo.toml:
examples/rust/src/lib.rs
use std::ffi::{CStr, c_char}; #[no_mangle] pub extern "C" fn mandagram_plugin_init(api: *const PluginApi) -> bool { unsafe { if let Some(log) = (*api).log_info { log(b"Rust plugin initialized! ".as_ptr() as *const c_char); } } true }
Пример на Zig
examples/zig/plugin.zig
const std = @import("std"); export fn mandagram_plugin_init(api: *const PluginApi) bool { api.log_info("Zig plugin active on MandaGram Desktop!"); return true; }
Пример на D (betterC)
Компиляция без рантайма языка (D runtime) даёт ультралегковесный .dll размером всего несколько килобайт:
examples/d/plugin.d
import core.stdc.stdio; extern(C) export bool mandagram_plugin_init(const PluginApi* api) { api.log_info("D -betterC plugin hooked successfully"); return true; }