Discord

Como responder a comandos de barra, ou a mensagens normais de canal, no teu servidor de Discord através de um agente do Pepe.

Discord

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

Começa pelo assistente guiado (ou pelo painel):

pepe setup

O config de uma ligação guarda:

Na aplicação do Discord, aponta “Interactions Endpoint URL” para o URL da ligação, e acrescenta um comando de barra com uma opção de texto, por exemplo /ask prompt:.... O Discord exige uma confirmação dentro de três segundos, por isso o Pepe responde primeiro com uma resposta diferida, e só publica a resposta real como seguimento assim que o agente terminar. O formato do URL de retorno é:

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

Os campos partilhados por qualquer ligação (agent, mode, trainers, session_ttl_min, ephemeral, commands) e o funcionamento interno da rota genérica estão descritos em Webhooks.

Ficheiros num comando

Dá ao teu comando de barra uma opção de anexo e as pessoas podem enviar um ficheiro com ele: /ask prompt:o que é que ele diz? file:<clip>. Um clip de voz é transcrito antes de o agente correr, um documento chega com o texto já lido, e uma imagem chega como imagem a um modelo com visão. O anexo basta por si, pelo que /ask file:<clip> sem nada escrito também funciona.

É o único caminho que um ficheiro tem pelo endpoint de Interactions: vê comandos de barra e mais nada, por isso uma mensagem de voz ou um anexo publicado directamente no canal não chega ao Pepe por aí. Chega pelo outro caminho, pelo gateway: ver Mensagens normais de canal a seguir. O Pepe aceita ficheiros até 20 MB por omissão (max_attachment_mb na ligação aumenta ou diminui este limite), e vale o menor entre o limite do Pepe e o limite de envio do próprio Discord: 10 MB numa conta comum ou servidor sem boost, mais com Nitro ou um servidor com boost. Ver Mensagens de voz e Documentos.

Mensagens normais de canal

Uma ligação também pode responder a uma mensagem escrita directamente num canal, a uma foto largada nele, a uma mensagem de voz gravada ali mesmo, ou a uma DM para o bot, não só a um comando de barra. Isto exige um opt-in próprio, porque significa que o Pepe mantém uma ligação persistente ao gateway do Discord, em vez de responder apenas a chamadas de webhook:

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

ou os campos equivalentes no painel (uma ligaçã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 corre a ligação de ambas as formas. Flags:

Anexos da própria mensagem, da mensagem a que ela responde (para se poder responder “o que é que ele diz?” depois de a mensagem de voz já ter chegado), e de uma mensagem reencaminhada para o bot contam todos, e passam pelo mesmo tratamento de voz-para-transcrição, documento-para-texto, imagem-para-visão que um anexo de comando de barra. As mensagens de uma ligação são respondidas pela ordem em que o Discord as entregou. Se a ligação cair, volta a ligar-se e retoma sozinha, sem perder nada do que foi dito no intervalo.

Trocar de modelo

Os comandos /model e /models deixam qualquer pessoa ver ou mudar o modelo de IA que lhe responde. No Discord chegam ao Pepe através do comando que já tens registado (o /ask acima): tudo o que escreveres na opção prompt: é a mensagem que o Pepe recebe. Só funcionam numa ligação em modo admin com commands ativado; em modo support passam a ser tratados como texto normal. O /models lista os modelos disponíveis para o projeto dessa ligação, e o /model mostra qual está ativo ou muda para outro:

/model openrouter               # pergunta se a troca é só deste chat ou de todos
/model openrouter session       # troca só nesta conversa
/model openrouter global        # troca para todas as conversas desta ligação

Qualquer pessoa numa conversa permitida pode trocar o modelo da sua própria conversa. Trocá-lo globalmente, afetando todas as conversas dessa ligação, fica reservado aos formadores, a mesma lista de confiança que já controla a memória. Define model_switch_locked: true na ligação para desligar por completo essa troca de modelo a quem não for formador.