JDA将通知发送到私人渠道

时间:2019-04-19 11:47:40

标签: java discord discord-jda

我希望能够向群组中所有用户的私人频道发送通知 这是我的代码

public static void main(String[] args) throws LoginException {

        final JDA bot =
                new JDABuilder(AccountType.BOT)
                        .setToken("secret")
                        .addEventListener(new DemoApplication())
                        .build();

    }

    @Override
    public void onPrivateMessageReceived(final PrivateMessageReceivedEvent event) {
        if (event.getAuthor().isBot()) {
            return;
        }
         event.getJDA().getGuilds().get(0).getMembers().forEach(user->user.getUser().openPrivateChannel().queue());
        event.getJDA().getPrivateChannels().forEach(privateChannel -> privateChannel.sendMessage("ZDAROVA").queue());
    }

但是只有此私人消息的发送者会收到一条消息。我错过了什么 ? 我使用版本 3.8.3_462

的JDA

1 个答案:

答案 0 :(得分:2)

您的代码利用了异步操作。异步任务是在另一个线程上启动的任务,有可能在以后的某个时间发生。

Discord具有速率限制,操作客户端必须遵守这些限制。由于这个原因以及HTTP请求花费一些时间的原因,这些请求在后台发生。您正在使用的称为queue()的方法只是将请求放在工作线程耗尽的队列中。

openPrivateChannel()返回RestAction<PrivateChannel>,这意味着它将接收一个私有通道实例作为响应。可以使用queue(Consumer<PrivateChannel> callback)的回调参数与该响应进行交互。

static void sendMessage(User user, String content) {
    user.openPrivateChannel().queue(channel -> { // this is a lambda expression
        // the channel is the successful response
        channel.sendMessage(content).queue();
    });
}

guild.getMembers().stream()
    .map(Member::getUser)
    .forEach(user -> sendMessage(user, "ZDAROVA"));

JDA WikiDocumentation中提供了有关RestAction的更多信息。