在JDA中使用什么方法可以检测消息是否包含图片?
JDA检测消息是否包含图片的实现方法
核心调用方法
JDA 中所有消息附件的信息都封装在 Message.Attachment 类中,你只需要两步即可完成检测:
- 调用
Message#getAttachments()方法获取当前消息携带的所有附件列表 - 调用
Message.Attachment#isImage()方法判断单个附件是否为图片类型,该方法会自动识别附件的后缀与 MIME 类型,不需要手动做格式校验
完整示例代码
import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.jetbrains.annotations.NotNull; public class ImageCommandListener extends ListenerAdapter { // 替换为你自定义的交互指令 private static final String TARGET_COMMAND = "!random-reply"; @Override public void onMessageReceived(@NotNull MessageReceivedEvent event) { // 过滤机器人自身发送的消息,避免循环触发 if (event.getAuthor().isBot()) return; String content = event.getMessage().getContentRaw(); // 匹配用户触发的指令 if (!TARGET_COMMAND.equals(content)) return; // 检测是否携带图片附件 boolean hasImage = event.getMessage().getAttachments() .stream() .anyMatch(Message.Attachment::isImage); if (hasImage) { // 替换为你生成随机字符串的逻辑 String randomReply = "随机应答字符串"; event.getChannel().sendMessage(randomReply).queue(); } } }
注意事项
isImage()方法支持识别常见的所有图片格式,包括png、jpg、gif、webp等- 如果需要过滤动态图/静态图,可以额外通过
Attachment#getFileExtension()方法获取后缀做二次判断
内容的提问来源于stack exchange,提问作者Vincent Banks
相关产品推荐
相关产品推荐

