Ответы пользователя по тегу API
  • Нужно событие на вступление в беседу -?

    rus_anonym
    @rus_anonym
    Голодный студент :с
    chat_invite_user
    Ответ написан
    Комментировать
  • Как сделать так, чтобы когда я делал рассылку, то сообщение рассылки отправлялось всем людям, которые когда нибудь писали в группу?

    rus_anonym
    @rus_anonym
    Голодный студент :с
    const { VK, createCollectIterator, getRandomId } = require(`vk-io`);
    
    const vk = new VK({
    	token: "",
    });
    
    (async function () {
    	const iterator = createCollectIterator({
    		api: vk.api,
    		method: "messages.getConversations",
    		params: {},
    		countPerRequest: 200,
    	});
    
    	for await (const chunk of iterator) {
    		for (let element of chunk.items) {
    			if (element.conversation.peer.type === `user`) {
    				// Send message
    				/*
    				vk.api.messages.send({
    					message: "Test",
    					peer_id: element.conversation.peer.id,
    					random_id: getRandomId(),
                    });
                    */
    			}
    		}
    	}
    })();


    Чтобы получить список всех людей, которые когда-либо писали группе, можно воспользоваться методом messages.getConversations.
    После этого мы его фильтруем для получения только людей, поскольку данный метод также возвращает беседы созданные группой, и отправляем рассылку этим аккаунтам в закомментированном блоке.
    Ответ написан
    Комментировать
  • Как подсчитать беседы, в которых присутствует именно та группа, которая их подсчитывает?

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

    Ответ написан
    Комментировать
  • Как вывести ID админов беседы ВК?

    rus_anonym
    @rus_anonym
    Голодный студент :с
    Исходя из документации метода который Вы вызываете в res.items возвращается: 5f6846234f065151179683.jpeg
    Ответ написан
    Комментировать
  • Как получить список айди бесед в которых состоит сообщество?

    rus_anonym
    @rus_anonym
    Голодный студент :с
    API ВК не возвращает список бесед в которых состоит сообщество.

    Возвращаются только личные сообщения, и беседы созданные группой.

    Так что никак ¯\_(ツ)_/¯
    Ответ написан
    Комментировать