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
相关产品推荐
相关产品推荐

