Voz
Entre em canais de voz e transmita áudio.
Bots podem entrar em canais de voz de servidor e transmitir áudio. O áudio é WebRTC ponto a ponto (cada participante conecta com os outros); o NEX só faz a sinalização pelo Gateway.
Pré-requisitos
Intent
voice.connect ligado, bot instalado no servidor, CONECTAR_VOZ no canal e FALAR para ser ouvido (sem ele, o bot entra mudo).Quem está em cada canal
GET
/api/bot/servers/:serverId/voice-members200
{
"channels": [
{ "channelId": "…", "memberIds": ["userId", "…"] }
]
}Eventos de sinalização
Enviados pelo bot no mesmo socket do Gateway.
| Evento (bot → NEX) | Dados | Observações |
|---|---|---|
channel_voice:join | { channelId } | Exige callback de ack. Uma sessão por servidor (pode estar em vários servidores). |
channel_voice:signal | { channelId, toId, signal } | Oferta/resposta/ICE para outro participante. Até 64 KB. |
channel_voice:leave | { channelId } | Sai do canal. |
Entrar
socket.emit('channel_voice:join', { channelId }, (res) => {
if (!res.ok) return console.error(res.error);
// { ok, participants, serverId, channelId, generation, canSpeak, botUserId }
console.log('na call com', res.participants.length, 'pessoas; pode falar:', res.canSpeak);
});| Evento (NEX → bot) | Quando |
|---|---|
channel_voice:participants_update | Alguém entrou ou saiu: { serverId, channelId, participants } |
channel_voice:signal | Sinal WebRTC de outro participante: { channelId, fromId, signal } |
voice:permission_changed | Mudou a permissão de falar: { serverId, channelId, canSpeak, canConnect } |
voice:session_ended | Sessão encerrada pelo NEX: reason = suspended ou unauthorized |
Se o socket cair, a vaga no canal fica reservada por 45 s para o bot reconectar.
Cliente de voz
Implementar WebRTC no servidor é trabalhoso — use o @nex/voice-client, que faz a sinalização e transmite áudio (via werift + ffmpeg). O bot de exemplo do NEX usa ele para tocar música com /play.