(NOTA: esta primera sección solo brinda un poco de contexto, no demasiado relevante para la recepción del mensaje, pero nuevamente, establece un contexto que podría ayudar)
Entonces, sé que necesito usar un WebSocket para conectarme de alguna manera. Después de un poco de ingeniería inversa, noté que necesito iniciar una conexión WebSocket con wss://gateway.discord.gg .
Ahora, hice una función de inicio de sesión de bot de mierda (aunque no estoy completamente seguro de cómo funcionan los WebSockets) y se ve así:
function login_bot() { let gateway_url = "https://discordapp.com/api/v9/gateway/bot"; let tok = prompt('bot token: '); let request = new XMLHttpRequest(); request.withCredentials = true; request.open("GET", gateway_url); request.setRequestHeader("authorization", tok); request.setRequestHeader("accept", "/"); request.setRequestHeader("authority", "discordapp.com"); request.setRequestHeader("content-type", "application/json"); let socket = new WebSocket("wss://gateway.discord.gg"); socket.onopen = function(e) { alert("[open] Connection established"); alert("Sending to server"); socket.send("I stole this request code xd"); }; } Con esto no tengo nada; ninguna respuesta 403 no permitida, ninguna respuesta 404 no encontrada, etc. (¿lo que probablemente no tenga sentido en este contexto? Nuevamente, no tengo ni idea cuando se trata de websockets).
Después de esto, alguien en el servidor Discord-API me informó que si la conexión proviene de la web, no puede iniciar sesión (la api niega la conexión websocket). Entonces, ¿qué pasa si no quiero iniciar sesión?
No puedo descifrar cómo simplemente registrar mensajes mientras ya estoy conectado al dominio de discordia.
Probé la ingeniería inversa del envoltorio discord.py, aunque eso es solo más WebSockets.
Entonces, hasta ahora sé que yo:
Entonces, ¿alguien sabe cómo obtendría el contenido del mensaje con una conexión websocket (la que te da discord.com/login) ya establecida en el servidor de discordia?
Una vez más, disculpas si esta pregunta no está permitida aquí.
Gracias, 1305.
Prueba esto. Reemplaza YOUR_TOKEN con tu token de Discord.
var ws = new WebSocket("wss://gateway.discord.gg/?v=6&encoding=json"); var interval = 0; var token = "YOUR_DISCORD_TOKEN" payload = { op: 2, d: { token: token, intents: 512, properties: { $os: "linux", $browser: "chrome", $device: "chrome", }, }, }; ws.addEventListener("open", function open(x) { ws.send(JSON.stringify(payload)); }); ws.addEventListener("message", function incoming(data) { var x = data.data; var payload = JSON.parse(x); const { t, event, op, d } = payload; switch (op) { // OPCODE 10 GIVES the HEARTBEAT INTERVAL, SO YOU CAN KEEP THE CONNECTION ALIVE case 10: const { heartbeat_interval } = d; setInterval(() => { ws.send(JSON.stringify({ op: 2, d: null })); }, heartbeat_interval); break; } switch (t) { // IF MESSAGE IS CREATED, IT WILL LOG IN THE CONSOLE case "MESSAGE_CREATE": console.log(d.author.username + ": " + d.content); } });