有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Discord JDA Bot无限地发送消息

我试图使用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();
}

共 (2) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

    你可以试试这个

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