试图弄清楚如何保持心跳间隔从JavaScript打开,以在网站上不和谐地阅读消息?

问题描述 投票:0回答:0

我是 javascript 开发的新手,我正在测试一些可以读取某个不和谐服务器上的消息的东西。我现在的代码在网站打开时可以运行大约 3 秒。我不确定我做错了什么,但我知道心跳间隔没有正常工作。我得到 bnack code op = 0,所以 case nmnumber 没有切换到 10。我从其他人那里得到了关于不同问题的代码,并且我更改了一些内容,以便它可以在我这边工作。这是当前的代码。

var ws = new WebSocket('wss://gateway.discord.gg/?v=6&encoding=json');
var interval = 0;
var token = 'Discord_Token_here';

payload = {
    op: 2,
    d: {
        token: token,
        intents: 512,
        properties: {
            $os: 'Windows',
            $browser: 'Opera GX',
            $device: 'Opera GX'
        }
    }
};

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) {
        case 10:
            const { heartbeat_interval } = d;
            setInterval(() => {
                ws.send(JSON.stringify({ op: 2, d: null }));
            }, heartbeat_interval);
            break;
    }
    switch (t) {
        case 'MESSAGE_CREATE':
            console.log(d.author.username + ':' + d.content);
    }
})

我只是不确定有效负载的作用或操作的含义。但到目前为止,case op 不匹配,我认为我在 wesocket 设置之间的设置部分搞砸了一些东西,并且变量可能在我没有看到的小东西上不正确。

我尝试了一些解决方法。设置手动 setInterval() 但它一直被忽略。

const pingInterval = 1500;

function sendPing() {
    if (ws.readyState === WebSocket.OPEN)
        ws.send('ping');
}

setInterval(() => {
    sendPing();
}, pingInterval);

还设置一个事件侦听器,以便在关闭时重新打开 websocket

ws.addEventListener('close', function close() {
    ws = new WebSocket('wss://gateway.discord.gg/?v=6&encoding=json');
})

^这个不会发送错误。但仍然关闭websocket 我还缺少其他东西吗?或者有我可以使用的解决方法吗?我对 javascript 还很陌生,所以请告诉我是否还有其他我不知道的功能可以使用。

javascript websocket discord client-side
© www.soinside.com 2019 - 2024. All rights reserved.