Skip to content

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

Пошаговое руководство: от пустой директории до работающего WASM-плагина.

Требования

  • Go 1.24+ (с поддержкой GOOS=wasip1)

Проверьте версию:

bash
go version
# go version go1.24.0 linux/amd64

1. Создайте проект

bash
mkdir my-plugin && cd my-plugin
go mod init my-plugin

2. Добавьте SDK

SDK распространяется как Go-модуль из отдельного репозитория SuperBotForge. Установите последнюю версию:

bash
go get github.com/SuperBotForge/sdk/go-sdk@latest

Или конкретную версию:

bash
go get github.com/SuperBotForge/sdk/go-sdk@v0.4.0

В коде SDK импортируется с алиасом wasmplugin:

go
import wasmplugin "github.com/SuperBotForge/sdk/go-sdk"

Локальная разработка

Для разработки с локальной копией SDK используйте replace в go.mod:

replace github.com/SuperBotForge/sdk/go-sdk => /path/to/sdk/go-sdk

3. Напишите плагин

Создайте файл main.go:

go
package main

import wasmplugin "github.com/SuperBotForge/sdk/go-sdk"

func main() {
    wasmplugin.Run(wasmplugin.Plugin{
        ID:      "hello",
        Name:    "Hello Plugin",
        Version: "1.0.0",
        Triggers: []wasmplugin.Trigger{
            {
                Name: "hello",
                Type: wasmplugin.TriggerMessenger,
                Descriptions: map[string]string{
                    "ru": "Приветствие",
                    "en": "Greeting",
                },
                Handler: func(ctx *wasmplugin.EventContext) error {
                    ctx.Reply(wasmplugin.NewMessage("Привет, мир!"))
                    return nil
                },
            },
        },
    })
}

Пользователь введёт /hello в чат, и бот ответит Привет, мир!.

4. Соберите WASM-модуль

bash
GOOS=wasip1 GOARCH=wasm go build -o my-plugin.wasm .

Оптимизированная сборка

Используйте -ldflags="-s -w" чтобы убрать отладочную информацию и уменьшить размер файла:

bash
GOOS=wasip1 GOARCH=wasm go build -ldflags="-s -w" -o my-plugin.wasm .

Структура проекта

После сборки проект выглядит так:

my-plugin/
├── go.mod           # модуль и зависимости
├── go.sum
├── main.go          # wasmplugin.Run(...)
└── my-plugin.wasm   # собранный плагин

По мере роста плагина выделяйте обработчики и данные в отдельные файлы:

my-plugin/
├── go.mod
├── go.sum
├── main.go          # wasmplugin.Run(...)
├── handlers.go      # обработчики команд и триггеров
├── data.go          # хелперы и данные
└── my-plugin.wasm

Что дальше?