Skip to content
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

Ошибка при попытке удалить пользователя из беседы. #42

Closed
T1MOXA opened this issue Dec 3, 2017 · 20 comments

Comments

@T1MOXA
Copy link

T1MOXA commented Dec 3, 2017

VK-IO - 4.0.0-alpha.4
Node - v9.2.0
Хотел отправить 2 одинаковых запроса на удаление участника из 2х бесед.
1 запрос прошел, а на втором поймал ошибку.

You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection:
FetchError: network timeout at: https://api.vk.com/method/messages.removeChatUser?access_token=ТОКЕН&v=5.69
    at Timeout._onTimeout (/home/vk/node_modules/node-fetch/lib/index.js:1272:13)
    at ontimeout (timers.js:478:11)
    at tryOnTimeout (timers.js:302:5)
    at Timer.listOnTimeout (timers.js:262:5)
Caught unhandledRejection: { FetchError: network timeout at: https://api.vk.com/method/messages.removeChatUser?access_token=ТОКЕН&v=5.69
    at Timeout._onTimeout (/home/vk/node_modules/node-fetch/lib/index.js:1272:13)
    at ontimeout (timers.js:478:11)
    at tryOnTimeout (timers.js:302:5)
    at Timer.listOnTimeout (timers.js:262:5)
  message: 'network timeout at: https://api.vk.com/method/messages.removeChatUser?access_token=ТОКЕН&v=5.69',
  type: 'request-timeout',
  stackframes:
   [ { file_name: '/home/vk/node_modules/node-fetch/lib/index.js',
       line_number: 1272 },
     { file_name: 'timers.js', line_number: 478 },
     { file_name: 'timers.js', line_number: 302 },
     { file_name: 'timers.js', line_number: 262 } ] }

@negezor
Copy link
Owner

negezor commented Dec 4, 2017

Можно код и список установленных опций?

@T1MOXA
Copy link
Author

T1MOXA commented Dec 4, 2017

vk.api.messages.getChatUsers({chat_id: iChatID, fields: "online"}).then((chat) => {
	if (chat.indexOf(user.id) > -1) {
		vk.api.messages.removeChatUser({chat_id: iChatID, user_id: user.id}).then(() => {
			return message.send(`@id${user.id} (${user.first_name} ${user.last_name}) ${user.sex == 1 ? "удалена" : "удалён"} из беседы!`);
		});
	} else {
		vk.api.messages.removeChatUser({chat_id: iChatID, user_id: user.id}).then((remove) => {
			if (remove == 1) {
				return message.send(`@id${user.id} (${user.first_name} ${user.last_name}) принудительно ${user.sex == 1 ? "удалена" : "удалён"} из беседы!`);
			} else {
				vk.api.users.get({user_ids: user.id, name_case: 'acc', fields: 'sex'}).then(([user2]) => {
					return message.send(`Не могу удалить @id${user2.id} (${user2.first_name} ${user2.last_name}), так как ${user2.sex == 1 ? "её" : "его"} нет в беседе.`);
				});
			}
		})
	}
});

Возможно проблема в не верной проверке if (chat.indexOf(user.id) > -1)
Так как chat возвращает массив объектов.

@negezor
Copy link
Owner

negezor commented Dec 4, 2017

Может стоит сделать так?

vk.api.messages.removeChatUser({
	chat_id: iChatID,
	user_id: user.id
})
	.catch((error) => {
		if (error.code === 15) {
			return 0;
		}

		throw error;
	})
	.then((removed) => {
		if (removed === 1) {
			return message.send(`@id${user.id} (${user.first_name} ${user.last_name}) ${user.sex === 1 ? 'удалена' : 'удалён'} из беседы!`);
		}

		return message.send(`Не могу удалить @id${user.id} (${user.first_name} ${user.last_name}), так как ${user.sex === 1 ? 'её' : 'его'} нет в беседе.`);
	});

@T1MOXA
Copy link
Author

T1MOXA commented Dec 4, 2017

Я использую vk.api.users.get({user_ids: user.id, name_case: 'acc', fields: 'sex'}).then(([user2]) второй раз так как разные падежи в сообщениях.

@T1MOXA T1MOXA closed this as completed Dec 5, 2017
@T1MOXA
Copy link
Author

T1MOXA commented Dec 6, 2017

Опять непонятные ошибки, уже на ровном месте.

Caught unhandledRejection: { FetchError: network timeout at: https://api.vk.com/method/friends.getRequests?access_token=ТОКЕН&v=5.69
    at Timeout._onTimeout (/home/bots/vk/node_modules/node-fetch/lib/index.js:1272:13)
    at ontimeout (timers.js:478:11)
    at tryOnTimeout (timers.js:302:5)
    at Timer.listOnTimeout (timers.js:262:5)
  message: 'network timeout at: https://api.vk.com/method/friends.getRequests?access_token=ТОКЕН&v=5.69',
  type: 'request-timeout',
  stackframes: 
   [ { file_name: '/home/bots/vk/node_modules/node-fetch/lib/index.js',
       line_number: 1272 },
     { file_name: 'timers.js', line_number: 478 },
     { file_name: 'timers.js', line_number: 302 },
     { file_name: 'timers.js', line_number: 262 } ] }
Caught unhandledRejection: { FetchError: network timeout at: https://api.vk.com/method/friends.getRequests?access_token=ТОКЕН&v=5.69
    at Timeout._onTimeout (/home/bots/vk/node_modules/node-fetch/lib/index.js:1272:13)
    at ontimeout (timers.js:478:11)
    at tryOnTimeout (timers.js:302:5)
    at Timer.listOnTimeout (timers.js:262:5)
  message: 'network timeout at: https://api.vk.com/method/friends.getRequests?access_token=ТОКЕН&v=5.69',
  type: 'request-timeout' }

При этом бот сидит онлайн но не реагирует на сообщения вообще.
Если что friends.getRequests стоит на таймере, каждые 30 секунд проверяется.

@T1MOXA
Copy link
Author

T1MOXA commented Dec 6, 2017

После того как перезагрузил его, проблема пропала.

@T1MOXA
Copy link
Author

T1MOXA commented Dec 6, 2017

Версия VK-IO - 4.0.0-alpha.5

@T1MOXA
Copy link
Author

T1MOXA commented Dec 7, 2017

Опять отвалился бот, сидит в сети, но на сообщения не реагирует.
Я так понимаю отваливается Long Poll

@T1MOXA T1MOXA reopened this Dec 7, 2017
@negezor
Copy link
Owner

negezor commented Dec 7, 2017

DEBUG=vk-io:updates, сначала собрать информацию надо бы.

@ghost
Copy link

ghost commented Dec 7, 2017

Если после перезапуска приложения бот отвечает какое-то время, а потом перестаёт, то, скорее всего, во всем виноват Long Poll, если ты больше нигде не накосячил. Вероятнее всего, ты забыл прикрутить обработку ошибок неудачных запросов, а Long Poll сервер ВК частенько любит отдавать 403, 500-503.

При этом, важно помнить, что node-fetch передаёт все ответы сервера (пусть даже с ошибкой) в then() блок, судя из README:

3xx-5xx responses are NOT network errors, and should be handled in then()

Так что, возможно, ошибка закралась где-нибудь здесь, например.

Я могу сильно ошибаться, т.к. код библиотеки не изучал особо, но у меня самой частой проблемой с "игнором" ботов была именно нестабильная работа Long Poll, так что все ошибки нужно обрабатывать и реконнектиться к серверу при их возникновении.

P. S. И ещё, лучшим вариантом будет постараться "упаковать" эти последовательные запросы в твоём коде users.get → messages.getChatUsers → messages.removeChatUser → message.send → users.get? в один execute-запрос. Так будет эффективнее с точки зрения экономии запросов, ибо есть известное ограничение в 3 запроса в секунду.

@T1MOXA
Copy link
Author

T1MOXA commented Dec 7, 2017

Проблема появилась после обновления библиотеки с 3 на 4 версию.
До этого проблем не было.

@T1MOXA
Copy link
Author

T1MOXA commented Dec 8, 2017

2017-12-08T08:27:13.947Z vk-io:updates http -->
2017-12-08T08:27:13.947Z vk-io:updates http <--
2017-12-08T08:27:13.947Z vk-io:updates longpoll update [ 9, -286131                      123, 1, 1512721234 ]
2017-12-08T08:27:13.947Z vk-io:updates http -->
2017-12-08T08:27:13.948Z vk-io:updates http <--
2017-12-08T08:27:13.948Z vk-io:updates longpoll update [ 9, -286131                      123, 1, 1512721234 ]
2017-12-08T08:27:13.948Z vk-io:updates http -->
2017-12-08T08:27:13.948Z vk-io:updates http <--
2017-12-08T08:27:13.948Z vk-io:updates longpoll update [ 9, -286131                      123, 1, 1512721234 ]
2017-12-08T08:27:13.949Z vk-io:updates http -->
2017-12-08T08:27:13.949Z vk-io:updates http <--
2017-12-08T08:27:13.949Z vk-io:updates longpoll update [ 9, -286131                      123, 1, 1512721234 ]
2017-12-08T08:27:13.949Z vk-io:updates http -->
2017-12-08T08:27:13.947Z vk-io:updates http -->
2017-12-08T08:27:13.947Z vk-io:updates http <--
2017-12-08T08:27:13.947Z vk-io:updates longpoll update [ 9, -286131                      123, 1, 1512721234 ]
2017-12-08T08:27:13.947Z vk-io:updates http -->
2017-12-08T08:27:13.948Z vk-io:updates http <--
2017-12-08T08:27:13.948Z vk-io:updates longpoll update [ 9, -286131                      123, 1, 1512721234 ]
2017-12-08T08:27:13.948Z vk-io:updates http -->
2017-12-08T08:27:13.948Z vk-io:updates http <--
2017-12-08T08:27:13.948Z vk-io:updates longpoll update [ 9, -286131                      123, 1, 1512721234 ]
2017-12-08T08:27:13.949Z vk-io:updates http -->
2017-12-08T08:27:13.949Z vk-io:updates http <--
2017-12-08T08:27:13.949Z vk-io:updates longpoll update [ 9, -286131                      123, 1, 1512721234 ]
2017-12-08T08:27:13.949Z vk-io:updates http -->

Дальше бот просто заглох и снова стал игнорить все сообщения.

@negezor
Copy link
Owner

negezor commented Dec 8, 2017

Я залил обновление, попробуй с ним.

@T1MOXA
Copy link
Author

T1MOXA commented Dec 8, 2017

А сейчас другая ситуация, написал сообщение и в логах бота появились сообщения, но на команду он так и не отреагировал.

2017-12-08T14:44:02.580Z vk-io:updates http -->
2017-12-08T14:44:02.581Z vk-io:updates http <--
2017-12-08T14:44:02.581Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.581Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.581Z vk-io:updates http -->
2017-12-08T14:44:02.581Z vk-io:updates http <--
2017-12-08T14:44:02.581Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.581Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.581Z vk-io:updates http -->
2017-12-08T14:44:02.582Z vk-io:updates http <--
2017-12-08T14:44:02.582Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.582Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.582Z vk-io:updates http -->
2017-12-08T14:44:02.582Z vk-io:updates http <--
2017-12-08T14:44:02.582Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.583Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.583Z vk-io:updates http -->
2017-12-08T14:44:02.583Z vk-io:updates http <--
2017-12-08T14:44:02.583Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.583Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.583Z vk-io:updates http -->
2017-12-08T14:44:02.584Z vk-io:updates http <--
2017-12-08T14:44:02.584Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.584Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.584Z vk-io:updates http -->
2017-12-08T14:44:02.584Z vk-io:updates http <--
2017-12-08T14:44:02.584Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.584Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.584Z vk-io:updates http -->
2017-12-08T14:44:02.585Z vk-io:updates http <--
2017-12-08T14:44:02.585Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.585Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.585Z vk-io:updates http -->
2017-12-08T14:44:02.585Z vk-io:updates http <--
2017-12-08T14:44:02.585Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.585Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.585Z vk-io:updates http -->
2017-12-08T14:44:02.586Z vk-io:updates http <--
2017-12-08T14:44:02.586Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.586Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.586Z vk-io:updates http -->
2017-12-08T14:44:02.586Z vk-io:updates http <--
2017-12-08T14:44:02.586Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.586Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.587Z vk-io:updates http -->
2017-12-08T14:44:02.587Z vk-io:updates http <--
2017-12-08T14:44:02.587Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.587Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.587Z vk-io:updates http -->
2017-12-08T14:44:02.588Z vk-io:updates http <--
2017-12-08T14:44:02.588Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.588Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.588Z vk-io:updates http -->
2017-12-08T14:44:02.588Z vk-io:updates http <--
2017-12-08T14:44:02.588Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.588Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.588Z vk-io:updates http -->
2017-12-08T14:44:02.589Z vk-io:updates http <--
2017-12-08T14:44:02.589Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.589Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.589Z vk-io:updates http -->
2017-12-08T14:44:02.589Z vk-io:updates http <--
2017-12-08T14:44:02.589Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.589Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.589Z vk-io:updates http -->
2017-12-08T14:44:02.590Z vk-io:updates http <--
2017-12-08T14:44:02.590Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.590Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.590Z vk-io:updates http -->
2017-12-08T14:44:02.590Z vk-io:updates http <--
2017-12-08T14:44:02.590Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.590Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.590Z vk-io:updates http -->
2017-12-08T14:44:02.591Z vk-io:updates http <--
2017-12-08T14:44:02.591Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.591Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.591Z vk-io:updates http -->
2017-12-08T14:44:02.591Z vk-io:updates http <--
2017-12-08T14:44:02.591Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.591Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.591Z vk-io:updates http -->
2017-12-08T14:44:02.592Z vk-io:updates http <--
2017-12-08T14:44:02.592Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.592Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.592Z vk-io:updates http -->
2017-12-08T14:44:02.592Z vk-io:updates http <--
2017-12-08T14:44:02.592Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.592Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.592Z vk-io:updates http -->
2017-12-08T14:44:02.593Z vk-io:updates http <--
2017-12-08T14:44:02.593Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.593Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.593Z vk-io:updates http -->
2017-12-08T14:44:02.593Z vk-io:updates http <--
2017-12-08T14:44:02.593Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.593Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]
2017-12-08T14:44:02.593Z vk-io:updates http -->
2017-12-08T14:44:02.594Z vk-io:updates http <--
2017-12-08T14:44:02.594Z vk-io:updates longpoll update [ 7, 2000000004, 84955 ]
2017-12-08T14:44:02.594Z vk-io:updates longpoll update [ 4,
  84959,
  532497,
  2000000004,
  1512744139,
  '/ping',
  { from: '46199828' } ]

@negezor
Copy link
Owner

negezor commented Dec 8, 2017

А сам код?

@T1MOXA
Copy link
Author

T1MOXA commented Dec 11, 2017

vk.auth.implicitFlowUser().run().then((response) => {
	vk.setToken(response.token);
	vk.updates.startPolling();
});

vk.updates.on('message', (message, next) => {
	if (!message.text || message.from.id != 2000000004 && message.from.id != ***) return;
	let command = message.text.split(" ")[0].slice(1).toLowerCase()
	if (command === 'ping') {
		vk.api.users.get({user_ids: message.payload.user_id}).then(([user]) => {
			message.send(`Pong!\n@id${message.payload.user_id} (${user.first_name}) 😉`);
		});
	}
});

Извините за долгий ответ :)

@negezor
Copy link
Owner

negezor commented Dec 12, 2017

Сразу скажу что не стоит напрямую обращаться к контекстным свойствам. Потому что для разных типов получения данных они могут отличаться, а так же не нужно каждый раз заново авторизоваться не стоит если не хочется получить бан IP от ВК ну или просто капчу.
Так же можно следовать простому боту

По коду скажу что он рабочий, проблема видимо просто в прямом обращении к from.id. Если нужно проверить ID чата то можно воспользоваться context.getChatId() !== 4 && context.getUserId() !== ***

@T1MOXA
Copy link
Author

T1MOXA commented Dec 12, 2017

не нужно каждый раз заново авторизоваться

Не подскажете где у меня ошибка с авторизацией ?
И как правильно сделать.

@negezor
Copy link
Owner

negezor commented Dec 13, 2017

Стоит после авторизации сохранить токен и использовать его из конфига.

@negezor negezor closed this as completed Dec 17, 2017
@negezor
Copy link
Owner

negezor commented Dec 17, 2017

Проблема с polling связана c #43

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants