Проблема с WebSockets и Discord API

avatar
user16253412
8 августа 2021 в 19:09
128
0
1

В настоящее время я пишу свой собственный небольшой пользовательский клиент Discord для целей тестирования, который просто выводит все входящие сообщения в консоль. Для этой цели я настроил клиент веб-сокета:

final WebSocketClientEndpoint clientEndPoint = new WebSocketClientEndpoint(new URI("wss://gateway.discord.gg/?v=9&encoding=json"), channel, dash);

После настройки веб-сокета я отправляю в Discord соответствующее сообщение аутентификации, которое включает токен Discord. После этого я получаю все входящие сообщения.

Однако это работает только для одной из моих учетных записей Discord. С другим я получаю только CloseReason[1011,Buffer overflow.] обратно. Чтобы предотвратить это, я добавил что-то в конец URL-адреса, как и запросы с веб-сайта Discord:

.
wss://gateway.discord.gg/?v=9&encoding=json&compress=zlib-stream

При этом я также получаю данные с помощью другого токена. Однако это byte[] Теперь я закодировал все следующим образом:

String result = "";
try {
    ByteArrayInputStream bais = new ByteArrayInputStream(message);
    InflaterInputStream iis = new InflaterInputStream(bais);
    byte[] buf = new byte[5];
    int rlen = -1;
    while ((rlen = iis.read(buf)) != -1) {
        result += new String(Arrays.copyOf(buf, rlen));
    }
} catch (IOException ignored) {
    System.out.println(ignored);
}
System.out.println(result);

Однако это работает только для первого сообщения. Ошибка возникает со следующим:

java.util.zip.ZipException: incorrect header check

Кто-нибудь знает, как преобразовать входящее сообщение в строку?

Источник

Ответы (0)