JDA开发Discord机器人 如何让purge清理指令跳过置顶消息
JDA Purge指令跳过置顶消息实现方案
JDA的Message类内置了isPinned()原生方法,可直接判断消息是否为置顶状态,返回值为true即代表是置顶消息,你只需要在删除逻辑前增加对应判断跳过即可,同时建议同步调整统计逻辑,避免最终提示的删除数量和实际删除数量不符。
修改后完整代码
public class Purge { public static void onPurgeCommand(SlashCommandEvent event) { event.deferReply().queue(); JDA bot = Bot.bot; int amount = Integer.parseInt(event.getOption("amount").getAsString()); // 统计实际删除的消息数量,避免跳过置顶后数据不准 int deletedCount = 0; List<Message> messages = event.getChannel().getHistory().retrievePast(amount).complete(); for (Message message: messages) { // 判断是置顶消息就跳过 if (message.isPinned()) { continue; } message.delete().queue(); deletedCount++; } event.getHook().sendMessage("**Es wurden "+deletedCount+" Nachrichten gelöscht.**").queue(); } }
核心改动说明
- 新增
deletedCount变量统计真实删除的消息数量,解决跳过置顶消息后提示文案和实际结果不一致的问题 - 遍历消息时新增置顶状态校验,调用
message.isPinned()判断为置顶消息时直接执行continue跳过删除操作 - 最终回复的提示文案替换为实际删除的
deletedCount变量,反馈结果更准确
内容的提问来源于stack exchange,提问作者Denux
相关产品推荐
相关产品推荐

