JDA中如何多次回复Slash命令事件并视为同一回复?
解决方案
Slash命令的交互只能被一次回复/确认,直接调用两次event.reply()会触发你遇到的错误。要发送两条独立消息且归为同一次交互,你可以用以下两种方式:
方法1:初始回复后发送跟进消息
先发送第一条消息作为初始回复,再通过ReplyHook发送第二条跟进消息,两条消息都是独立的,且属于同一次交互:
// 发送第一条消息,获取回复钩子 event.reply(this.dadJokeReader()).queue(replyHook -> { // 用钩子发送第二条独立消息 replyHook.sendMessage(this.randomFunEmoji()).queue(); });
或者同步获取钩子:
ReplyHook replyHook = event.reply(this.dadJokeReader()).complete(); replyHook.sendMessage(this.randomFunEmoji()).queue();
方法2:延迟回复后发送两条跟进消息
如果需要先确认交互(避免Discord判定超时),再发送两条消息,可以用deferReply():
// 延迟回复(公开可见,若要私有可传true) event.deferReply().queue(hook -> { hook.sendMessage(this.dadJokeReader()).queue(); hook.sendMessage(this.randomFunEmoji()).queue(); });
这两种方式发送的消息都属于同一次Slash命令交互的上下文,既满足"视为一次回复"的要求,又能让两条消息独立显示,避免表情因同条消息组合而变小的问题。
内容的提问来源于stack exchange,提问作者chaunmt
相关产品推荐
相关产品推荐

