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-members
Auth: Bot
200
{
  "channels": [
    { "channelId": "…", "memberIds": ["userId", "…"] }
  ]
}

Eventos de sinalização

Enviados pelo bot no mesmo socket do Gateway.

Evento (bot → NEX)DadosObservaçõ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_updateAlguém entrou ou saiu: { serverId, channelId, participants }
channel_voice:signalSinal WebRTC de outro participante: { channelId, fromId, signal }
voice:permission_changedMudou a permissão de falar: { serverId, channelId, canSpeak, canConnect }
voice:session_endedSessã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.