es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Recibir mensajes de Discord en JavaScript puro basado en el navegador?

(NOTA: esta primera sección solo ofrece contexto, no es demasiado relevante para el tema del mensaje-recibir, 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, me di cuenta de que necesito iniciar una conexión WebSocket con wss://gateway.discord.gg.

Ahora bien, hice una función de inicio de sesión de bot de mala calidad (aunque no estoy del todo seguro de cómo funcionan los WebSockets) y se ve así:

function login<em>bot() {
    let gateway</em>url = "https://discordapp.com/api/v9/gateway/bot";
    let tok = prompt('token del bot: ');
    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");

<pre><code>let socket = new WebSocket("wss://gateway.discord.gg");
socket.onopen = function(e) {
    alert("[abierto] Conexión establecida");
    alert("Enviando al servidor");
    socket.send("Robé este código de solicitud, xd");
};
</code></pre>

}

Con esto, no obtuve nada; no hay respuesta 403 de no permitido, no hay respuesta 404 de no encontrado, etc. (que probablemente no tenga sentido en este contexto? de nuevo, no tengo idea cuando se trata de websockets).

Después de esto, alguien en el servidor Discord-API me informó que si la conexión viene desde la web, no puedes iniciar sesión (la API niega la conexión websocket). Entonces, ¿qué pasa si no quiero iniciar sesión?

No puedo entender cómo simplemente registrar mensajes mientras ya estoy conectado al dominio de Discord.

Intenté ingeniería inversa del envoltorio discord.py, aunque eso es solo más WebSockets.

Entonces, hasta ahora sé que:

1) necesito usar websockets

2) obtener el contenido del mensaje de alguna manera & luego console.log ’em

Entonces, ¿alguien sabe cómo puedo obtener el contenido del mensaje con una conexión websocket (la que te da discord.com/login) ya establecida con el servidor de Discord?

Nuevamente, disculpa si esta pregunta no está permitida aquí.

Gracias, 1305.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en JavaScript, WebSocket, Discord, ingeniería inversa y userscripts, puedo sugerir una posible solución al problema en cuestión. Si deseas recibir el contenido de los mensajes con una conexión WebSocket ya establecida en el servidor de Discord, debes suscribirte a los eventos relevantes en la conexión WebSocket. En el caso de la API de Discord, debes suscribirte al evento “MESSAGE_CREATE” para recibir mensajes entrantes. Una vez que recibas un mensaje, puedes extraer su contenido y registrarlo en la consola.

    Aquí tienes un código de plantilla para comenzar:

    function connect_to_discord() {
      let socket = new WebSocket("wss://gateway.discord.gg");
      socket.onopen = function(e) {
        // enviar mensaje de saludo para inicializar la conexión
        socket.send(JSON.stringify({
          "op": 2,
          "d": {
            "token": "tu_token_de_bot_aquí",
            "properties": {
              "$os": "linux",
              "$browser": "my_library",
              "$device": "my_library"
            }
          }
        }));
      };
      socket.onmessage = function(event) {
        let data = JSON.parse(event.data);
        switch (data.op) {
          case 0:
            // enviar evento a los manejadores relevantes
            switch (data.t) {
              case "MESSAGE_CREATE":
                // extraer contenido del mensaje y registrarlo
                let message = data.d;
                console.log(`Mensaje recibido: ${message.content}`);
                break;
              // manejar aquí otros eventos relevantes
            }
            break;
          case 10:
            // actualizar intervalo de latido
            let heartbeat_interval = data.d.heartbeat_interval;
            setInterval(function() {
              socket.send(JSON.stringify({"op": 1, "d": null}));
            }, heartbeat_interval);
            break;
        }
      };
    }
    

    Este código establece una conexión WebSocket con la API de Discord y envía un mensaje de “hola” para inicializar la conexión. Luego, escucha los mensajes entrantes y extrae su contenido para registrarlo. Puedes agregar lógica para manejar otros eventos según sea necesario.

    Ten en cuenta que deberás reemplazar “tu_token_de_bot_aquí” con tu token real de Discord para autenticarte con la API. Además, este código no maneja la reconexión a WebSocket si se pierde la conexión. Es posible que desees implementar alguna lógica de reintentos en caso de fallos de conexión.

Comments are closed.