Closed alllexey123 closed 2 years ago
ID сообщения в беседе всегда будет 0. Так устроен VK API.
А есть тогда какие-нибудь способы получить последнее сообщение в беседе, или хотя-бы его ID?
Вы имеете ввиду получить новое сообщение?
@Override
public void onMessageNew(MessageNew messageNew) {
Integer messageId = messageNew.getMessage().getId();
}
Нет, я имею ввиду получить последнее сообщение в беседе без NewMessage, то есть допустим когда бот включается. В теории это должно решить все проблемы. Либо как-то получить ID только что отправленного ботом в беседу сообщения.
Нашел недоработку в методе messages.send
. Теперь вы можете получить conversation_message_id
отправленого ботом сообщения. Для этого нужно использовать параметр peer_ids
вместо peer_id
. Вот пример:
@Override
public void onMessageNew(MessageNew messageNew) {
try {
Send.ResponseBody responseBody = vk.messages.send()
.setMessage("Hello world")
.setPeerIds(messageNew.getMessage().getPeerId())
.execute();
List<?> responses = (List<?>) responseBody.getResponse();
Send.ResponseBody.Response response = (Send.ResponseBody.Response) responses.get(0);
Integer peerId = response.getPeerId();
Integer conversationMessageId = response.getConversationMessageId();
System.out.println(responseBody);
} catch (VkApiException e) {
throw new RuntimeException(e);
}
}
Исправлено в версии 3.4.6
Насколько я знаю, Send.ResponseBody#getResult() должен возвращать ID отправленного сообщения, но в моём случае при отправке сообщения в беседу он всегда возвращает 0, сообщения отправляются успешно. Вот мой код:
Дополнительная информация: