gpt4 book ai didi

python - 如何在 Discord Gateway Websocket 上发送 JSON 有效负载识别

转载 作者:行者123 更新时间:2023-12-04 13:01:56 27 4
gpt4 key购买 nike

我正在使用此 Python 代码连接到 Discord 网关,基本上我需要发送一个操作码 2 标识,以便能够使用 Discord API 在 channel 上发送消息。

import websocket
import json
import pprint
ws = websocket.WebSocket()
# Connect to host url
ws.connect("wss://gateway.discord.gg/?v=6&encoding=json")
# Use ws.send() to send data to server
# Use ws.recv() to get the data sent from server
result = ws.recv()
print "Received: ",result
heartbeat = '{"op": 1,"d": 251}'
p = '{"token": "MY_BOT_TOKEN","properties": {"$os": "linux","$browser": "disco","$device": "disco" },"compress": false, "large_threshold": 250,"shard": [0, 1],"presence": {"game": {},"status": "online","since": null,"afk": false}}'
h = json.loads(heartbeat)
h_json = json.dumps(h)
p_load = json.loads(p)
p_json = json.dumps(p_load)
print(h_json)
ws.send(h_json)
# Use ws.close() to close the WebSocket handshake
result = ws.recv()
print "Received: ",result
ws.send(p_json)
result = ws.recv()
print "Received: ",result

这段代码的作用是:在操作码10之后发送心跳,从服务器接收操作码11,发送操作码2标识的json对象。

但结果是这样的:
Received:  {"t":null,"s":null,"op":10,"d":{"heartbeat_interval":41250,"_trace":["gateway-prd-main-rskw"]}}
{"d": 251, "op": 1}
Received: {"t":null,"s":null,"op":11,"d":null}
Received:

问题是发送json后连接关闭,收不到响应,是不是我的请求有问题?

最佳答案

我第一次尝试时遇到了同样的问题,所以我仔细阅读了文档并找到了下面的部分。

Sending Payloads

从客户端发送到网关 API 的数据包封装在网关负载对象中,并且必须具有正确的操作码和数据对象集。 然后可以以选择的格式(参见 ETF/JSON)序列化有效负载对象,并通过 websocket 发送。到网关的有效负载被限制为最多 4096 个字节发送,超过这将导致连接终止,错误代码为 4002。

好的,这是什么意思?

您发送到网关 API 的每个数据包都需要遵循请求模型。

{
"op": 0,
"d": {},
"s": 42,
"t": "GATEWAY_EVENT_NAME"
}

这个请求模型中的每个对象是什么?
op :告诉网关 API 什么是您的有效负载类型的代码。您可以找到 op 的列表 here .
d :有效载荷本身。这是您尝试发送的 json(您的 p 变量)
st : 仅 op 需要0,因此您可以将其作为 null 传递给 IDENTIFY .

您的请求应该是什么样的
{
"op": 2,
"d": {
"token": "YOUR_TOKEN_HERE",
"properties": {
"$os": "linux",
"$browser": "disco",
"$device": "disco"
}
},
"s": null,
"t": null
}

关于python - 如何在 Discord Gateway Websocket 上发送 JSON 有效负载识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com