Privilegované gateway intenty na Discordu jsou tři oprávnění, která musí majitel bota zapnout ve Developer Portalu, než Discord ta data pošle přes gateway: Presence, Server Members a Message Content. Existují proto, že seznamy členů a text zpráv jsou ve výchozím stavu citlivé. Pokud jeden z nich přehlédnete, bot nevyhodí hlasitou chybu. Jen tiše přestane vidět události, které potřebuje. Proto se stav „bot je online, ale nic nedělá“ tak často ukáže jako vypnutý intent.

Two privileged intents stay switched on and let data through while a third stays off and blocks it. Developer Portal Server Members Message Content Presence Bot Welcome msgs ✓ Auto-responders ✓ Live presence ✗

Co gateway intent ve skutečnosti je

Když se bot připojí k Discordu, automaticky nedostává každou událost ze všech serverů, na kterých je. Přihlašuje se k kategoriím událostí, kterým se říká intenty: události zpráv, události stavu hlasu, události aktualizace serveru a tak dál. Většinu intentů lze v kódu deklarovat bez omezení a Discord je povolí, aniž by se ptal. Tři jsou jiné. Discord je nazývá privilegované, protože data za nimi, tedy přesně kdo je na serveru a co členové píšou, jsou dost silná na to, aby majitel bota musel výslovně souhlasit přes Developer Portal, a ne jen v kódu.

Pokud kód bota žádá privilegovaný intent, ale majitel ho pro danou aplikaci nezapnul, Discord přihlášení rovnou odmítne. Bot se nepřipojí v omezeném režimu. Nepřipojí se vůbec a gateway se zavře s chybou „disallowed intents“.

Tři privilegované intenty

  • Presence Intent. Stav online/nečinný/offline a vlastní aktivity každého člena. Používají ho boti, kteří zobrazují živou přítomnost. Většina ticket, moderačních a obchodních botů ho nepotřebuje, včetně Noxyru.
  • Server Members Intent. Celý seznam členů, plus události připojení a odchodu, změny rolí a aktualizace přezdívek. Za tímto intentem stojí zprávy o uvítání, počty členů a detekce anti-raid.
  • Message Content Intent. Skutečný text zprávy, ne jen informace, že zpráva byla odeslána. Bez něj bot vidí, že někdo v kanálu něco napsal, ale nevidí, co přesně.

Kód Noxyru žádá dva ze tří: Server Members Intent a Message Content Intent. Presence Intent není součástí žádné funkce Noxyru, takže se nikdy nežádá a nikdy se nemusí zapínat.

Co se rozbije bez Server Members Intent

Server Members Intent umožňuje botovi přijímat události GUILD_MEMBER_ADD a GUILD_MEMBER_REMOVE, tedy události připojení a odchodu, na kterých stojí téměř každá funkce spojená s členstvím.

  • Zprávy o uvítání. Uvítací zpráva se spustí při připojení. Bez intentu bot událost připojení nedostane, takže se nic nepošle a automatická role se nepřidělí.
  • Počty členů. Živý kanál nebo widget s počtem členů se aktualizuje ze stejných událostí připojení a odchodu. Bez intentu zamrzne na posledním počtu, který bot viděl.
  • Anti-nuke a ochrana před raidy. Detekce hromadného připojení při raidu nebo sledování podezřelých změn rolí a přezdívek závisí na událostech členů. Vypnete-li intent, celá tato detekce přestane fungovat.
  • Ověřovací postupy. Každá brána, která kontroluje datum připojení člena, role nebo stáří účtu, potřebuje objekt člena, který intent poskytuje.

Co se rozbije bez Message Content Intent

Message Content Intent hlídá skutečný text zprávy. Bez něj bot stále vidí, že kanál dostal zprávu a kdo ji poslal. Nemůže ale přečíst, co bylo napsáno.

  • Automatické odpovědi. Hledání spouštěcího slova jako „refund“ nebo „jak zaplatím“ vyžaduje přečíst text zprávy. Bez obsahu se nic nenajde a nic se nepošle.
  • Odpovědi AI chatu. AI asistent, který odpovídá na otázky v kanálu nebo na zmínku, potřebuje samotnou otázku. Bez intentu ví, že někdo promluvil, ale nemá co poslat modelu.
  • Přepisy tiketů. Přepis, který zaznamenává, co personál a členové v tiketu skutečně napsali, potřebuje obsah zpráv. Bez něj by vznikl jen seznam časových razítek a uživatelských jmen bez obsahu.
  • Moderace založená na prefixu. Cokoli, co skenuje zprávy kvůli zakázaným slovům, pozvánkám nebo spamovým vzorům, čte obsah stejně jako automatická odpověď.

Slash příkazy jsou na tom s intentem stejně, ať je zapnutý, nebo ne. Discord vstup příkazů doručuje odděleně od běžných zpráv. Závisí na něm konkrétně funkce, které čtou to, co členové píšou do běžných zpráv.

Jak zapnout intenty v Developer Portalu

  1. Otevřete Discord Developer Portal a vyberte aplikaci bota.
  2. V levém postranním panelu klikněte na Bot.
  3. Přejděte dolů na Privileged Gateway Intents.
  4. Zapněte Server Members Intent a Message Content Intent (Presence Intent přidejte jen tehdy, pokud bot konkrétně potřebuje živá data o stavu).
  5. Uložte změny a potom bota restartujte nebo znovu připojte, aby při dalším přihlášení načetl nové intenty.

Přepínač se projeví až při dalším připojení ke gateway, ne okamžitě u bota, který je už přihlášený. Bot, který byl uprostřed relace, když se intent vypnul, Discord obvykle odpojí a po opětovném zapnutí intentu ho bude nutné znovu připojit.

Pravidlo ověřování od 100 serverů

Přepnutí přepínače v portálu stačí botovi, který je na méně než 100 serverech. Jakmile počet instalací bota přesáhne 100 serverů, Discord vyžaduje, aby aplikace prošla ověřením bota. Jde o kontrolu, při které majitel bota pošle žádost ke schválení. Teprve pak může privilegované intenty v tomto měřítku používat. Neověřený bot, který tuto hranici překročí, dál běží na serverech, kde už je. Připojit se k novým však nesmí, dokud ověření neprojde, nebo dokud nezruší privilegované intenty, které striktně nepotřebuje.

Jde o pravidlo platformy Discord, ne o něco, co by řídil jakýkoli hostitel bota. Existuje proto, aby se citlivé intenty jako Server Members a Message Content nerozdávaly ve velkém bez kontroly Discordu, co bot s daty dělá.

Proč Noxyr kontroluje oba intenty dřív, než přijme token

Funkce Custom Bot na Noxyru běží s celou sadou funkcí pod tokenem bota, který dodáte. Protože uvítání, počty členů, AI chat, přepisy tiketů i automatické odpovědi závisí na těchto dvou intentech, dashboard před přijetím tokenu kontroluje, že jsou Server Members Intent i Message Content Intent zapnuté. Token vložený s vypnutým kterýmkoli z nich se odmítne předem. Nepřijme se a později tiše nezhavaruje s matoucí chybou gateway.

Pokud se intent vypne, když už bot běží (třeba o několik měsíců později, když ho někdo v portálu odškrtne), gateway Discordu spojení zavře s kódy 4013 nebo 4014. Hostitelské nody Noxyru tento konkrétní kód zachytí, bota vypnou a zobrazí srozumitelnou stavovou zprávu, která přesně řekne, které nastavení opravit. Nenechají ho tak viset v tiché smyčce opětovného připojení. Kompletní rozbor této chyby a dalších častých příčin offline stavu najdete v našem návodu k řešení chyb gateway 4004/4014.

Časté otázky

Potřebuji Presence Intent pro Custom Bota na Noxyru? Ne. Noxyr žádá jen Server Members Intent a Message Content Intent. Presence Intent může zůstat vypnutý.

Proč bot ukazuje „disallowed intents“, i když jsem přepínače zapnul? Gateway načte aktuální stav až při novém přihlášení. Po uložení nastavení v portálu bota restartujte, aby se znovu připojil s uplatněnými intenty.

Znamená zapnutí Message Content Intent, že Discord botovi sdílí historii zpráv? Ne. Týká se jen zpráv odeslaných, zatímco je bot připojený a má přístup k danému kanálu. Zpětně neuděluje přístup ke starým zprávám, u kterých bot nebyl.

Může mi bot být zablokován za žádání privilegovaných intentů? Ne. Žádat je a používat je pro funkce, které je potřebují, tedy uvítání, automatické odpovědi a odpovědi AI, je přesně k tomu určeno. Ověřování slouží botům ve velkém měřítku, není to trest.

Kompletní postup nastavení najdete v dokumentaci Custom Bot. Nebo si přidejte Noxyr zdarma a intenty přeskočte úplně tím, že místo vlastního bota s tokenem použijete hlavního bota.