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

DSharpPlus中SendFileAsync方法是否被移除?发送图片失败求助

解决Discord机器人无法发送随机图片的问题

问题原因

你当前的代码仅发送了Embed消息,但没有实际上传图片文件。Discord的attachment://协议需要消息附带对应的文件才能生效,所以Embed里的图片链接找不到资源,导致无法显示。另外,旧版本的SendFileAsync方法在新版本Discord.NET中已整合到RespondAsync等消息发送方法的参数里。

修改后的代码

[Command("random")]
[Description("displays a random image.")]
public async Task Yiff(CommandContext ctx)
{
    var randomFiles = Directory.GetFiles(_basePath);
    if (!randomFiles.Any())
    {
        await ctx.RespondAsync("No files found.");
        return;
    }
    var rnd = new Random();
    var fileIndex = rnd.Next(0, randomFiles.Length);
    var filePath = randomFiles[fileIndex];
    await using var stream = new FileStream(filePath, FileMode.Open);
    var fileName = Path.GetFileName(filePath);
    
    var embed = new DiscordEmbedBuilder()
    {
        Title = $"Random img for {ctx.User.Username}",
        ImageUrl = $"attachment://{fileName}",
        Color = DiscordColor.Blue
    }.Build();

    // 同时发送Embed和对应的图片文件
    await ctx.RespondAsync(embed: embed, file: new DiscordAttachment(stream, fileName));
}

核心注意点

  • 必须通过RespondAsync的file参数传入文件流和文件名,让Discord服务器接收并托管该文件
  • Embed中的ImageUrl使用attachment://{fileName}才能关联到上传的文件资源
  • 建议优化变量命名(如random改为randomFiles),提升代码可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:13:24