添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何在Discord Gateway Websocket上发送JSON有效载荷的识别信息

4 人关注

我正在使用这个Python代码连接到discord网关,基本上我需要发送一个Opcode 2 Identify,只是为了能够用discord API在一个频道上发送信息。

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对象。

But the result is this:

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后,连接被关闭,我无法收到响应,我的请求有什么问题吗?

python
websocket
discord
Stefano Raneri
Stefano Raneri
发布于 2019-02-21
2 个回答
Edn
Edn
发布于 2020-06-08
已采纳
0 人赞同

我在第一次尝试时也遇到了同样的问题,所以我仔细阅读了文档,我发现了下面这一节。

Sending Payloads

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

Ok, what that's mean?

你发送给Gateway API的每个数据包都需要遵循请求模型。

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

What is each object in this request model?

op 。告诉Gateway API什么是你的有效载荷类型的代码。你可以找到 op 的列表。 here .

d 。有效载荷本身。下面是你试图发送的json(你的 p 变量)。

s t 。只对 op 有要求。0,所以对于 IDENTIFY ,你可以将其作为空值传递。

What your request should looks like

"op": 2, "d": { "token": "YOUR_TOKEN_HERE", "properties": { "$os": "linux", "$browser": "disco", "$device": "disco" "s": null, "t": null
2603003199
2603003199
发布于 2020-06-08
0 人赞同

我认为你发送的心跳有效载荷是错误的。