import websocket import json # 从 Discord 开发者门户获取的访问令牌 access_token = "OTQwNTc3NzUyODEyMjM2ODAw.GILEVR.F_Ehv2MQ_lVUNiI3Ip7sGu0TgDKNyOyswcPnv8" # 要获取聊天记录的频道 ID channel_id = "1115544284792356894" # Discord WebSocket URL websocket_url = "wss://gateway.discord.gg/" # 建立 WebSocket 连接 ws = websocket.WebSocket() ws.connect(f"{websocket_url}?v=6&encoding=json") # 发送鉴权请求 auth_payload = { "op": 2, "d": { "token": access_token, "properties": { "$os": "linux", "$browser": "my_library", "$device": "my_library" } } } ws.send(json.dumps(auth_payload)) # 订阅频道消息 subscribe_payload = { "op": 0, "d": { "t": "MESSAGE_CREATE", "d": { "channel_id": channel_id } } } ws.send(json.dumps(subscribe_payload)) # 处理 WebSocket 消息 while True: message = ws.recv() message_data = json.loads(message) # 检查消息类型是否为新消息 if message_data["op"] == 0 and message_data["t"] == "MESSAGE_CREATE": message_content = message_data["d"]["content"] print(message_content) 错误
时间: 2023-12-15 10:05:56 浏览: 277
这段代码可能会出现以下错误:
1. 缺少必要的模块导入,需要导入 `websocket` 和 `json` 模块。
2. `access_token` 和 `channel_id` 需要替换为你自己的 Discord 访问令牌和频道 ID。
3. `websocket_url` 变量的值不正确,需要从 Discord 开发者门户获取正确的 WebSocket URL。
4. 订阅消息的 payload 中的 `t` 字段应该设置为 `"MESSAGE_CREATE"`,而非 `"CHANNEL_MESSAGE_CREATE"`。
5. 处理消息时需要检查 `message_data` 是否包含 `"op"` 和 `"t"` 字段,否则会抛出 `KeyError` 异常。
6. 如果代码中的 WebSocket 连接没有正确关闭,可能会导致资源泄漏和程序崩溃的问题,需要在程序结束时调用 `ws.close()` 关闭连接。
阅读全文