Задать вопрос
@PegasusPega

Как подсчитать беседы, в которых присутствует именно та группа, которая их подсчитывает?

Как подсчитать беседы, в которых находится группа вк, которая их подсчитывает?
  • Вопрос задан
  • 145 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 1
rus_anonym
@rus_anonym
Голодный студент :с
ВК не позволяет получить список бесед в которых присутствует группа за исключением тех бесед, которые создала сама группа, однако Вы можете получить общее количество бесед при помощи этих 2 способов
1 способ

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));
})();


Данный код выведет идентификатор последней беседы в боте.


2 способ (более короткий)

Вы можете использовать мой модуль для сокращения кода
Пример:
const { VK } = require(`vk-io`);
const utils = require(`rus-anonym-utils`);
(async function () {
	const vk = new VK({
		token:
			"token",
	});
	console.log(await utils.vk.group.getLastConversation(vk));
})();

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Saraman
@Saraman
Чем не использовать https://vk.com/dev/messages.getConversations от токена группы?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы