如何使用 Discord API 和 Python 请求发送图片

Posted

技术标签:

【中文标题】如何使用 Discord API 和 Python 请求发送图片【英文标题】:How can I send a picture with the Discord API and Python Requests 【发布时间】:2021-09-30 15:06:38 【问题描述】:

这是我第一次在这里发帖,我想问你是否可以帮助我找到一种方法,使用 Discord API with Python Requests 在频道中发送图片。 (我不是在谈论 discord.py 或 Discord Bots)。

为了编写代码,我首先检查了网络选项卡并上传了一张图片以查看它实际发送的请求。 在表单数据中,我可以看到它正在发送两个信息:

file: (binary)
payload_json: "content": "", "tts": false

最后需要的是在 header 中发送我们的 Discord Token

当我尝试编写代码时,他们给我的回应是

"message": "Cannot send an empty message", "code": 50006

即使我在内容中添加文本,它们也会给我同样的错误。 我想我没有在数据中输入正确的信息。

代码如下:

import requests

# User's Token
header = 
    'authorization': "token",


# Data
payload = 
    "file" : open("picture.jpg", "rb").read(), # The picture that we want to send in binary
    "payload_json": "content":"","tts":False,


channel_id = "829628868860051480" # Channel where we send the picture

r = requests.post(f"https://discord.com/api/v9/channels/channel_id/messages", data=payload, headers=header).text
print(r)

【问题讨论】:

I'm not talking here about discord.py or Discord Bots 为什么你不能只使用 discord.py,你很难尝试使用请求手动发送数据。与 discord.py it is a single line of code with open('my_image.png', 'rb') as f: channel.send(file=discord.File(f)) @user9321739 听起来他们想在用户帐户上发送消息。这是针对Discord's ToS。 (我可能错了,但他们确实说“我在这里不是在谈论 discord.py 或 Discord Bots”) 【参考方案1】:

您必须根据docs 将文件作为multipart/form-data 发送。

将它们放在嵌套在字典中的元组中。

files = 
    'file': ('./picture.jpg', open('./picture.jpg', 'rb')),
    


r = requests.post(f"https://discord.com/api/v9/channels/channel_id/messages", data=payload, headers=header, files=files).text

【讨论】:

【参考方案2】:

感谢isopach,我想出了要写什么,我把它贴在这里以防有人需要和我做同样的事情

import requests

# User's Token
header = 
    'authorization': "token",


# File
files = 
    "file" : ("./picture.jpg", open("./picture.jpg", 'rb')) # The picture that we want to send in binary


# Optional message to send with the picture
payload = 
    "content":"message"


channel_id = "channel_id" # Channel where we send the picture

r = requests.post(f"https://discord.com/api/v9/channels/channel_id/messages", data=payload, headers=header, files=files)

【讨论】:

它只是显示为您可以下载的通用文件,而不是图像。即使你点击它保存它仍然无法打开

以上是关于如何使用 Discord API 和 Python 请求发送图片的主要内容,如果未能解决你的问题,请参考以下文章

使用 Discord API 和 cURL 发送 Discord DM

使用 Codeforces API 通过 discord bot (discord.py) 获取有关用户在 CF 问题上的所有 AC 的信息 - python 中的 json 文件处理错误

(Discord api) 使用 python 请求更改服务器上的昵称

如何在不达到 Discord 的 1,000 个最大连接数的情况下运行从 API 更新的 Discord 机器人?

如何使用 JDA 在 Discord 中创建文本通道:Java Discord Api

如何使用 Discord API 指定父类别?