Odkaz na pozvání bota na Discord je jen OAuth2 autorizační URL: jeho parametr scope určuje, jaký typ přístupu se žádá (účet bota, slash příkazy nebo obojí), a číslo permissions určuje, co ten účet bota může dělat, jakmile je na serveru. Než se cokoli použije, musí celé pozvání schválit správce serveru. Pochopení těchto dvou parametrů je rozdíl mezi bezpečným odkazem na pozvání a odkazem, jehož obsahu nerozumíte.

An OAuth permission checklist gets reviewed, Administrator is unticked, and the bot joins online. Permissions Kick Members Manage Messages Administrator Authorize YourBot Online

Anatomie odkazu na pozvání

Typické pozvání bota vypadá takto:

https://discord.com/oauth2/authorize?client_id=123456789&permissions=268446800&scope=bot%20applications.commands

  • client_id - veřejné ID aplikace, bezpečné ke sdílení, je obsažené v každém odkazu na pozvání tohoto bota.
  • scope - typ požadovaného přístupu, oddělený mezerami (v URL zakódovaný jako %20).
  • permissions - jedno číslo reprezentující všechna požadovaná oprávnění serveru, sečtená dohromady.
  • guild_id a disable_guild_select (volitelné) - předvybere konkrétní server a uzamkne výběr jen na něj; hodí se pro tlačítko „přidej mě sem“ u jednotlivého serveru.

Scope „bot“

Tohle skutečně přidá bota jako člena serveru, tedy záznam, který se v seznamu členů objeví se štítkem bota. Bez tohoto scope se nic nepřipojí; není žádný účet bota, který by se mohl autorizovat.

Scope „applications.commands“

Tenhle scope zaregistruje slash, uživatelské a zprávové příkazy aplikace, aby je šlo na daném serveru používat. Bot se technicky může připojit jen se scope bot, ale žádné jeho /příkazy se neukážou, když někdo napíše /, protože server registraci příkazů nepovolil.

Proč téměř vždy chcete obojí

Bot pozvaný jen se scope bot může stále posílat zprávy, reagovat na tlačítka u zpráv, které už poslal, a odpovídat na věci, které nevyžadují slash příkaz. Moderní uživatelé Discordu ale příkazy očekávají a bot, který je nemůže zaregistrovat, působí rozbitě, i když funguje v pořádku. Každý odkaz na pozvání, který Noxyr vygeneruje, a skoro každého legitimního bota obsahuje z tohoto důvodu oba scopy dohromady.

Číslo oprávnění, dekódovaně

Každé oprávnění Discordu, ať už posílání zpráv, správa rolí nebo vyhazování členů, je jeden bit v bitovém poli: příznak v podobě mocniny dvou. Číslo v odkazu na pozvání je součet všech příznaků požadovaných najednou. Odkaz žádající permissions 8 žádá přesně jednu věc: Administrator, tedy plný neomezený přístup k serveru. Dobře navržený odkaz místo toho sečte jen konkrétní příznaky, které kód bota skutečně používá: správu kanálů pro vytváření ticket kanálů, správu rolí pro ověřovací roli, moderační akce pro reakci na raid. Nesčítá všechno, co Discord nabízí.

Proč je Administrator varovný signál, ne požadavek

Většina legitimních botů ho nepotřebuje. Jeho vyžádání je buď vzácná skutečná potřeba něčeho, co se dotýká téměř všech oprávnění najednou, nebo, mnohem častěji, bot postavený narychlo, kde se vložilo permissions 8, protože to bylo nejsnazší číslo po ruce. Je to také nejděsivější obrazovka, kterou Discord během nastavení ukáže vlastníkovi serveru. Proto je pozvání často rovnou odmítnuto nebo bot později odebrán někým, kdo uklízí oprávnění. Číslo oprávnění libovolného odkazu můžete dekódovat v kalkulačce oprávnění Discordu ještě před kliknutím na Autorizovat, abyste přesně viděli, co se žádá.

Jak je postaven odkaz na pozvání Noxyru, jako příklad

Místo žádání o Administrator je pozvání Noxyru postaveno z konkrétních oprávnění, která jeho funkce skutečně používají: správa kanálů a rolí pro tickety a ověřování, oprávnění pro zprávy a moderaci pro reakce na anti-nuke, a nic nad rámec tohoto seznamu. Vždy obsahuje oba scopy bot a applications.commands, takže jeho příkazy fungují hned po připojení.

Další OAuth2 scopes, se kterými se můžete setkat

Discord definuje desítky OAuth2 scopes kromě bot a applications.commands. Většina z nich, jako identify nebo guilds.join, patří k webové autentizaci typu „Přihlásit se přes Discord“ a v běžném odkazu na pozvání bota se vůbec neobjeví. Pokud odkaz, který si prohlížíte, vedle bot žádá něco neznámého, stojí za to zjistit, co ten scope ve skutečnosti uděluje, než ho autorizujete. Pozvání bota, které potřebuje další scopy pro webovou autentizaci, je neobvyklé, pokud nejde o službu, která nabízí i propojení účtů.

Sestavení odkazu na pozvání pro vlastního bota

Jakmile vytvoříte aplikaci v Discord Developer Portal, URL Generator na záložce OAuth2 tento odkaz sestaví za vás zaškrtávacími políčky: zaškrtněte bot a applications.commands v scopes, zaškrtněte oprávnění, která váš bot potřebuje, a výsledek zkopírujte. Nemusíte tak skládat URL a číslo oprávnění ručně.

Časté otázky

Co dělá disable_guild_select? Uzamkne výběr serveru na jeden předvybraný server, takže odkaz na pozvání určený pro jednu konkrétní komunitu nelze omylem použít k přidání bota jinam.

Potřebuji applications.commands, když můj bot používá jen tlačítka? Ne striktně pro tlačítka u zpráv, které už poslal, ale potřebujete ho ve chvíli, kdy je zapojen jakýkoli slash příkaz.

Může změna čísla oprávnění později přidat přístup zpětně? Ne. Server, který pozvání už schválil, si zachová to, co bylo tehdy uděleno. Změna odkazu ovlivní jen budoucí pozvání; stávající instalace je potřeba znovu pozvat a znovu schválit, aby získaly víc.

Stačí scope=bot samotný? Stačí, aby se bot připojil, ale jeho slash příkazy se bez applications.commands vedle něj neobjeví.

Proč Discord u Administrator ukazuje tak velké varování? Protože žádá neomezený přístup k celému serveru, což je nejnebezpečnější oprávnění, jaké může pozvání bota požadovat.

Nastavujete pozvání pro vlastního bota? Nejdřív si přečtěte náš návod jak vytvořit aplikaci Discord a pak dokumentaci Custom Bot, pokud chcete celý kód za tím přeskočit.