Ao adicionar um bot ao seu servidor Discord, você pode notar que ele faz coisas que suas permissões de cargo parecem proibir, ou não faz coisas que parecem permitir. Essa substituição seletiva ocorre porque o Discord usa uma hierarquia de permissões específica onde configurações do bot têm precedência sobre as baseadas em cargo em certos casos. A causa raiz está em como o Discord lida com herança de permissões, os escopos OAuth2 do bot e a interação entre permissões de cargo e permissões do bot definidas durante o processo de convite. Este artigo explica o mecanismo exato por trás dessa substituição seletiva e como controlá-la.
Principais conclusões: Substituição de permissões de bot do Discord explicada
- Escopos OAuth2 vs permissões de cargo: As permissões do bot definidas durante o convite podem ignorar restrições baseadas em cargo para ações específicas, como ler histórico de mensagens ou gerenciar webhooks.
- Hierarquia de permissões: O cargo @everyone, o cargo do bot e as substituições específicas de canal criam uma ordem de prioridade que determina qual permissão se aplica.
- Configurações do servidor > Cargos > Gerenciar permissões: Ajuste as permissões do cargo do bot para substituir restrições herdadas em canais específicos.
Como a hierarquia de permissões do Discord funciona para bots
O Discord usa um sistema de permissões de três níveis para bots: escopos OAuth2, permissões de cargo e substituições específicas de canal. Cada nível pode substituir o anterior dependendo da permissão específica e do contexto.
Ao convidar um bot, você seleciona um conjunto de escopos OAuth2 que concedem ao bot habilidades amplas, como ler mensagens, enviar mensagens ou gerenciar canais. Esses escopos atuam como uma linha de base. O bot recebe então um cargo no servidor, que pode conceder ou negar permissões específicas. No entanto, os escopos OAuth2 podem substituir negações baseadas em cargo para certas ações, criando a substituição seletiva que você observa.
Por exemplo, se você convidar um bot com o escopo “Gerenciar Webhooks”, mas atribuir a ele um cargo que nega “Gerenciar Webhooks”, o bot ainda pode criar e gerenciar webhooks porque o escopo OAuth2 tem prioridade. Isso não é um bug; é proposital para permitir que bots funcionem mesmo quando as configurações de cargo do servidor são restritivas.
Ordem de cálculo de permissões
O Discord calcula as permissões efetivas começando com o cargo @everyone, depois adiciona permissões de todos os cargos atribuídos e, por fim, aplica substituições específicas de canal. Para bots, os escopos OAuth2 são avaliados separadamente e podem substituir o resultado final para ações cobertas por esses escopos.
Cenários que causam substituição seletiva
A substituição seletiva ocorre em três cenários principais:
- Escopo OAuth2 vs negação de cargo: O escopo de convite do bot concede uma permissão que o cargo nega. O escopo vence para ações como ler histórico de mensagens, gerenciar cargos ou expulsar membros.
- Substituições específicas de canal: Uma substituição de canal nega uma permissão ao cargo do bot, mas o escopo OAuth2 do bot a concede. O escopo vence para ações como enviar mensagens em um canal somente leitura.
- Lacunas de herança de permissões: O cargo do bot não tem uma permissão, mas o escopo OAuth2 do bot a inclui. O escopo preenche a lacuna, permitindo que o bot execute a ação.
Passos para diagnosticar e controlar permissões de bot
- Verifique os escopos OAuth2 do bot
Acesse o Discord Developer Portal, selecione seu aplicativo bot e clique em OAuth2 > URL Generator. Revise os escopos listados em “SCOPES”. Cada escopo concede um conjunto específico de permissões que não podem ser revogadas pelas configurações de cargo. - Identifique o cargo do bot no servidor
No seu servidor, vá em Configurações do servidor > Cargos. Encontre o cargo atribuído ao bot. Clique no cargo e revise as permissões nas seções “Permissões gerais” e “Permissões de texto”. - Compare permissões de escopo com permissões de cargo
Cruze os escopos OAuth2 com as permissões de cargo. Qualquer permissão concedida por um escopo substituirá uma negação de cargo para essa mesma ação. Por exemplo, se o escopo incluir “Ler histórico de mensagens” e o cargo negar, o bot ainda pode ler o histórico. - Ajuste as permissões de cargo para corresponder ao comportamento desejado
Se você quiser que o bot obedeça às restrições de cargo, remova os escopos OAuth2 conflitantes reconvidando o bot com uma nova URL que inclua apenas os escopos necessários. Alternativamente, conceda a permissão no cargo do bot para evitar conflito. - Use substituições específicas de canal para controle fino
Para restringir um bot em um canal específico, vá até o canal, clique em Editar canal > Permissões, adicione o cargo do bot e defina a permissão desejada como NEGAR. Isso só funciona se o escopo OAuth2 não cobrir a ação. Para ações cobertas pelo escopo, a substituição é ignorada.
Equívocos comuns sobre permissões de bot
“O cargo do bot tem Administrador, então ele pode fazer tudo”
Verdadeiro. A permissão de Administrador substitui todas as restrições baseadas em cargo e canal. No entanto, os escopos OAuth2 ainda são avaliados, mas se tornam redundantes porque Administrador já concede acesso total.
“Negar uma permissão no cargo do bot bloqueia a ação completamente”
Falso. Se o escopo OAuth2 do bot conceder essa permissão, a negação do cargo é ignorada. Esta é a causa mais comum de substituição seletiva.
“Substituições de canal sempre funcionam para bots”
Falso. Substituições de canal só se aplicam a permissões não cobertas por escopos OAuth2. Por exemplo, se o bot tem o escopo “Enviar mensagens”, uma substituição de canal que nega “Enviar mensagens” não tem efeito.
Comparação das fontes de permissão e sua prioridade
| Fonte de permissão | Nível de prioridade | Pode ser substituída por |
|---|---|---|
| Escopo OAuth2 | Mais alto | Não pode ser substituído por configurações de cargo ou canal |
| Permissão de cargo (conceder) | Médio | Escopo OAuth2 (se o escopo conceder a mesma permissão) |
| Permissão de cargo (negar) | Baixo | Escopo OAuth2 (se o escopo conceder a mesma permissão) |
| Substituição específica de canal (conceder) | Alto para permissões não cobertas por escopo | Escopo OAuth2 (se o escopo cobrir a ação) |
| Substituição específica de canal (negar) | Alto para permissões não cobertas por escopo | Escopo OAuth2 (se o escopo cobrir a ação) |
As permissões de bot do Discord substituem as permissões de cargo seletivamente porque os escopos OAuth2 têm prioridade sobre as configurações de cargo e canal para ações específicas. Para controlar esse comportamento, você deve gerenciar tanto os escopos de convite do bot quanto suas permissões de cargo em conjunto. Comece auditando os escopos OAuth2 do bot no Developer Portal e, em seguida, ajuste o cargo do bot no seu servidor para corresponder às restrições desejadas. Para controle avançado, use substituições específicas de canal apenas para permissões não cobertas por escopos OAuth2.