-
Notifications
You must be signed in to change notification settings - Fork 155
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Is it OK? #246
Comments
Чтобы увидеть что приходит от сервера можно поставить точку останова на строке 191 класса EventsHandler и в дебаггере посмотреть что объект message содержит валидный json, где в поле body можно увидеть сообщение, отправленное группе. |
Хорошо. Я ПОЛНОСТЬЮ осознал всё; и позже напишу с чем ошибки связаны (их две разные, на разных сторонах, и они не компенсируют друг друга). И сегодня могу отправить код, показать как исправил, что переделал так, что всё должно работать как часы. Но даст ли ВК какую-нибудь премию за это? (если да, то чем). В случае, если код окажется подходящим. |
Нет, не совсем так...
Вызов somefun (new E (E.C2)) приведёт к выводу "Unexpected", а вот при somefun(null) будет NullPointerException и "вылет". Т.е. нужно как-то так
Основываясь на таком наследовании (как MessageNew от Base, отображая event типа "message_new") написал код. и загрузил сюда. Правда, там еще есть небольшие изменения "под себя" (например run это исполнение в текущем потоке, runThread -- в новом), но основные изменения описаны выше. С сообщениями работает отлично. Потом придётся видимо в "старом" стиле поправить, т.е. когда для каждого названия-типа события определён через перечисление тип object'а у его класса, например MessageObject у "message_new"; только нужно аккуратно сверять соответствие по схеме, названия не одноимённые; а классы Base, MessageNew, MessageEdit и т.д. вообще тогда удалить что-бы не смущали. |
Небольшой временный фикс этой проблемы, который я использую: static class MyLongPollHandler extends GroupLongPollApi {
protected LongPollHandler(VkApiClient client, GroupActor actor, int waitTime) {
super(client, actor, waitTime);
}
public void messageNewFix(Integer groupId, MessageFix messagefix) {
var message = messagefix.getMessage();
// Ваш код
}
private static class MessageFix {
@SerializedName("message")
private Message message;
public Message getMessage() {
return message;
}
}
@Override
protected String parse(CallbackMessage message) {
if (message.getType() == Events.MESSAGE_NEW) {
messageFixNew(message.getGroupId(), gson.fromJson(message.getObject(), MessageFix.class));
return "OK";
}
return super.parse(message);
}
} Он немного уродливый, конечно, но дело выполняет, так что, быть может, кому-то понадобится, пока не починят. |
Пример отличный! Только падает с NPE, когда приходит событие "typing" и т.п., так как в SDK в принципе нет поддержки таких событий. Лечится очень просто - в методе Можно также использовать ...
public void messageObjectNew(Integer groupId, MessageObject messageObject) {
var message = messageObject.getMessage();
// ...
}
@Override
protected String parse(CallbackMessage message) {
if (message.getType() == null) {
return "OK";
}
if (message.getType() == Events.MESSAGE_NEW) {
messageObjectNew(
message.getGroupId(), gson.fromJson(message.getObject(), MessageObject.class));
return "OK";
}
return super.parse(message);
}
... Спасибо авторам за фиксы!
|
Вариант временного фикса на Kotlin data class MessageWrapper(
val message: Message
)
/* Workaround for empty object being passed to messageNew */
override fun parse(message: CallbackMessage): String {
if (message.type != Events.MESSAGE_NEW) {
return super.parse(message)
}
val (chatMessage) = gson.fromJson(
message.getObject(),
MessageWrapper::class.java
)
messageNew(message.groupId, chatMessage)
return "OK"
} Халатность разрабов ВК меня просто поражает |
Я думаю, проблема не в халатности, а в том, что проект заброшен |
Почему тогда репозиторий не переведён в статус архива? |
А ты лучше не подкидывай такие идеи, так может хоть вспомнят о нем в один день ;^) |
Может быть и так, однако библиотека обновилась 13 дней назад в централе |
Добраться до LongPoll'а не успели, рассчитываю что до нового года успеем с подарком починки. |
Молю добавьте уже тип "реакция" или проверку на null, ну шо мы тут костылями машем 😢 |
Запускается. Если написать самой группе, то выводит null, если зайти в диалог с группой и начать печатать сообщения для отправки, то ошибка NullPointerException. Если написать сообщение в беседе, куда добавлена группа (как бот), то нет никакой реакции. Это вообще нормально? Зачем выкладывать такой SDK, что код выше не работает?
П.С. Пробовал переделать так, что сервер LongPoll получается по запросу "client.messages().getLongPollServer(actor)" (т.е. запрос не groups.getLongPollServer, а messages.getLongPollServer; если первое только для событий самой группы, а не тех бесед, куда её добавили как бота), тоже ниего неработает, но это другой вопрос конечно
The text was updated successfully, but these errors were encountered: