Telegram Bot - NodeJs - 任务在循环中
Telegram Bot - NodeJs - Tasks are on a loop
有时候;我的电报机器人开始循环多次重复相同的任务。
有时;它重复任务 500 次!!!
这很烦人。
我无法复制的上下文:
- 用户只发送一次命令(点击一个按钮)
- 我的事件侦听器被触发(
bot.on("callback_query"
或 bot.on('message')
);
- 动作被执行
- 然后……又开始了!!!又...又...
主要发生在 :
bot.on("callback_query", function(callbackQuery) {
以后
bot.on('message', function(event) {
Do you guys have experienced this kind of issue ?
How do you manage that kind of issues ?
bot.on('message', function(event) {
the message can be of any type
,例如,文本、新聊天成员等。
您可能正在寻找某种类型的消息,例如文本音频等,
在这种情况下,您可以使用 onText() 仅获取消息,或者在 on('message')
中添加对消息类型的检查
我的问题似乎与 Firebase 集成有关。
随着我的数据库更新;它似乎在我的电报机器人上实时生成触发器。
这真的很奇怪....还不知道如何解决;但到目前为止;这是我的问题。
您需要检查 callbackQuery
和 event
参数并查找更改(如果有)或您在回调中收到的数据。
如果旧数据与新数据不同,则执行其余代码,否则不执行。
bot.on("callback_query", function(callbackQuery) {
根据你的答案来猜
MY issue seems to be linked to Firebase integration. As my database is updated;
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)
One way to handle is to do multiwrite
Multiwrite 将确保您的所有写入都同时进行,并且只会触发一个侦听器事件
Second approach is to keep track of lastUpdated timestamp
让我们想象第二个结构
// a.firebaseio.com/x -> some firebase path on which you have on listener
y: {
key1: value1,
key2: value2,
.
.
key200: value200
},
lastUpdatedTs: <epochTs>
You put your on listener on lastUpdatedTs and update it using multiwrite whenever you are updating something important inside y object. Whenever lastUpdatedTs changes, you go ahead and do a firebase fetch on y. This enables you to throttle much better and not let firebase on listener on the data go rogue inside your code.
有时候;我的电报机器人开始循环多次重复相同的任务。
有时;它重复任务 500 次!!! 这很烦人。
我无法复制的上下文:
- 用户只发送一次命令(点击一个按钮)
- 我的事件侦听器被触发(
bot.on("callback_query"
或bot.on('message')
); - 动作被执行
- 然后……又开始了!!!又...又...
主要发生在 :
bot.on("callback_query", function(callbackQuery) {
以后
bot.on('message', function(event) {
Do you guys have experienced this kind of issue ?
How do you manage that kind of issues ?
bot.on('message', function(event) {
the message can be of any type
,例如,文本、新聊天成员等。
您可能正在寻找某种类型的消息,例如文本音频等,
在这种情况下,您可以使用 onText() 仅获取消息,或者在 on('message')
中添加对消息类型的检查我的问题似乎与 Firebase 集成有关。 随着我的数据库更新;它似乎在我的电报机器人上实时生成触发器。
这真的很奇怪....还不知道如何解决;但到目前为止;这是我的问题。
您需要检查 callbackQuery
和 event
参数并查找更改(如果有)或您在回调中收到的数据。
如果旧数据与新数据不同,则执行其余代码,否则不执行。
bot.on("callback_query", function(callbackQuery) {
根据你的答案来猜
MY issue seems to be linked to Firebase integration. As my database is updated;
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)
One way to handle is to do multiwrite
Multiwrite 将确保您的所有写入都同时进行,并且只会触发一个侦听器事件
Second approach is to keep track of lastUpdated timestamp
让我们想象第二个结构
// a.firebaseio.com/x -> some firebase path on which you have on listener
y: {
key1: value1,
key2: value2,
.
.
key200: value200
},
lastUpdatedTs: <epochTs>
You put your on listener on lastUpdatedTs and update it using multiwrite whenever you are updating something important inside y object. Whenever lastUpdatedTs changes, you go ahead and do a firebase fetch on y. This enables you to throttle much better and not let firebase on listener on the data go rogue inside your code.