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

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,提问作者Николай

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:53:12