Discord.js gateway connection when connecting to voice will close 4002 decode error due to not sending self_video field. temp solution: remove it from server.

this commit will probably be reverted later; I'm just trying to see if a proper ( not self signed ) SSL cert on slowcord.maddy.k.vu will fix this SSL error I'm receiving.
This commit is contained in:
Madeline 2022-02-17 18:54:16 +11:00
parent 204fe2aed1
commit d491bcd8be
7 changed files with 1027 additions and 221 deletions

1172
bundle/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -64,6 +64,7 @@
"@fosscord/gateway": "file:../gateway",
"@sentry/node": "^6.16.1",
"@sentry/tracing": "^6.16.1",
"@yukikaze-bot/erlpack": "^1.0.1",
"ajv": "8.6.2",
"ajv-formats": "^2.1.1",
"amqplib": "^0.8.0",

View File

@ -3,7 +3,7 @@ export const VoiceStateUpdateSchema = {
$channel_id: String,
self_mute: Boolean,
self_deaf: Boolean,
self_video: Boolean,
$self_video: Boolean, //required in docs but bots don't always send it
};
export interface VoiceStateUpdateSchema {
@ -11,5 +11,5 @@ export interface VoiceStateUpdateSchema {
channel_id?: string;
self_mute: boolean;
self_deaf: boolean;
self_video: boolean;
self_video?: boolean;
}

View File

@ -17,7 +17,9 @@
],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"internalConsoleOptions": "openOnSessionStart"
"internalConsoleOptions": "openOnSessionStart",
"sourceMaps": true,
"resolveSourceMapLocations": null,
}
]
}

View File

@ -1,7 +1,7 @@
import { Server as WebSocketServer } from "ws";
import { WebSocket, Payload, CLOSECODES } from "@fosscord/gateway";
import { WebSocket, CLOSECODES } from "@fosscord/gateway";
import { Config, initDatabase } from "@fosscord/util";
import OPCodeHandlers from "./opcodes";
import OPCodeHandlers, { Payload } from "./opcodes";
import { setHeartbeat } from "./util";
import * as mediasoup from "mediasoup";
import { types as MediasoupTypes } from "mediasoup";
@ -26,8 +26,16 @@ export class Server {
socket.on("message", async (message: string) => {
const payload: Payload = JSON.parse(message);
console.log(payload);
if (OPCodeHandlers[payload.op])
await OPCodeHandlers[payload.op].call(this, socket, payload);
try {
await OPCodeHandlers[payload.op].call(this, socket, payload);
}
catch (e) {
console.error(e);
socket.close(CLOSECODES.Unknown_error);
}
else {
console.error(`Unimplemented`, payload);
socket.close(CLOSECODES.Unknown_opcode);

View File

@ -1,9 +1,38 @@
import { WebSocket } from "@fosscord/gateway";
import { WebSocket, CLOSECODES } from "@fosscord/gateway";
import { Payload } from "./index";
import { VoiceOPCodes } from "@fosscord/util";
import { VoiceOPCodes, Session, User, Guild } from "@fosscord/util";
import { Server } from "../Server";
export async function onIdentify(this: Server, socket: WebSocket, data: Payload) {
export interface IdentifyPayload extends Payload {
d: {
server_id: string, //guild id
session_id: string, //gateway session
streams: Array<{
type: string,
rid: string, //number
quality: number,
}>,
token: string, //voice_states token
user_id: string,
video: boolean,
};
}
export async function onIdentify(this: Server, socket: WebSocket, data: IdentifyPayload) {
const session = await Session.findOneOrFail(
{ session_id: data.d.session_id, },
{
where: { user_id: data.d.user_id },
relations: ["user"]
}
);
const user = session.user;
const guild = await Guild.findOneOrFail({ id: data.d.server_id });
if (!guild.members.find(x => x.id === user.id))
return socket.close(CLOSECODES.Invalid_intent);
var transport = await this.mediasoupRouters[0].createWebRtcTransport({
listenIps: [{ ip: "0.0.0.0", announcedIp: "127.0.0.1" }],
enableUdp: true,
@ -40,15 +69,17 @@ export async function onIdentify(this: Server, socket: WebSocket, data: Payload)
socket.send(JSON.stringify({
op: VoiceOPCodes.READY,
d: {
streams: [],
streams: [...data.d.streams.map(x => ({ ...x, rtx_ssrc: 1311886, ssrc: 1311885, active: false, }))],
ssrc: 1,
ip: transport.iceCandidates[0].ip,
port: transport.iceCandidates[0].port,
modes: [
"aead_aes256_gcm_rtpsize",
// "xsalsa20_poly1305",
// "xsalsa20_poly1305_suffix",
// "xsalsa20_poly1305_lite",
"aead_aes256_gcm",
"xsalsa20_poly1305_lite_rtpsize",
"xsalsa20_poly1305_lite",
"xsalsa20_poly1305_suffix",
"xsalsa20_poly1305"
],
heartbeat_interval: 1,
experiments: [],

View File

@ -3,9 +3,9 @@ import { VoiceOPCodes } from "@fosscord/util";
export interface Payload {
op: number;
d?: any;
s?: number;
t?: string;
d: any;
s: number;
t: string;
}
import { onIdentify } from "./Identify";