Telegram Bot - NodeJs - Задачи в цикле - PullRequest
0 голосов
/ 14 мая 2018

Иногда; мои боты-телеграммы начинают повторять одни и те же задачи несколько раз в цикле.

Иногда; это повторяет задачи 500 раз !!! Это очень раздражает.

Контекст, который я не могу воспроизвести:

  • Пользователь отправляет команду только один раз (нажимает на одну кнопку)
  • мой прослушиватель событий запущен (bot.on("callback_query" или bot.on('message'));
  • Действие выполнено
  • а потом ... начинается снова !!! и снова ... и снова ..

В основном это происходит:

bot.on("callback_query", function(callbackQuery) {

и

bot.on('message', function(event) {

Ребята, у вас были такие проблемы?
Как вы справляетесь с такими проблемами?

Ответы [ 4 ]

0 голосов
/ 25 мая 2018
bot.on("callback_query", function(callbackQuery) {

угадал по твоему ответу

Моя проблема, похоже, связана с интеграцией Firebase. Как моя база данных обновляется;

Файловая библиотека firebase nodejs работает в режиме реального времени, и прослушиватель on активирует любое значение, которое изменяется в дереве пути, на который вы подписаны. В этом случае, чтобы минимизировать триггерные точки, я бы рекомендовал следующее:

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

// a.firebaseio.com/x -> some firebase path on which you have on listener
y: {
    key1: value1,
    key2: value2,
    .
    .
    key200: value200
}

Здесь, в зависимости от того, какие значения изменятся, будет активирован ваш прослушиватель. Теперь я полагаю, что вы по своей сути заинтересованы только в изменении некоторых значений (скажем, значения 1 и значения 2)

Один из способов справиться с этим - написать несколько букв

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

Второй подход заключается в отслеживании последней обновленной отметки времени

Давайте представим вторую структуру

// a.firebaseio.com/x -> some firebase path on which you have on listener
y: {
    key1: value1,
    key2: value2,
    .
    .
    key200: value200
},
lastUpdatedTs: <epochTs>

Вы помещаете свой прослушиватель в lastUpdatedTs и обновляете его, используя multiwrite, всякий раз, когда обновляете что-то важное внутри объекта y. Всякий раз, когда lastUpdatedTs изменяется, вы идете вперед и делаете выборку из базы данных для y. Это позволяет вам намного лучше управлять газом и не допустить, чтобы в вашем коде использовалась база данных для прослушивания.

0 голосов
/ 23 мая 2018

Моя проблема, похоже, связана с интеграцией Firebase.Как моя база данных обновляется;похоже, он генерирует триггер на моем боте-телеграмме в режиме реального времени.

Это действительно странно ... пока не знаю, как его решить;Но так далеко;это моя проблема.

0 голосов
/ 25 мая 2018

Вам необходимо проверить параметры callbackQuery и event и найти изменения, если таковые имеются, или данные, которые вы получаете в обратных вызовах. Если старые данные отличаются от новых, выполните остальную часть кода, иначе нет.

0 голосов
/ 23 мая 2018

bot.on ('message', function (event) {

the message can be of any type, например, текст, новый участник чата и т. Д.

Возможно, вы ищете сообщения определенного типа, например текстовое аудио и т. Д.,

в этом случае вы можете использовать onText (), чтобы получать только сообщения, или добавить проверку на тип сообщения внутри ('message')

...