EventContext
EventContext - единый контекст, передаваемый во все обработчики событий: команды, HTTP, cron и event bus триггеры.
Общие поля
| Поле | Тип | Описание |
|---|---|---|
PluginID | string | ID текущего плагина |
TriggerType | string | "messenger", "http", "cron", "event" |
TriggerName | string | Имя конкретного триггера/команды |
Timestamp | int64 | Unix timestamp события |
Данные по типу триггера
В зависимости от типа триггера одно из этих полей не nil:
| Поле | Тип | Не nil когда |
|---|---|---|
Messenger | *MessengerData | Команды мессенджера |
HTTP | *HTTPEventData | HTTP-триггеры |
Cron | *CronEventData | Cron-триггеры |
Event | *EventBusData | Event bus-триггеры |
MessengerData
| Поле | Тип | Описание |
|---|---|---|
UserID | int64 | ID пользователя |
ChannelType | string | Тип канала ("telegram", "discord", ...) |
ChatID | string | ID чата |
CommandName | string | Имя вызванной команды |
Params | map[string]string | Собранные параметры |
Locale | string | Локаль пользователя |
Files | []FileRef | Прикреплённые файлы (пусто, если сообщение без файлов) |
HTTPEventData
| Поле | Тип | Описание |
|---|---|---|
Method | string | HTTP-метод (GET, POST, ...) |
Path | string | Путь запроса |
Query | map[string]string | Query-параметры |
Headers | map[string]string | Заголовки запроса |
Body | string | Тело запроса |
RemoteAddr | string | IP-адрес клиента |
Auth | *HTTPAuthInfo | Principal, прошедший host-auth |
HTTPAuthInfo
| Поле | Тип | Описание |
|---|---|---|
Kind | string | "user" или "service" |
UserID | int64 | ID пользователя для запросов с cookie-сессией или user bearer token |
ServiceKeyID | int64 | ID service-key для server-to-server запросов |
CronEventData
| Поле | Тип | Описание |
|---|---|---|
ScheduleName | string | Имя расписания (= Name триггера) |
FireTime | int64 | Unix timestamp срабатывания |
EventBusData
| Поле | Тип | Описание |
|---|---|---|
Topic | string | Топик события |
Payload | []byte | JSON payload события |
Source | string | ID плагина-отправителя |
Методы
Ответы в чат
ctx.Reply(msg Message)
Устанавливает ответ для текущего чата. Поддерживает rich content и встроенную локализацию. Работает только при TriggerType == "messenger".
// Простой текст
ctx.Reply(wasmplugin.NewMessage("Готово!"))
// Локализованное сообщение
ctx.Reply(wasmplugin.NewLocalizedMessage(catalog.L("task_done")))
// Rich content: текст + файл
ctx.Reply(wasmplugin.NewMessage("Вот расписание").File(ref, "schedule.pdf"))Файлы
| Метод | Описание |
|---|---|
ctx.HasFiles() | Есть ли прикреплённые файлы |
ctx.Files() | Список []FileRef |
ctx.FileMeta(fileID) | Метаданные файла |
ctx.FileReadAll(fileID) | Прочитать файл целиком |
ctx.FileRead(fileID, offset, maxBytes) | Чтение чанками |
ctx.FileStore(name, mime, type, data) | Сохранить файл |
Подробнее: Файлы
ctx.FileRead(...) и ctx.FileReadAll(...) остаются рекомендуемым API SDK. В новых сборках они внутри используют file_read_into; raw host ABI file_read оставлен только для совместимости со старыми плагинами.
Уведомления
| Метод | Описание |
|---|---|
ctx.NotifyUser(userID, text, priority) | Уведомление пользователю с учётом предпочтений |
ctx.NotifyChat(channelType, chatID, text, priority) | Уведомление в конкретный чат |
ctx.NotifyStudents().Stream(id).Message(msg).Send() | Уведомление студентам по университетской иерархии (builder) |
Подробнее: Уведомления
HTTP-ответы
ctx.SetHTTPResponse(statusCode int, headers map[string]string, body string)
Устанавливает произвольный HTTP-ответ с кастомными заголовками. Работает только в HTTP-триггерах.
ctx.SetHTTPResponse(200, map[string]string{
"Content-Type": "text/plain",
}, "OK")ctx.JSON(statusCode int, v interface{})
Сериализует значение в JSON и устанавливает его как HTTP-ответ. Заголовок Content-Type: application/json добавляется автоматически.
ctx.JSON(200, map[string]string{"status": "ok"})Логирование
| Метод | Описание |
|---|---|
ctx.Log(msg) | Info-лог |
ctx.LogError(msg) | Error-лог |
ctx.Log("обработка завершена")
ctx.LogError("не удалось подключиться к API")Доступ к данным
ctx.Config(key string, fallback string) string
Получает значение конфигурации плагина. Если ключ не установлен, возвращается fallback.
apiURL := ctx.Config("api_url", "https://api.example.com")ctx.Param(key string) string
Получает параметр команды. Shortcut для ctx.Messenger.Params[key].
name := ctx.Param("name")ctx.Locale() string
Возвращает локаль пользователя (например "ru", "en"). По умолчанию "en".
locale := ctx.Locale()Определение типа события
Handler: func(ctx *wasmplugin.EventContext) error {
switch ctx.TriggerType {
case wasmplugin.TriggerMessenger:
// ctx.Messenger != nil
ctx.Reply(wasmplugin.NewMessage("Привет, " + ctx.Param("name")))
case wasmplugin.TriggerHTTP:
// ctx.HTTP != nil
ctx.JSON(200, map[string]string{"method": ctx.HTTP.Method})
case wasmplugin.TriggerCron:
// ctx.Cron != nil
ctx.Log("cron сработал: " + ctx.Cron.ScheduleName)
case wasmplugin.TriggerEvent:
// ctx.Event != nil
ctx.Log("событие из " + ctx.Event.Source + ": " + ctx.Event.Topic)
}
return nil
}