Telegram Bot - NodeJs - 任务处于循环中

时间:2018-05-14 14:47:16

标签: node.js telegram telegram-bot

有时;我的电报机器人开始在循环中多次重复相同的任务。

有时;它重复任务500次! 这非常烦人。

我无法复制的背景:

  • 用户只发送一次命令(点击一个按钮)
  • 触发了我的事件监听器(<div class="product-thumb"> <a href="images/product-image7.jpg" class="image-popup" title="screenprinting"> <img src="images/product-image7.jpg" class="img-responsive" alt=""> <div class="product-info"> <div class="product-item"> <h3>PRODUCT1</h3> <p>Size / Size / Size</p> </div> <div class="product-price"> <span>P50</span> </div> </div> </a> </div> bot.on("callback_query");
  • 执行行动
  • 然后......再次开始!!!再次......再次......

主要是发生在:

bot.on('message')

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

你们经历过这种问题吗?   你是如何处理这类问题的?

4 个答案:

答案 0 :(得分:1)

  

bot.on(&#39; message&#39;,function(event){

the message can be of any type,例如,文字,新聊天会员等。

您可能正在寻找某种类型的消息,例如文本音频等,

在这种情况下,你可以使用onText()来获取消息,或者在里面添加对消息类型的检查(&#39; message&#39;)

答案 1 :(得分:1)

我的问题似乎与Firebase集成有关。 随着我的数据库更新;它似乎在我的电报机器人上实时生成一个触发器。

这真的很奇怪......还不知道如何解决它;但到目前为止;这是我的问题。

答案 2 :(得分:1)

您需要检查callbackQueryevent参数,并查找更改,如果您在回调中收到任何数据或数据。 如果旧数据与新数据不同,则执行其余代码,否则不执行。

答案 3 :(得分:0)

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将确保您的所有写入都是一次性的,并且只会在侦听器事件上触发一次

  

第二种方法是跟踪lastUpdated时间戳

让我们想象一下第二个结构

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

您将on Listener放在lastUpdatedTs上,并在更新y对象内部重要内容时使用multiwrite更新它。每当lastUpdatedTs发生更改时,您都会继续在y上执行firebase提取。这使您能够更好地节流,并且不会让数据上的监听器上的firebase在您的代码中变得流氓。