簡體   English   中英

在基於瀏覽器的純 javascript 中接收 discord 消息?

[英]receive discord messages in pure, browser-based javascript?

(注意:第一部分只是提供上下文,與消息接收的事情不太相關,但同樣,它設置了一些可能有幫助的上下文)

所以,我知道我需要使用 WebSocket 以某種方式連接到它。 經過一些逆向工程后,我注意到我需要啟動與wss://gateway.discord.gg的 WebSocket 連接。

現在,我做了一個蹩腳的機器人登錄 function(雖然我不完全確定 WebSockets 是如何工作的)它看起來像這樣:

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");
    };
}

有了這個,我一無所獲; 沒有 403 不允許響應,沒有 404 未找到響應,等等(在這種情況下這可能沒有意義?再一次,當涉及到 websockets 時我一無所知)。


此后,Discord-API 服務器中有人告訴我,如果連接來自 web,則無法登錄(api 拒絕 websocket 連接)。 那么,如果我不想登錄怎么辦?

我什至不知道如何在已經登錄到 discord 域時簡單地記錄消息。

我嘗試對 discord.py 包裝器進行逆向工程,盡管那只是更多的 WebSocket。

所以,到目前為止,我知道我:

  1. 需要使用 websockets
  2. 以某種方式獲取消息內容然后 console.log 'em

那么,有誰知道我如何通過已經建立到 discord 服務器的 websocket 連接(discord.com/login 給你的連接)獲取消息內容?

再次,如果這里不允許這個問題,我們深表歉意。

謝謝,1305。

嘗試這個。 YOUR_TOKEN替換為您的 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);
   }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM