Discord Bot 不会删除消息(带有 JDA API 的 Eclipse IDE Java)

Posted

技术标签:

【中文标题】Discord Bot 不会删除消息(带有 JDA API 的 Eclipse IDE Java)【英文标题】:Discord Bot won't delete messages(Eclipse IDE Java with JDA API) 【发布时间】:2019-10-25 09:48:52 【问题描述】:

我尝试发出清除命令,删除用户在不和谐频道中想要的消息量。但是,它没有成功。

public void onGuildReceived(GuildMessageReceivedEvent event) 
        Message objMsg = event.getMessage();
        String[] args = objMsg.getContentRaw().split("");
        if(args[0].equalsIgnoreCase(Ref.prefix + "purge")) 
            if(args.length <= 2) 
                //TODO
            else 
                event.getMessage().delete().queue();
                TextChannel target = event.getMessage().getMentionedChannels().get(0);
                purgeMessages(target, Integer.parseInt(args[2]));
            
        
    
    private void purgeMessages(TextChannel channel, int numberofMessages) 
        MessageHistory history = new MessageHistory(channel);
        List<Message> msgs;

        msgs = history.retrievePast(numberofMessages).complete();
        channel.deleteMessages(msgs).queue();

    

我预计机器人会删除指定数量的消息。但是,它没有任何反应。我已经将这种 if 语句的方法用于其他命令,例如检查您的 ping,因此很可能与删除消息有关。

【问题讨论】:

不应该是split(" ")而不是split("")吗? 该方法可能应该从ListenerAdapter 覆盖onGuildMessageReceived。您的方法名称似乎有误。 【参考方案1】:

channel.deleteMessages(msgs).queue();,如 JDA 文档中所述,“批量删除消息列表。这与在循环中调用 Message.delete() 不同。” JDA 文档没有提到这一点的一件事是,discord 将批量删除仅限于不到 2 周的消息。因此,要删除较旧的消息,您必须将它们一一删除。这是几个月前施加的限制。

文档中说明了我所知道的其他可能的问题,最常见的是不遵守这些问题:

“一次必须至少有 2 条消息,并且不能超过 100 条消息。如果您只有 1 条消息,请改用 Message.delete() 方法。” “您必须拥有此频道的权限 MESSAGE_MANAGE 才能使用此功能。”

【讨论】:

以上是关于Discord Bot 不会删除消息(带有 JDA API 的 Eclipse IDE Java)的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Bot 消息 ID 并编辑消息 - Discord JDA Java

如何修复此 JDA discord bot 错误?

Discord bot 无法使用 JDA 在 java 中发送消息

带有 JDA 的 Maven 阴影插件

带有 discord.py 的 Discordbot 不会使用命令 ctx.channel.purge(*amount*) 删除消息

Java Discord Bot (JDA) 检查是不是固定