negezor / vk-io

Modern VK API SDK for Node.js
https://npm.im/vk-io
MIT License
549 stars 85 forks source link

Похоже что context.hasText() работает некорректно. #48

Closed T1MOXA closed 6 years ago

T1MOXA commented 6 years ago

Node - v9.2.0 VK-IO - 4.0.0-alpha.8

Сама проверка:

if (!message.hasText() && message.isOutbox() && message.text[0] !== '/' && message.getChatId() != 4) return next();
let command = message.text.split(" ")[0].slice(1).toLowerCase()

(Ошибка указывает на последнюю строку)

Handle polling update error: TypeError: Cannot read property 'split' of null
at vk.updates.on (/home/bots/vk/vk.js:198:29)
at Array.use (/home/bots/vk/node_modules/vk-io/lib/updates/index.js:136:15)
at next (/home/bots/vk/node_modules/middleware-io/lib/middleware.js:80:22)
at stack.(anonymous function) (/home/bots/vk/node_modules/middleware-io/lib/middleware.js:80:34)
at Array.use (/home/bots/vk/node_modules/vk-io/lib/updates/index.js:140:13)
at next (/home/bots/vk/node_modules/middleware-io/lib/middleware.js:80:22)
at Middleware.run (/home/bots/vk/node_modules/middleware-io/lib/middleware.js:87:10)
at Updates.dispatchMiddleware (/home/bots/vk/node_modules/vk-io/lib/updates/index.js:678:28)
at Updates.handlePollingUpdate (/home/bots/vk/node_modules/vk-io/lib/updates/index.js:213:23)
at Promise.all.response.updates.map (/home/bots/vk/node_modules/vk-io/lib/updates/index.js:660:22)
negezor commented 6 years ago
if (message.isOutbox() || message.getChatId() !== 4 || !message.hasText() || message.getText()[0] !== '/') {
  await next();
}
negezor commented 6 years ago

По хорошему на проверки isOutbox вынести отдельно если не нужны исходящие сообщения.

if (message.isOutbox()) {
  return;
}
T1MOXA commented 6 years ago

Теперь ошибок 2.

Handle polling update error: Error: next() called multiple times
at next (/home/bots/vk/node_modules/middleware-io/lib/middleware.js:69:11)
at stack.(anonymous function) (/home/bots/vk/node_modules/middleware-io/lib/middleware.js:80:34)
at vk.updates.on (/home/bots/vk/vk.js:376:15)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)

Handle polling update error: TypeError: Cannot read property 'split' of null
at vk.updates.on (/home/bots/vk/vk.js:200:33)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)
negezor commented 6 years ago

Как в целом выглядит код?

T1MOXA commented 6 years ago

Вы про 376 строку ? Перед ней куча проверок на совпадение различного текста и на 376 строке стоит else await next(); Т.Е. Если не найдется ни одного совпадения делать await next()

negezor commented 6 years ago
  1. Ошибка указывает на то что next() вызывается несколько раз.
  2. Попытка обратится к split от null. Думаю логично что это из-за того что нет текста.
T1MOXA commented 6 years ago

Ок, с первым думаю разберусь, а со второй ошибкой что делать ? Почему в message.getText() я получаю null ?

negezor commented 6 years ago

Потому что текст отсутствует.

T1MOXA commented 6 years ago

А разве функция context.hasText() не должна это проверять ?

negezor commented 6 years ago

Метод hasText() вернёт true если текст есть, а иначе false. Как я уже сказал проблема в череде проверок.

T1MOXA commented 6 years ago

Ну последовательность проверок я взял вашу, и на ней и была проблема.

if (message.isOutbox() || message.getChatId() !== 4 || !message.hasText() || message.getText()[0] !== '/') {
  await next();
}
negezor commented 6 years ago

Я не могу видеть всей картины с таким кодом. Ошибка есть потому что условия неправильно расставлены или полное непонимание как работают Promise middleware.

T1MOXA commented 6 years ago

Переделал структуру кода на более правильную с моей точки зрения, посмотрим может ошибка была как раз из за кривой структуры.

T1MOXA commented 6 years ago

Еще заметил что куда-то пропала инфа о прокси. Вы убрали их поддержку ?

negezor commented 6 years ago

Поддержка осталась, только теперь нужно использовать https агенты для проксирования.

T1MOXA commented 6 years ago

Где можно найти информацию о том как это использовать? И еще... Похоже в ваших доках нет списка всех эвентов которые можно слушать. Было бы не плохо если бы вы это добавили )

negezor commented 6 years ago

Ну вообще достаточно загуглить https proxy agent, думаю позже сделаю.

Нету времени почти совсем на создание документации, но думаю как нибудь получится.

T1MOXA commented 6 years ago

Снова появилась нужда в использовании прокси... Можете показать пример их использования с вашей библиотекой?

negezor commented 6 years ago

Нужно передать имплементацию agent в опции. Для этого может подойти модуль https-proxy-agent.

T1MOXA commented 6 years ago

В какие опции ?

negezor commented 6 years ago

vk.setOptions({ agent });

T1MOXA commented 6 years ago

Спасибо