async function checkConversationID(instanceVK, peerID) {
return instanceVK.api.messages
.getConversationsById({
peer_ids: peerID,
})
.then(({ items }) => {
const [data] = items;
return !!data.peer.id;
})
.catch((error) => {
return !error.code === 927;
});
}
async function getLastConversation(instanceVK) {
return new Promise(async (resolve) => {
let maxConversationID = 2147483647;
let minConversationID = 2000000001;
let currentConversationID = maxConversationID;
let status = false;
while (!status) {
if (!(await checkConversationID(instanceVK, currentConversationID))) {
maxConversationID = currentConversationID;
currentConversationID = Math.round(
(currentConversationID + minConversationID) / 2,
);
} else {
if (maxConversationID !== currentConversationID) {
while (!status) {
if (minConversationID + 10 > maxConversationID) {
for (let i = minConversationID; i < maxConversationID; i++) {
if (!(await checkConversationID(instanceVK, i))) {
status = true;
currentConversationID = i - 1;
resolve(currentConversationID);
}
}
}
currentConversationID = Math.round(
(minConversationID + maxConversationID) / 2,
);
if (
!(await checkConversationID(instanceVK, currentConversationID))
) {
maxConversationID = currentConversationID;
currentConversationID = Math.round(
(currentConversationID + minConversationID) / 2,
);
} else {
minConversationID = currentConversationID;
}
}
} else {
status = true;
resolve(currentConversationID);
}
}
}
resolve(currentConversationID);
});
}
Первая функция checkConversationID проверяет существование чата, а вторая функция выполняет подсчёт чатов.
Вторая функция зависит от первой, поэтому лучше не удалять ничего :)
В функцию getLastConversation передаётся один параметр в котором содержится инстанс от vk-io
Пример:
const { VK } = require(`vk-io`);
(async function () {
const vk = new VK({
token:
"token",
});
console.log(await getLastConversation(vk));
})();
Данный код выведет идентификатор последней беседы в боте.