[英]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.