【问题标题】:Discord JDA Bot sending messages infinitelyDiscord JDA Bot 无限发送消息
【发布时间】:2021-07-06 03:17:50
【问题描述】:

我正在尝试使用 Discord JDA API 发送消息,但是每当我发送消息时,它都会无限发送。

JDA 版本:4.2.1_255

我的尝试:

研究问题 使用 GuildMessageReceivedEvent 而不是 MessageReceivedEvent

伪代码:

Guild server = e.getGuild();
    Role role = server.getRolesByName("Java", false).get(0);
    System.out.println(role);
    for(Member members : server.getMembers()) {
        if(members.getRoles().contains(role)) {
            sendPrivateMessage(members.getUser(), "Hello <@!" + members.getId() + ">"); // Sends infinitely
        }
    }

sendPrivateMessage():

public void sendPrivateMessage(User user, String content) {
    user.openPrivateChannel()
            .flatMap(channel -> channel.sendMessage(content))
            .queue();
}

【问题讨论】:

  • 代码对我来说很好,我们可以看看函数sendPrivateMessage(user, message)吗?
  • public void sendPrivateMessage(User user, String content) { user.openPrivateChannel() .flatMap(channel -&gt; channel.sendMessage(content)) .queue(); }
  • 所以如果我是正确的,代码在函数MessageReceivedEvent()?如果是这样,这意味着每当您的机器人所在的 gulild 中有 any 消息时,无论是哪个文本频道,它都会向每个具有特定角色的人发送 DM。这是你想要的吗?另外:请考虑编辑您的帖子并将函数sendPrivateMessage(user, message) 的代码放在那里,这样会更容易阅读。
  • 您可以使用members.getAsMention() 而不是&lt;@!" + members.getId() + "&gt;",让JDA 为您处理。因此,即使将来发生变化,您也不必担心。

标签: java discord-jda


【解决方案1】:

你可以试试这个

public void sendPrivateMessage(User user, String content) {
    if (user.isBot()) return;

    user.openPrivateChannel()
        .flatMap(channel -> channel.sendMessage(content))
        .queue();
}

【讨论】:

    【解决方案2】:

    如果此代码在 MessageReceivedEvent 中执行,您可以尝试添加

    if(event.getAuthor().isBot()){
    return;
    }
    

    如果您还没有回复,它不会自行回复。 (如果你想让它回复其他机器人,你也可以使用 JDA,获取 selfUser 并检查此事件是否自行执行) 如果不是这样,也许你可以告诉我们更多关于它何时被执行的信息。

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 2021-09-10
      • 2021-03-02
      • 2023-01-12
      • 2022-11-23
      • 2020-05-11
      • 2022-11-16
      • 2020-11-15
      • 2020-12-01
      相关资源
      最近更新 更多