JDA отправляет уведомления на частные каналы - PullRequest
1 голос
/ 19 апреля 2019

Я хочу иметь возможность отправлять уведомления на частные каналы всех пользователей в моей группе. Это мой код

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());
}

Но сообщение получает только отправитель этого личного сообщения.Что я упустил ?Я использую JDA с версией 3.8.3_462

1 Ответ

2 голосов
/ 19 апреля 2019

Ваш код использует асинхронные операции. Асинхронная задача - это та, которая запускается в другом потоке и, возможно, выполняется позже.

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"));

Дополнительную информацию о RestAction можно найти в документации JDA Wiki и .

...