我是 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 还很陌生,所以请告诉我是否还有其他我不知道的功能可以使用。