You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py:如何编辑频道内发送的非嵌入图片?

解决Discord.py中更新非嵌入消息图片的问题

Discord.py的message.edit()方法确实没有提供直接修改非嵌入图片附件的参数,要实现Midjourney那样的图片更新效果,得绕开官方库的封装,直接调用Discord REST API来操作,具体思路如下:

核心原理

Discord的消息修改API支持替换附件,但Discord.py的高层方法没暴露这个能力。我们需要通过API的PATCH请求,指定要替换的附件ID并上传新文件数据,来实现图片更新。

具体步骤

  • 第一步:获取目标消息的原附件ID。如果消息只有一张图片,直接取message.attachments[0].id即可;多附件的话需要对应指定要替换的ID。
  • 第二步:构造API请求,使用PATCH方法访问/channels/{channel_id}/messages/{message_id}路径。
  • 第三步:请求体中通过attachments字段声明要保留或替换的附件,同时在请求中携带新的文件数据。

代码示例

import aiohttp
import json
from io import BytesIO

async def update_message_image(bot, message, new_image_bytesio: BytesIO, filename="image.png"):
    # 确保BytesIO指针在起始位置
    new_image_bytesio.seek(0)
    
    # 获取原附件ID(假设消息只有一张图片)
    if not message.attachments:
        raise ValueError("目标消息没有可替换的附件")
    original_attachment_id = message.attachments[0].id

    # 构造请求表单数据
    form = aiohttp.FormData()
    # 添加新文件
    form.add_field("files[0]", new_image_bytesio.read(), filename=filename)
    # 声明替换指定ID的附件
    form.add_field("payload_json", json.dumps({
        "attachments": [
            {
                "id": original_attachment_id,
                "filename": filename
            }
        ]
    }))

    # 发送API请求
    api_url = f"https://discord.com/api/v10/channels/{message.channel.id}/messages/{message.id}"
    headers = {"Authorization": f"Bot {bot.http.token}"}
    async with aiohttp.ClientSession() as session:
        async with session.patch(api_url, headers=headers, data=form) as resp:
            if resp.status != 200:
                raise Exception(f"更新失败,状态码:{resp.status},响应:{await resp.text()}")
            # 可选:获取更新后的消息对象
            updated_message = await message.channel.fetch_message(message.id)
            return updated_message

注意事项

  • 机器人需要拥有manage_messages权限才能修改消息附件。
  • 如果要替换多附件,需在attachments列表中对应每个要替换的ID,同时在files字段按顺序添加新文件。
  • 若原消息无附件,这种方法无法直接添加新附件(只能替换已有附件),添加附件需重新发送消息。

内容的提问来源于stack exchange,提问作者Questionner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:33:15