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

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

Closed
T1MOXA opened this issue Jan 12, 2018 · 22 comments
Closed

Comments

@T1MOXA
Copy link

T1MOXA commented Jan 12, 2018

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
Copy link
Owner

negezor commented Jan 12, 2018

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

@negezor
Copy link
Owner

negezor commented Jan 12, 2018

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

if (message.isOutbox()) {
  return;
}

@T1MOXA
Copy link
Author

T1MOXA commented Jan 12, 2018

Теперь ошибок 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
Copy link
Owner

negezor commented Jan 13, 2018

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

@T1MOXA
Copy link
Author

T1MOXA commented Jan 13, 2018

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

@negezor
Copy link
Owner

negezor commented Jan 13, 2018

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

@T1MOXA
Copy link
Author

T1MOXA commented Jan 13, 2018

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

@negezor
Copy link
Owner

negezor commented Jan 13, 2018

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

@T1MOXA
Copy link
Author

T1MOXA commented Jan 13, 2018

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

@negezor
Copy link
Owner

negezor commented Jan 14, 2018

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

@T1MOXA
Copy link
Author

T1MOXA commented Jan 14, 2018

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

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

@negezor
Copy link
Owner

negezor commented Jan 14, 2018

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

@T1MOXA
Copy link
Author

T1MOXA commented Jan 14, 2018

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

@T1MOXA
Copy link
Author

T1MOXA commented Jan 15, 2018

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

@negezor
Copy link
Owner

negezor commented Jan 15, 2018

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

@T1MOXA
Copy link
Author

T1MOXA commented Jan 15, 2018

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

@negezor
Copy link
Owner

negezor commented Jan 16, 2018

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

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

@negezor negezor closed this as completed Jan 17, 2018
@T1MOXA
Copy link
Author

T1MOXA commented Jul 16, 2018

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

@negezor
Copy link
Owner

negezor commented Jul 16, 2018

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

@T1MOXA
Copy link
Author

T1MOXA commented Jul 16, 2018

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

@negezor
Copy link
Owner

negezor commented Jul 16, 2018

vk.setOptions({ agent });

@T1MOXA
Copy link
Author

T1MOXA commented Jul 16, 2018

Спасибо

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