Discord JDA中含EntitySelectMenu的临时消息编辑问题
解决JDA临时消息(Ephemeral Message)编辑问题
你代码的问题在于找错了编辑对象:临时消息是作为交互响应发送的,并非依附于普通消息,event.getHook().retrieveOriginal()获取的是触发菜单的原消息(比如最初发送菜单的普通消息),而不是你要修改的临时消息本身。
正确的做法是直接使用交互对象的editReply()方法,它专门用于修改当前交互对应的临时回复消息:
// 直接编辑临时消息内容,默认会自动禁用菜单组件 event.editReply("abc").queue();
如果需要精细控制组件(比如保留组件但仅禁用菜单),可以补充组件处理逻辑:
event.editReply("abc") // 遍历原组件,将所有EntitySelectMenu设置为禁用状态 .setComponents(event.getMessage().getComponents().stream() .map(actionRow -> actionRow.getComponents().stream() .map(component -> { if (component instanceof EntitySelectMenu) { return ((EntitySelectMenu) component).asDisabled(); } return component; }).collect(ActionRow::of)) .collect(Collectors.toList())) .queue();
核心逻辑:临时消息是通过event.reply().setEphemeral(true)发送的交互响应,当用户触发菜单时,当前的EntitySelectInteraction直接关联这条临时消息,调用editReply()就能精准修改它。
内容的提问来源于stack exchange,提问作者Николай
相关产品推荐
相关产品推荐

