簡體   English   中英

維護 websocket 與 Discord - Node.js 的連接

[英]Maintain websocket connection with Discord - Node.js

我正在嘗試使用原始 api 創建 Discord 機器人,但一段時間后,機器人不再工作。
我認為是因為我不維護 websocket 連接,所以,我該如何維護它?
我當前的代碼:

const ws = new WebSocket("wss://gateway.discord.gg/?v=6&encoding=json");

    let interval = 0;
    let payload = {
      op: 2,
      d: {
        token: botToken,
        intents: 32767,
        properties: {
          $os: "linux",
          $browser: "chrome",
          $device: "chrome",
        },
      },
    };

    ws.on("open", function open() {
      ws.send(JSON.stringify(payload));
    });

    ws.on("message", function incoming(data) {
      let response = JSON.parse(data);
      const { t, event, op, d } = response;

      switch (op) {
        case 10:
          const { heartbeat_interval } = d;
          interval = heartbeat(heartbeat_interval);
        break;
      }
    });

    const heartbeat = (ms) => {
      return setInterval(() => {
        ws.send(JSON.stringify({ op: 1, d: null }));
      }, ms);
    };

使用此服務reconnecting-websocket

npm install --save reconnecting-websocket

const WS = require("ws");
const ReconnectingWebSocket = require("reconnecting-websocket");
const ws = new ReconnectingWebSocket("wss://gateway.discord.gg/?v=6&encoding=json", [], { WebSocket: WS });
let interval = 0;
let session_id;
let last_seq;
let payload = {
  op: 2,
  d: {
    token: botToken,
    intents: 32767,
    properties: {
      $os: "linux",
      $browser: "chrome",
      $device: "chrome",
    },
  },
};

ws.addEventListener('open', () => {
    ws.send(JSON.stringify(payload))
});

ws.addEventListener ('message', function incoming(rawdata){
let payload = JSON.parse(rawdata.data);
const {t, event, op, d, s}  = payload;
last_seq = s;
  switch (op) {
    case 10:
      const { heartbeat_interval } = d;
      interval = heartbeat(heartbeat_interval);
    break;
  }
});

const heartbeat = (ms) => {
  return setInterval(() => {
    ws.send(JSON.stringify({ op: 1, d: last_seq }));
  }, ms);
};

暫無
暫無

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

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