Skip to main content
使用媒体发送 API,你可以把图片、语音、视频、文件或图文混合内容回复到当前会话,也可以主动推送到指定 IM 目标。
新插件优先使用 SenderreplyImagereplyVoicereplyVideoreplyFilereplyMixed。旧版回复脚本中的全局 sendImagesendVoicesendVideosendFilesendMixed 仍可用于维护存量插件,但新文档示例不再主推全局函数。

选择发送方式

回复当前会话

在消息触发的插件里使用 sender.replyImage(...) 等方法,目标自动来自当前消息。

主动推送

使用 pushImage(...)pushVoice(...)pushVideo(...)pushFile(...)pushMixed(...) 指定 imType、群和用户。

发送组合内容

使用 replyMixed(...) 一次发送文本、图片、语音、视频或文件组成的消息。

先保存文件

使用 fileDownload(...) 保存远程地址、base64 或 data URI,再把本地路径传给媒体发送方法。

快速示例

媒体来源

媒体方法的 source 参数支持以下形式:
本地路径最适合插件自己生成的文件,例如截图、报表、TTS 语音或下载后的临时文件。远程 URL 更适合已经公开可访问的素材。

回复媒体

先创建 Sender,再调用对应的回复方法。返回值通常是 SendReceipt

方法作用

options

媒体回复方法的第二个参数是可选对象。当前普通插件发送帮助函数实际使用这些字段: 需要指定目标时,请使用 pushImage(...)pushVoice(...)pushVideo(...)pushFile(...)pushMixed(...)。普通回复默认发送到当前会话。

发送混合消息

replyMixed(items, options?) 可以把文本和媒体组成一个消息序列。媒体项可使用 source,也可使用 fileurlpath 表示来源。
支持的 items 媒体项可额外传 namefile_namefilenamemime_typemimeType

主动推送媒体

主动推送不依赖当前消息。你需要指定目标:
  • imType:IM 类型,例如 qqwx,以实际启用的适配器为准。
  • groupCode:群号/群 ID。私聊时通常传空字符串。
  • userID:用户 ID。群推送时通常传空字符串。
  • title:推送标题或备注,部分适配器会忽略。
更多主动推送账号选择规则见 JavaScript 主动推送Python 主动推送

保存并发送文件

fileDownload(url, path?) 会把 http(s)base64://...data:*;base64,... 保存为本地文件。返回的 path / file_path 可以继续传给媒体发送方法。

fileDownload 参数

FileDownloadResult

fileDownload(...) 单个文件默认限制约 20 MB。下载失败、来源不可访问或文件过大时会抛出异常。

处理用户上传的文件

如果用户在消息里上传文件,先读取媒体项,再调用 downloadAdapterFile(...) 保存到本地。
downloadAdapterFile(...) 返回字段与 fileDownload(...) 相同,并可能额外包含:

SendReceipt

文本、媒体和撤回类方法通常返回发送回执。适配器可能添加额外字段。
检查发送结果时,建议把 ok === false / ok is False 当作失败;不要只依赖某一个消息 ID 字段。

实用技巧

  • 发送本地生成文件前,先确认文件已经写入完成,再调用 replyImage / replyVideo 等方法。
  • 给文件和 mixed 媒体项设置 filename / name,方便用户识别下载内容。
  • 大文件优先使用可访问的 URL;需要落盘处理时再用 fileDownload(...)
  • 用户上传文件不要手动解析平台原始字段;使用 sender.getMediaItems() + downloadAdapterFile(...)
  • 媒体发送失败时读取回执里的 error,并给用户一个可执行的下一步提示。

旧版回复脚本入口

维护 plugin/replies/*.js 这类旧版脚本时,可以继续使用全局函数:
新建 plugin/scripts/*.jsplugin/scripts/*.py 时,请优先使用 Sender 写法,便于阅读和类型提示。
最后修改于 2026年6月3日