detritus

Socketclass

A connection to a voice server's gateway, created by Gateway.Socket.voiceConnect().

On this page
import { Media } from 'detritus-client-socket';

Media.Socket;
EventEmitterEventSpewerSocket
42 properties40 methodssrc/media.ts:51

Constructor

Properties

_heartbeat
{ ack: boolean; interval: Interval; intervalTime: number | null; lastAck: number | null; lastSent: number | null; nonce: number | null }
bucket
Bucket
channelId
string
connectedUserIds
Set<string>
dave
DaveSession | null
Default null
endpoint
string | null
Default null
forceMode
Default null
gateway
identified
boolean
Default false
ipDiscoveryFailures
number
Default 0
killed
boolean
Default false
newServerTimeout
Timeout
promises
Set<{ reject: Function; resolve: Function }>
protocol
Default null
ready
boolean
Default false
receiveEnabled
boolean
Default false
reconnects
number
Default 0
requestedNewServer
boolean
Default false
rtxSSRCs
Map<number, number>
selfDeaf
boolean
Default false
selfMute
boolean
Default false
selfVideo
boolean
Default false
sequence
number
Default -1
serverId
string
socket
BaseSocket | null
Default null
ssrcs
{ audio: Map<number, string>; video: Map<number, string> }
state
readonly
Default SocketStates.CLOSED
streams
Stream[]
Default []
token
string | null
Default null
transport
Socket | null
Default null
userId
string
videoEnabled
boolean

Accessors

audioSSRC
number
get
closed
boolean
get
closing
boolean
get
connected
boolean
get
connecting
boolean
get
guildId
string | null
get
inDm
boolean
get
rtxSSRC
number
get
sessionId
string | null
get
videoSSRC
number
get
voicePrivacyCode
string | null
get

Methods

disconnect()

src/media.ts:388
disconnect(code?: number, reason?: string): void
code?
number
Default SocketCloseCodes.NORMAL
reason?
string

heartbeat()

src/media.ts:927
heartbeat(fromInterval?: boolean): void
fromInterval?
boolean
Default false

kill()

src/media.ts:732
kill(error?: any, options?: { voiceStateUpdate?: boolean }): void
error?
any
options?
{ voiceStateUpdate?: boolean }
options.voiceStateUpdate?
boolean

on()

src/media.ts:1153
on(event: string | symbol, listener: (...args: any[]) => void): this

Adds the listener function to the end of the listeners array for the event named eventName. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times.

server.on('connection', (stream) => {
  console.log('someone connected!');
});

Returns a reference to the EventEmitter, so that calls can be chained.

By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the event listener to the beginning of the listeners array.

import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => console.log('a'));
myEE.prependListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
//   b
//   a

Since v0.1.101

event
string | symbol
listener
(...args: any[]) => void

The callback function

on(event: "close", listener: (payload: { code: number; reason: string }) => any): this
on(event: "killed", listener: (payload: { error?: Error }) => any): this
on(event: "open", listener: (target: BaseSocket) => any): this
on(event: "packet", listener: (packet: Packet) => any): this
on(event: "ready", listener: () => any): this
on(event: "socket", listener: (socket: BaseSocket) => any): this
on(event: "state", listener: (__namedParameters: { state: SocketStates }) => any): this
on(event: "transport", listener: (transport: Socket) => any): this
on(event: "transportReady", listener: (transport: Socket) => any): this
on(event: "warn", listener: (error: Error) => any): this
Overrides EventSpewer.on

onClose()

src/media.ts:758
onClose(target: BaseSocket, event: { code: number; reason: string }): void
target
BaseSocket
event
{ code: number; reason: string }
event.code
number
event.reason
string

onMessage()

src/media.ts:837
onMessage(target: BaseSocket, event: { data: any; type: string }): void
target
BaseSocket
event
{ data: any; type: string }
event.data
any
event.type
string

requestNewServer()

src/media.ts:718
requestNewServer(): void

The voice server stopped answering, asks discord for another one by sending our voice state again (same channel, nothing about it changes). The VOICE_SERVER_UPDATE it answers with connects us there through setEndpoint() and setToken(), the transport comes back with a TRANSPORT_READY. Once per server, if the new one fails too we die

rtxToSSRC()

src/media.ts:306
rtxToSSRC(rtxSSRC: number): number | null

The video ssrc a retransmission (rtx) ssrc resends packets for

send()

src/media.ts:874
send(op: number, d: any, callback?: Function, direct?: boolean): void
op
number
d
any
callback?
Function
direct?
boolean
Default false

sendBinary()

src/media.ts:910
sendBinary(op: number, payload: Buffer, callback?: Function): void

sendClientConnect()

src/media.ts:1038
sendClientConnect(options?: { videoActive?: boolean }, callback?: Function): void
options?
{ videoActive?: boolean }
options.videoActive?
boolean
callback?
Function

sendDaveTransitionReady()

src/media.ts:923
sendDaveTransitionReady(transitionId: number, callback?: Function): void

sendMediaSinkWants()

src/media.ts:1061
sendMediaSinkWants(wants: MediaSinkWants, callback?: Function): void

sendSelectProtocol()

src/media.ts:1078
sendSelectProtocol(
  options: { codecs?: any[]; data: { address: string; mode: string; port: number }; experiments?: any[]; protocol?: string; rtcConnectionId?: string },
  callback?: Function,
): void
options
{ codecs?: any[]; data: { address: string; mode: string; port: number }; experiments?: any[]; protocol?: string; rtcConnectionId?: string }
options.codecs?
any[]
options.data
{ address: string; mode: string; port: number }
options.experiments?
any[]
options.protocol?
string
options.rtcConnectionId?
string
callback?
Function

sendSessionUpdate()

src/media.ts:1071
sendSessionUpdate(options: { codecs: any[] }, callback?: Function): void

Gives the voice server a new list of codecs mid call, it answers with a SESSION_UPDATE if that changes what we send

options
{ codecs: any[] }
options.codecs
any[]
callback?
Function

sendSpeaking()

src/media.ts:1105
sendSpeaking(
  options: { delay?: number; priority?: boolean; soundshare?: boolean; ssrc?: number; voice?: boolean },
  callback?: Function,
): void
options
{ delay?: number; priority?: boolean; soundshare?: boolean; ssrc?: number; voice?: boolean }
options.delay?
number
options.priority?
boolean
options.soundshare?
boolean
options.ssrc?
number
options.voice?
boolean
callback?
Function

sendStateUpdate()

src/media.ts:1137
sendStateUpdate(
  options?: { selfDeaf?: boolean; selfMute?: boolean; selfVideo?: boolean },
  callback?: Function,
): void
options?
{ selfDeaf?: boolean; selfMute?: boolean; selfVideo?: boolean }
options.selfDeaf?
boolean
options.selfMute?
boolean
options.selfVideo?
boolean
callback?
Function