rm voice
This commit is contained in:
parent
361baa39eb
commit
921d7323a3
1 changed files with 0 additions and 112 deletions
|
@ -1,112 +0,0 @@
|
|||
import { Guild } from '../structures/guild.ts'
|
||||
import {
|
||||
VoiceChannel,
|
||||
VoiceServerData
|
||||
} from '../structures/guildVoiceChannel.ts'
|
||||
import { VoiceOpcodes } from '../types/voice.ts'
|
||||
import { Collection } from '../utils/collection.ts'
|
||||
import { HarmonyEventEmitter } from '../utils/events.ts'
|
||||
import { Client } from './client.ts'
|
||||
|
||||
export interface VoiceOptions {
|
||||
channel: VoiceChannel
|
||||
data: VoiceServerData
|
||||
manager: VoiceConnectionsManager
|
||||
}
|
||||
|
||||
export class VoiceConnectionsManager {
|
||||
client: Client
|
||||
connections: Collection<string, VoiceConnection> = new Collection()
|
||||
|
||||
constructor(client: Client) {
|
||||
this.client = client
|
||||
}
|
||||
|
||||
async establish(options: VoiceOptions): Promise<VoiceConnection> {
|
||||
if (this.connections.has(options.channel.guild.id) === true)
|
||||
throw new Error('Voice Connection already established')
|
||||
const conn = new VoiceConnection(this, options)
|
||||
this.connections.set(options.channel.guild.id, conn)
|
||||
await conn.connect()
|
||||
return conn
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
|
||||
export type VoiceConnectionEvents = {
|
||||
ready: []
|
||||
}
|
||||
|
||||
/** Represents a Voice Connection made through a Voice Channel */
|
||||
export class VoiceConnection extends HarmonyEventEmitter<VoiceConnectionEvents> {
|
||||
client: Client
|
||||
ws?: WebSocket
|
||||
guild: Guild
|
||||
channel: VoiceChannel
|
||||
data: VoiceServerData
|
||||
manager: VoiceConnectionsManager
|
||||
ssrc?: number
|
||||
ip?: string
|
||||
port?: number
|
||||
|
||||
constructor(manager: VoiceConnectionsManager, options: VoiceOptions) {
|
||||
super()
|
||||
this.client = manager.client
|
||||
this.manager = manager
|
||||
this.channel = options.channel
|
||||
this.guild = options.channel.guild
|
||||
this.data = options.data
|
||||
}
|
||||
|
||||
/** Connect to Voice Server */
|
||||
async connect(): Promise<VoiceConnection> {
|
||||
this.ws = new WebSocket(`wss://${this.data.endpoint}`)
|
||||
this.ws.binaryType = 'arraybuffer'
|
||||
this.ws.onopen = this.onopen.bind(this)
|
||||
this.ws.onclose = this.onclose.bind(this)
|
||||
this.ws.onmessage = this.onmessage.bind(this)
|
||||
this.ws.onerror = this.onerror.bind(this)
|
||||
return this
|
||||
}
|
||||
|
||||
private send(data: { op: VoiceOpcodes; d: any }): void {
|
||||
this.ws?.send(JSON.stringify(data))
|
||||
}
|
||||
|
||||
private sendIdentify(): void {
|
||||
this.send({
|
||||
op: VoiceOpcodes.IDENTIFY,
|
||||
d: {
|
||||
server_id: this.guild.id,
|
||||
user_id: this.client.user?.id,
|
||||
session_id: this.data.sessionID,
|
||||
token: this.data.token
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private onopen(): void {
|
||||
this.sendIdentify()
|
||||
}
|
||||
|
||||
private onclose(): void {}
|
||||
|
||||
private onmessage(e: MessageEvent): void {
|
||||
const data = JSON.parse(e.data)
|
||||
if (typeof data !== 'object') return
|
||||
|
||||
switch (data.op) {
|
||||
case VoiceOpcodes.READY:
|
||||
this.ssrc = data.d.ssrc
|
||||
this.ip = data.d.ip
|
||||
this.port = data.d.port
|
||||
this.emit('ready')
|
||||
break
|
||||
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
private onerror(): void {}
|
||||
}
|
Loading…
Reference in a new issue