Pular para o conteúdo principal

Aplicações e bots

Uma aplicação é a identidade do seu bot no Concord. Criar uma cria junto um usuário marcado como bot, e o id da aplicação é o id desse usuário — como no Discord, onde application_id == bot user id.

A consequência prática é que não existe um segundo sistema de permissão nem um segundo protocolo: o bot entra num servidor, recebe cargo, fala no chat e entra na voz pelos mesmos caminhos que o aplicativo usa.

1. Criar a aplicação​

No portal: app.concord.win/developers.

Ao criar, o token do bot aparece uma vez. Ele não é guardado em lugar nenhum em texto — o servidor só tem o hash. Se perder, gere outro; o antigo morre na hora e derruba quem estiver conectado com ele.

Pelo HTTP, a mesma coisa (precisa do cookie de sessão de quem está criando):

POST /api/applications
Content-Type: application/json

{"name": "Tocadiscos"}
{"id": "47", "name": "Tocadiscos", "token": "NDc.xxxxxxxx…"}
RotaO que faz
GET /api/applicationssuas aplicações
GET /api/applications/{id}uma, com bot, redirects e public
PATCH /api/applications/{id}muda name, description, public, redirects
POST /api/applications/{id}/tokengera outro token do bot (derruba o anterior)
POST /api/applications/{id}/secretgera outro client secret (só para OAuth2)
DELETE /api/applications/{id}apaga: o bot sai de todos os servidores

O client secret só serve para trocar código OAuth2 por token, do lado do servidor do seu bot. Para apenas instalar o bot, você não precisa dele.

https://app.concord.win/oauth2/authorize?client_id=<id>&scope=bot&permissions=<bits>

permissions é a soma dos bits que o bot pede. Quem abrir o link vê a lista, escolhe o servidor e autoriza. Duas regras valem sempre, do lado do servidor:

  • ninguém dá o que não tem: o que é concedido é pedido & permissões_de_quem_autoriza;
  • Administrador só o dono entrega.

Então pedir tudo não adianta nada: pedir demais só faz a tela de autorização parecer assustadora.

BitPermissãoBitPermissão
1 << 0Administrador1 << 12Reagir a mensagens
1 << 1Gerenciar o servidor1 << 13Entrar na voz
1 << 2Gerenciar canais1 << 14Falar na voz
1 << 3Gerenciar cargos1 << 15Câmera e tela
1 << 4Expulsar membros1 << 16Silenciar membros
1 << 5Banir membros1 << 17Ver o registro de auditoria
1 << 6Gerenciar mensagens1 << 18Criar salas temporárias
1 << 7Criar convites1 << 19Ver canais
1 << 8Mencionar @todos1 << 20Gerenciar eventos
1 << 9Enviar mensagens1 << 21Moderar membros
1 << 10Anexar arquivos1 << 22Gerenciar aplicações
1 << 11Criar tópicos

Para um bot de chat comum, o conjunto honesto é Ver canais | Enviar mensagens | Reagir = 524288 | 512 | 4096 = 528896. Um bot de música acrescenta Entrar na voz | Falar = 553472.

Público ou privado​

Uma aplicação nasce privada: só você consegue instalá-la. Ligue "Qualquer um pode instalar" no portal quando quiser que outras pessoas usem o link.

3. Conectar​

O bot se identifica com o cabeçalho Authorization: Bot <token> — tanto nas rotas /api/* quanto na primeira mensagem do WebSocket. Veja Gateway.

const r = await fetch('https://app.concord.win/api/servers', {
headers: { Authorization: `Bot ${process.env.CONCORD_TOKEN}` },
});

4. Anunciar os comandos​

Quando alguém digita / no começo de uma mensagem, o Concord mostra os comandos das aplicações instaladas naquele servidor — nome, opções e descrição, agrupados por aplicação. Para o seu bot aparecer ali, anuncie a lista com o token do bot. Ela é global da aplicação, não por servidor: um PUT substitui a lista inteira.

PUT /api/applications/@me/commands
Authorization: Bot <token>
Content-Type: application/json

{
"commands": [
{
"name": "toca",
"description": "Toca uma música ou adiciona à fila",
"options": [
{ "name": "fonte", "description": "link ou busca", "required": true, "type": "string" }
]
},
{ "name": "pausa", "description": "Pausa o áudio" }
]
}

Limites: até 50 comandos; name com [a-z0-9-], de 1 a 32 caracteres; description de 1 a 160; até 10 opções por comando (required e type são opcionais). GET na mesma rota devolve o que está gravado.

O seletor só mostra: a mensagem continua chegando ao bot como texto (/toca nasa) pelo gateway, e é o bot quem a interpreta. Com o nescord, o anúncio acontece sozinho ao subir, a partir dos @Command() registrados.

O que o bot vira dentro do servidor​

Quando alguém autoriza o convite, acontecem três coisas de uma vez:

  1. o bot entra como membro — aparece na lista com a etiqueta BOT;
  2. nasce um cargo gerenciado com o nome da aplicação e exatamente as permissões concedidas;
  3. esse cargo é dado ao bot.

O cargo gerenciado não pode ser editado nem apagado pela tela de cargos: ele pertence à aplicação. Para mexer no que o bot pode fazer, mude o cargo pelas rotas de cargo normais, ou remova e instale de novo com outras permissões.

Quem administra o servidor vê tudo isso em Configurações do servidor → Apps → Integrações, com as permissões concedidas, as negadas e o botão de remover.

Tirar o bot​

DELETE /api/servers/{servidor}/integrations/{aplicacao}

Precisa de Gerenciar aplicações ou Administrador naquele servidor. O bot sai e o cargo gerenciado vai junto.

Limites que valem conhecer​

  • O token é do formato <id em base64url>.<segredo>. O prefixo não é segredo; o resto é.
  • Trocar o token derruba a conexão atual do bot, não só a próxima.
  • Apagar a aplicação remove o bot de todos os servidores e invalida o token e o segredo.