const token = ''; const channelId = ''; var delay = 0; var lastHeartbeat = 0; var stuff = false; var wtf = 1; const listener = JsMacros.on('Tick', JavaWrapper.methodToJava(() => { if (stuff) { if (Date.now() - lastHeartbeat > delay) { sendHeartbeat(); lastHeartbeat = Date.now(); } } })) const websocket = Request.createWS('wss://gateway.discord.gg/?v=9&encoding=json'); websocket.onConnect = JavaWrapper.methodToJava((ws, data) => { Chat.log('Connected to Discord Gateway'); authenticate(ws); }); websocket.onTextMessage = JavaWrapper.methodToJava((ws, data) => { const message = JSON.parse(data); switch (message.op) { case 10: //sendHeartbeat(); startHeartbeat(message); break; case 0: handleMessage(message); break; } }); websocket.onError = JavaWrapper.methodToJava((ws, data) => { Chat.log(`damn, error ${data.getError()}`); }); function authenticate(ws) { const payload = { op: 2, d: { token: token, intents: 47047, properties: { os: 'linux', browser: 'custom', device: 'custom', }, }, }; ws.sendText(JSON.stringify(payload)); } function sendHeartbeat() { const payload = { op: 1, d: wtf }; wtf += 1; websocket.sendText(JSON.stringify(payload)); } function startHeartbeat(message) { delay = message.d.heartbeat_interval - 200; stuff = true; } function handleMessage(message) { if (message.t === 'MESSAGE_CREATE') { const channelRespID = message.d.channel_id; const content = message.d.content; if (channelRespID === channelId) { Chat.log(`Message in the specified channel: ${content}`); } } } websocket.getWs().connect()