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

使用discord.go如何从斜杠命令选项中获取消息附件

斜杠命令附件获取与下载解决方案

核心问题说明

你当前代码里的i.Interaction.Message.Attachments是针对普通消息附件的,斜杠命令的附件并不在这里存储;而且i.ApplicationCommandData().Options[0].Value返回的只是附件ID,无法直接拿到下载所需的信息。

正确实现步骤

  • 从斜杠命令选项中取出附件对象,需做类型转换
  • 通过附件的CDN链接下载内容

完整代码示例

"import-file": func(s *discordgo.Session, i *discordgo.InteractionCreate) *discordgo.MessageEmbed {
    // 获取斜杠命令的选项集合
    opts := i.ApplicationCommandData().Options
    if len(opts) == 0 {
        logger.Error("未检测到附件选项")
        return &discordgo.MessageEmbed{Description: "请上传需要处理的附件"}
    }

    // 将目标选项转换为附件类型
    attachmentOpt, ok := opts[0].Value.(*discordgo.ApplicationCommandInteractionDataOptionAttachment)
    if !ok {
        logger.Error("选中的选项不是附件类型")
        return &discordgo.MessageEmbed{Description: "请选择有效的附件"}
    }

    // 发起HTTP请求下载附件
    resp, err := http.Get(attachmentOpt.URL)
    if err != nil {
        logger.Error("附件下载失败:", err)
        return &discordgo.MessageEmbed{Description: "附件下载失败,请重试"}
    }
    defer resp.Body.Close()

    // 读取附件内容(可根据需求保存到本地文件或直接解析)
    content, err := io.ReadAll(resp.Body)
    if err != nil {
        logger.Error("读取附件内容失败:", err)
        return &discordgo.MessageEmbed{Description: "读取附件内容失败"}
    }

    // 这里可以添加对附件内容的业务处理逻辑
    logger.Info("成功读取附件,内容长度:", len(content))

    return &discordgo.MessageEmbed{Description: "附件处理完成"}
},

关键注意点

  • 斜杠命令的附件必须通过类型转换为*discordgo.ApplicationCommandInteractionDataOptionAttachment,才能拿到下载URL、文件名等关键信息
  • Discord附件的CDN链接是公开可访问的,无需额外携带鉴权信息即可下载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:21:56