npm package: @relaygram/sdk
Description: O SDK oficial para criação de plugins para o Relaygram. Extenda a funcionalidade do Relaygram com transformações de mensagens, filtros, integrações com APIs e muito mais.
Author: Marcuth
Latest version: 0.1.1

# 🌌 Relaygram SDK

O SDK oficial para criação de plugins para o Relaygram. Extenda a funcionalidade do Relaygram com transformações de mensagens, filtros, integrações com APIs e muito mais.

## 🚀 Como Começar

### Instalação

```bash
npm install @relaygram/sdk zod
# ou
yarn add @relaygram/sdk zod
```

### Criando seu Primeiro Plugin

Um plugin básico consiste em extender a classe `RelaygramPlugin` e definir um `manifest`.

```typescript
import { RelaygramPlugin, PluginManifest, PluginContext } from "@relaygram/sdk"
import { type Message } from "@mtcute/node"
import { z } from "zod"

export class MeuPlugin extends RelaygramPlugin {
    readonly manifest: PluginManifest = {
        id: "meu-plugin",
        name: "Meu Plugin",
        description: "Exemplo de plugin usando o SDK",
        version: "1.0.0",
        dependencies: [],
        author: { name: "Seu Nome", email: "seu@email.com" },
        license: "MIT",
        homepage: "https://github.com/seu-usuario/meu-plugin",
        issues: "https://github.com/seu-usuario/meu-plugin/issues",
        // Opcional: Configuração via Zod para validação
        configValidator: z.object({
            prefix: z.string().default("[Relay]")
        })
    }

    async processMessage(message: Message, context: PluginContext): Promise<Message | null> {
        const { prefix } = context.config

        if (!message.text) return message

        return {
            ...message,
            text: `${prefix} ${message.text}`
        } as Message
    }
}
```

## 🛠️ Funcionalidades do SDK

### 🚫 Ignorar Mensagens

Você pode interromper o envio de uma mensagem de duas formas:

1.  **`context.ignore()`**: Interrompe imediatamente a execução lançando um erro interno. Ideal para parar o processamento de qualquer lugar no seu código.
2.  **`return this.skip()`**: Retorna `null` sinalizando ao executor que a mensagem não deve ser enviada.

### 🧩 Validação com Zod

O campo `configValidator` no manifesto permite que o Relaygram valide as configurações passadas ao seu plugin antes de executá-lo, garantindo que `context.config` sempre tenha os dados no formato esperado.

## 📦 Exportação para Instalação via URL

Para que seu plugin possa ser instalado diretamente via URL no Relaygram Desktop, seu arquivo JavaScript final deve seguir este padrão de exportação (CommonJS):

```javascript
// dist/index.js
const { RelaygramPlugin } from "@relaygram/sdk"

class MeuPlugin extends RelaygramPlugin {
    // ... implementação
}

module.exports = {
  manifest: {
    id: "meu-plugin",
    // ... restante do manifesto
  },
  Plugin: MeuPlugin
}
```

### Dicas de Publicação

Recomendamos utilizar um bundler (como `esbuild` ou `tsup`) para empacotar seu plugin em um único arquivo `.js` que possa ser acessado publicamente via GitHub Gist, Raw, ou seu próprio servidor.

---

Feito com ❤️ pela equipe do **Relaygram**.