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

Spigot+JDA实现Discord嵌入消息时皮肤头像URL无效问题排查

解决JDA EmbedBuilder.setAuthor()的URL验证错误(Minecraft皮肤头像显示问题)

问题描述

使用Spigot结合Java Discord API(JDA)开发功能时,尝试在Discord嵌入消息中显示Minecraft玩家的皮肤头像,调用EmbedBuilder.setAuthor()时抛出以下错误:

Caused by: java.lang.IllegalArgumentException: URL must be a valid http(s) or attachment url.
    at net.dv8tion.jda.api.EmbedBuilder.setAuthor(EmbedBuilder.java:630)

原代码片段:

public static void sendMCMessage(String message, String username){
    TextChannel channel = api.getTextChannelById("1088516469974908928");
    EmbedBuilder embed = new EmbedBuilder()
        .setColor(Color.green)
        .setAuthor(username, null, "http://minotar.net/helm/" + username + ".png")
        .setFooter(api.getSelfUser().getName() + " 2023", api.getSelfUser().getAvatarUrl())
        .addField(" ", message, true);
    channel.sendMessageEmbeds(embed.build()).queue();
}

错误原因

JDA的EmbedBuilder对嵌入消息中的图片URL有严格验证:必须使用HTTPS协议,或者是Discord的附件URL。代码中使用的http://minotar.net/...是HTTP协议链接,不符合验证规则,因此触发错误。

解决方案

将minotar的URL协议从HTTP替换为HTTPS即可:

修改后的代码:

public static void sendMCMessage(String message, String username){
    TextChannel channel = api.getTextChannelById("1088516469974908928");
    EmbedBuilder embed = new EmbedBuilder()
        .setColor(Color.green)
        // 替换为HTTPS协议的头像链接
        .setAuthor(username, null, "https://minotar.net/helm/" + username + ".png")
        .setFooter(api.getSelfUser().getName() + " 2023", api.getSelfUser().getAvatarUrl())
        .addField(" ", message, true);
    channel.sendMessageEmbeds(embed.build()).queue();
}

额外注意事项

  • 如果Minecraft用户名包含空格或特殊字符,需要对用户名进行URL编码,避免生成无效URL。可以使用URLEncoder.encode(username, StandardCharsets.UTF_8)处理用户名后再拼接URL。
  • 确保minotar服务正常可用,若服务宕机可能导致头像无法加载,此时可以考虑备用的Minecraft皮肤头像服务,同样需使用HTTPS协议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:22:48