在纯粹的、基于浏览器的 javascript 中接收不和谐消息?
receive discord messages in pure, browser-based javascript?
(注意:第一部分只是提供上下文,而不是 太 与消息接收相关的东西,但同样,它设置了一些可能有帮助的上下文)
所以,我知道我需要使用 WebSocket 以某种方式连接到它。经过一些逆向工程后,我注意到我需要使用 wss://gateway.discord.gg
.
启动 WebSocket 连接
现在,我做了一个蹩脚的机器人登录功能(虽然我不完全确定 WebSockets 是如何工作的)它看起来像这样:
function login_bot() {
let gateway_url = "https://discordapp.com/api/v9/gateway/bot";
let tok = prompt('bot token: ');
let request = new XMLHttpRequest();
request.withCredentials = true;
request.open("GET", gateway_url);
request.setRequestHeader("authorization", tok);
request.setRequestHeader("accept", "/");
request.setRequestHeader("authority", "discordapp.com");
request.setRequestHeader("content-type", "application/json");
let socket = new WebSocket("wss://gateway.discord.gg");
socket.onopen = function(e) {
alert("[open] Connection established");
alert("Sending to server");
socket.send("I stole this request code xd");
};
}
有了这个,我一无所获;没有 403 不允许响应,没有 404 未找到响应,等等(在这种情况下这可能没有意义?再一次,当涉及到 websockets 时我一无所知)。
在此之后,Discord-API 服务器中的某个人告诉我,如果连接来自网络,您将无法登录(api 拒绝 websocket 连接)。那么,如果我不想登录怎么办?
我不知道如何在已经登录到 discord 域的情况下简单地 log 消息。
我尝试对 discord.py 包装器进行逆向工程,尽管那只是更多的 WebSocket。
所以,我到目前为止知道我:
- 需要使用websockets
- 以某种方式获取邮件内容,然后 console.log 'em
所以,有谁知道我如何通过已经建立到 discord 服务器的 websocket 连接(discord.com/login 给你的那个)获取消息内容?
再次道歉,如果这里不允许这个问题。
谢谢,1305。
试试这个。将 YOUR_TOKEN
替换为您的 Discord 令牌。
var ws = new WebSocket("wss://gateway.discord.gg/?v=6&encoding=json");
var interval = 0;
var token = "YOUR_DISCORD_TOKEN"
payload = {
op: 2,
d: {
token: token,
intents: 512,
properties: {
$os: "linux",
$browser: "chrome",
$device: "chrome",
},
},
};
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) {
// OPCODE 10 GIVES the HEARTBEAT INTERVAL, SO YOU CAN KEEP THE CONNECTION ALIVE
case 10:
const { heartbeat_interval } = d;
setInterval(() => {
ws.send(JSON.stringify({ op: 2, d: null }));
}, heartbeat_interval);
break;
}
switch (t) {
// IF MESSAGE IS CREATED, IT WILL LOG IN THE CONSOLE
case "MESSAGE_CREATE":
console.log(d.author.username + ": " + d.content);
}
});
(注意:第一部分只是提供上下文,而不是 太 与消息接收相关的东西,但同样,它设置了一些可能有帮助的上下文)
所以,我知道我需要使用 WebSocket 以某种方式连接到它。经过一些逆向工程后,我注意到我需要使用 wss://gateway.discord.gg
.
现在,我做了一个蹩脚的机器人登录功能(虽然我不完全确定 WebSockets 是如何工作的)它看起来像这样:
function login_bot() {
let gateway_url = "https://discordapp.com/api/v9/gateway/bot";
let tok = prompt('bot token: ');
let request = new XMLHttpRequest();
request.withCredentials = true;
request.open("GET", gateway_url);
request.setRequestHeader("authorization", tok);
request.setRequestHeader("accept", "/");
request.setRequestHeader("authority", "discordapp.com");
request.setRequestHeader("content-type", "application/json");
let socket = new WebSocket("wss://gateway.discord.gg");
socket.onopen = function(e) {
alert("[open] Connection established");
alert("Sending to server");
socket.send("I stole this request code xd");
};
}
有了这个,我一无所获;没有 403 不允许响应,没有 404 未找到响应,等等(在这种情况下这可能没有意义?再一次,当涉及到 websockets 时我一无所知)。
在此之后,Discord-API 服务器中的某个人告诉我,如果连接来自网络,您将无法登录(api 拒绝 websocket 连接)。那么,如果我不想登录怎么办?
我不知道如何在已经登录到 discord 域的情况下简单地 log 消息。
我尝试对 discord.py 包装器进行逆向工程,尽管那只是更多的 WebSocket。
所以,我到目前为止知道我:
- 需要使用websockets
- 以某种方式获取邮件内容,然后 console.log 'em
所以,有谁知道我如何通过已经建立到 discord 服务器的 websocket 连接(discord.com/login 给你的那个)获取消息内容?
再次道歉,如果这里不允许这个问题。
谢谢,1305。
试试这个。将 YOUR_TOKEN
替换为您的 Discord 令牌。
var ws = new WebSocket("wss://gateway.discord.gg/?v=6&encoding=json");
var interval = 0;
var token = "YOUR_DISCORD_TOKEN"
payload = {
op: 2,
d: {
token: token,
intents: 512,
properties: {
$os: "linux",
$browser: "chrome",
$device: "chrome",
},
},
};
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) {
// OPCODE 10 GIVES the HEARTBEAT INTERVAL, SO YOU CAN KEEP THE CONNECTION ALIVE
case 10:
const { heartbeat_interval } = d;
setInterval(() => {
ws.send(JSON.stringify({ op: 2, d: null }));
}, heartbeat_interval);
break;
}
switch (t) {
// IF MESSAGE IS CREATED, IT WILL LOG IN THE CONSOLE
case "MESSAGE_CREATE":
console.log(d.author.username + ": " + d.content);
}
});