---
title: "Příkazy s lomítkem: vlastní /příkazy v komunitě mssgs"
description: "Dej své komunitě v mssgs vlastní příkazy s lomítkem: mssgs pošle zprávu tvé webové službě a její JSON odpověď zveřejní jako kartu. Nastavení a limity."
canonical: https://docs.mss.gs/cs/commands
language: cs
---

# Přidej příkazy s lomítkem

Dej své komunitě vlastní /příkazy . Když člen jeden z nich napíše, mssgs pošle zprávu tvé webové službě a zveřejní, co odpoví: kartu, tlačítka nebo odpověď, kterou uvidí jen on.

## Co s tím můžeš dělat

- **Odpověz kartou** Odpověz JSONem a v kanálu se objeví karta.

- **Věz, kdo se ptá** Dostaneš člena i jeho role, takže si ověříš, kdo smí co dělat.

- **Odpovídej soukromě** Ukaž odpověď jen členovi, který se ptal.

- **Bez spěchu** Do 5 sekund odpověz loaderem a pak to dokonči přes callback URL.

V aplikaci

Napiš / a objeví se příkazy komunity

#### Amsterdam

Tvoje služba odpoví, mssgs zveřejní kartu

Výběr příkazů i karta jsou přímo z aplikace. V patičce je, kdo použil který příkaz.

- [Rychlý start](#quick-start)

- [Nastavení](#settings)

- [Co dostaneš](#request)

- [Co odpovíš](#reply)

- [Pět sekund](#timing)

- [Soukromé odpovědi](#private)

- [Celý příklad](#example)

- [Limity](#limits)

## Rychlý start

- 1 Vytvoř trigger V desktopové aplikaci otevři ve své komunitě **Manage Server → Triggers** a přidej trigger: příkaz, na který reaguje, třeba /weather , a URL tvé webové služby.

### Přijmi zprávu

Když člen pošle zprávu, která začíná na /weather , mssgs ji pošle metodou POST na tvou URL:

```json
{
  "server_guid": "abc12345-...",
  "channel_guid": "def67890-...",
  "trigger_match": "/weather",
  "message": {
    "id": "d01ZZdef6-...",
    "content": "/weather Amsterdam",
    "member_guid": "member-guid",
    "user_guid": "user-guid",
    "group_guids": ["group-guid-1", "group-guid-2"],
    "cms": 1790000000000
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/...",
  "stream_url": "https://mss.gs/api/v1/instant/...?token=..."
}
```

### Odpověz JSONem

Do 5 sekund odpověz se statusem 2xx a JSONem. V kanálu se z něj stane karta.

```json
{
  "message_container": {
    "color": "blue",
    "title": "Amsterdam",
    "description": "14 °C, light rain until 16:00",
    "fields": [
      { "field": "Wind", "value": "SW 18 km/h" },
      { "field": "Humidity", "value": "82%" }
    ]
  }
}
```

#### Amsterdam

## Nastavení

Každý trigger má v **Manage Server → Triggers** tato nastavení.

| Nastavení | Co dělá |
| --- | --- |
| Trigger Name | Jméno triggeru, zobrazené vedle příkazu ve výběru. |
| Word to Match | Text, kterým musí zpráva začínat, třeba /weather . Lomítko je zvykem, ale není povinné. |
| URL Endpoint | Kam mssgs zprávu pošle. |
| Webhook Secret | Volitelný. mssgs jím podepíše každý požadavek, viz níže. |
| Active | Vypne trigger, aniž by bylo nutné ho smazat. |
| Post Matching Message | Jestli členova vlastní zpráva /weather Amsterdam zůstane v kanálu nad tvou odpovědí. |
| Show Loading Reply | Zobrazí kartu načítání, zatímco tvoje služba pracuje. |
| Allowed User Groups | Spustí ho jen členové s těmito rolemi. Pro všechny ostatní je to obyčejná zpráva. |

## Co dostaneš

Požadavek POST s tělem v JSONu. Mezi hlavičkami je User-Agent: mssgs-webhook/1.0 .

| Pole | Typ | Co to je |
| --- | --- | --- |
| server_guid | string | Komunita. |
| channel_guid | string | Kanál, do kterého byla zpráva poslána. |
| trigger_match | string | Příkaz, který se shodoval, třeba /weather . |
| message.content | string | Celá zpráva, včetně příkazu. |
| message.member_guid | string | Člen, který ji poslal, v této komunitě. |
| message.user_guid | string | Účet téže osoby, stejný v každé komunitě. |
| message.group_guids | array | Role, které člen má. |
| message.cms | number | Kdy byla zpráva poslána, v milisekundách. |
| message.is_action_button | boolean | true , když trigger spustilo tlačítko, a ne napsaný příkaz. |
| message.action_payload | object | payload tlačítka, u stisků tlačítek. |
| callback_url | string | Aktualizuj nebo smaž svou odpověď i později, po dobu 30 minut. |
| stream_url | string | Živý stream odpovědí, reakcí a stisků tlačítek u tvé odpovědi, po dobu 10 minut. |

### Kontrola, kdo smí co dělat

Porovnej message.group_guids s rolemi, kterým věříš, třeba aby /ban mohli spouštět jen moderátoři. Pokud má příkaz pro všechny ostatní úplně zmizet, nastav jeho role v nastavení triggeru.

## Co odpovíš

Jakýkoli status 2xx s tělem v JSONu, až 4 MB. Pošli aspoň jedno z message_container a actions .

| Pole | Typ | Co to je |
| --- | --- | --- |
| message_container | object | Karta. Funguje tu každé pole karet zpráv, včetně štítku stavu, odznaku, statistik diffu a sbaleného uvažování. |
| title , description , color , ... | string | Zkratka: pole karty na nejvyšší úrovni se za tebe zabalí do karty. |
| actions | array | Tlačítka pod kartou. Viz tlačítka. |
| visible_to_member_guids | array | Odpověď uvidí jen tito členové. Viz soukromé odpovědi. |

## Pět sekund

mssgs čeká na tvou odpověď 5 sekund. Pokud potřebuješ víc času, odpověz hned kartou s loaderem a dokonči to přes callback_url , která platí 30 minut.

```javascript
// Answer within 5 seconds with a loader...
res.json({ message_container: { loader: true, loader_text: 'Looking it up…' } });

// ...then finish in your own time with the callback URL.
await fetch(req.body.callback_url, {
  method: 'PUT',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ message_container: { color: 'blue', title: 'Done', description: result } })
});
```

## Soukromé odpovědi

Dej id členů do visible_to_member_guids a tvou odpověď uvidí jen oni. Použij member_guid z požadavku a odpovíš jen tomu, kdo se ptal.

```json
{
  "message_container": {
    "color": "green",
    "title": "You're on the list",
    "description": "Only you can see this reply."
  },
  "visible_to_member_guids": ["<message.member_guid from the request>"]
}
```

## Celý příklad

Příkaz /weather v Node.js s Expressem, který odpovídá kartou.

```javascript
import express from 'express';

const app = express();
app.use(express.json());

app.post('/mssgs/weather', async (req, res) => {
  const city = req.body.message.content.replace('/weather', '').trim() || 'Amsterdam';
  const w = await getWeather(city); // your own lookup

  res.json({
    message_container: {
      color: 'blue',
      title: city,
      description: `${w.temp} °C, ${w.summary}`,
      fields: [
        { field: 'Wind', value: w.wind },
        { field: 'Humidity', value: `${w.humidity}%` }
      ]
    }
  });
});

app.listen(3000);
```

## Limity

| Limit | Hodnota |
| --- | --- |
| Čas na odpověď | 5 sekund |
| Velikost odpovědi | 4 MB |
| Příkazů na člena | 5 za 5 sekund |
| Pozdější úprava odpovědi | 30 minut, přes callback_url |
| Živý stream odpovědi | 10 minut, přes stream_url |

## Tvoř dál
