В настоящее время я пишу свой собственный небольшой пользовательский клиент 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
Кто-нибудь знает, как преобразовать входящее сообщение в строку?