Discord

Responda comandos de barra, ou mensagens comuns de canal, no seu servidor do Discord com um agente do Pepe.

Discord

O Discord dá ao Pepe duas formas diferentes de receber uma mensagem, e uma conexão pode usar uma delas ou as duas:

Comece pelo assistente guiado (ou direto pelo dashboard):

pepe setup

O config de uma conexão guarda:

No aplicativo do Discord, aponte “Interactions Endpoint URL” para a URL dessa conexão, e crie um comando de barra com uma opção de texto (por exemplo, /ask prompt:...). Como o Discord exige uma confirmação em até três segundos, o Pepe primeiro responde com uma resposta adiada, e só publica a resposta de verdade como acompanhamento assim que o agente termina de processar. O formato da URL de retorno é:

https://YOUR_HOST/webhooks/default/discord/<slug>

Veja Webhooks para conhecer os campos que toda conexão compartilha (agent, mode, trainers, session_ttl_min, ephemeral, commands) e entender como a rota genérica funciona por trás disso.

Arquivos em um comando

Dê ao seu comando de barra uma opção de anexo e as pessoas podem mandar um arquivo junto: /ask prompt:o que ele fala? file:<áudio>. Um áudio é transcrito antes de o agente rodar, um documento chega com o texto já lido, e uma imagem chega como imagem a um modelo com visão. O anexo sozinho já basta, então /ask file:<áudio> sem nada digitado também funciona.

Esse é o único caminho que um arquivo tem pelo endpoint de Interactions: ele enxerga comandos de barra e mais nada, então um áudio ou um anexo postado direto no canal não chega ao Pepe por aí. Chega pelo outro caminho, pelo gateway: veja Mensagens comuns de canal logo abaixo. O Pepe aceita arquivos de até 20 MB por padrão (max_attachment_mb na conexão aumenta ou diminui esse limite), e vale o menor entre o limite do Pepe e o limite de upload do próprio Discord: 10 MB numa conta comum ou servidor sem boost, mais com Nitro ou um servidor com boost. Veja Mensagens de voz e Documentos.

Mensagens comuns de canal

Uma conexão também pode responder a uma mensagem digitada direto num canal, uma foto solta nele, um áudio gravado ali mesmo, ou uma DM para o bot, não só um comando de barra. Isso exige um opt-in próprio, porque significa que o Pepe mantém uma conexão persistente com o gateway do Discord, em vez de só responder chamadas de webhook:

pepe gateway discord add support --agent atendimento --gateway --bot-token '${DISCORD_BOT_TOKEN}'

ou os campos equivalentes no dashboard (uma conexão pode ter --application-id/--public-key para comandos de barra e --gateway/--bot-token para mensagens de canal ao mesmo tempo). O mix pepe serve roda a conexão dos dois jeitos. Flags:

Anexos da própria mensagem, da mensagem que ela responde (assim dá para responder “o que ele fala?” depois que o áudio já chegou), e de uma mensagem encaminhada ao bot contam todos, e passam pelo mesmo tratamento de áudio-para-transcrição, documento-para-texto, imagem-para-visão que um anexo de comando de barra. As mensagens de uma conexão são respondidas na ordem em que o Discord as entregou. Se a conexão cair, ela reconecta e retoma sozinha, sem perder nada do que foi dito no intervalo.

Trocando de modelo

Com os comandos /model e /models, qualquer pessoa consegue ver ou trocar qual modelo de IA está respondendo. No Discord, esses comandos chegam ao Pepe pelo comando que você mesmo registrou (o /ask do exemplo acima): tudo que for digitado na opção prompt: vira a mensagem que o Pepe recebe. Eles só funcionam de fato numa conexão em modo admin com commands habilitado; em modo support, são tratados como texto normal, sem efeito especial. O /models lista os modelos disponíveis para o projeto daquela conexão; já o /model mostra o modelo atual, ou troca para outro:

/model openrouter               # pergunta se a troca vale só para este chat ou para todos
/model openrouter session       # troca só nesta conversa
/model openrouter global        # troca para todo mundo com quem essa conexão fala

Qualquer pessoa numa conversa permitida pode trocar o modelo da própria conversa. Já trocar globalmente, afetando todo mundo com quem aquela conexão conversa, é privilégio reservado aos treinadores, a mesma lista de confiança que também controla a memória. Para desativar completamente a troca de modelo por quem não é treinador, defina model_switch_locked: true na conexão.