为什么我的机器人在几天后发送两次消息? 上下文 Telegraf.js版本:3.38.0 Node.js版本:12.0.0 操作系统:Ubuntu 16.04.6 LTS(Xenial Xerus)“故障服务器” 预期行为

为什么我的机器人在几天后发送两次消息? 上下文 Telegraf.js版本:3.38.0 Node.js版本:12.0.0 操作系统:Ubuntu 16.04.6 LTS(Xenial Xerus)“故障服务器” 预期行为,node.js,telegram,chatbot,telegraf,Node.js,Telegram,Chatbot,Telegraf,嗨, 我不确定这是否是一个错误,但我没有找到任何东西,我请求你的帮助,我坦克你无论如何 我为一个小组开发了一个机器人,它基本上读取用户命令,并根据命令的主题给出响应。 机器人一整天都处于关闭状态,它在19:00通过计时作业激活自己。此外,如果发生了某些情况,则会在21:00和00:00通过chron作业发送其他消息。 机器人可以工作 当前行为 几天后,当bot使用电报方法messages.sendMessage()时,它会发送两次消息;当使用telegraf的ctx.reply方法时,它工作良好

嗨, 我不确定这是否是一个错误,但我没有找到任何东西,我请求你的帮助,我坦克你无论如何

我为一个小组开发了一个机器人,它基本上读取用户命令,并根据命令的主题给出响应。 机器人一整天都处于关闭状态,它在19:00通过计时作业激活自己。此外,如果发生了某些情况,则会在21:00和00:00通过chron作业发送其他消息。 机器人可以工作

当前行为 几天后,当bot使用电报方法messages.sendMessage()时,它会发送两次消息;当使用telegraf的ctx.reply方法时,它工作良好

当bot开始复制消息时,21:00和00:00之间的其他chron作业即使应阻止发送消息的变量的检查为FALSE,它仍会发送消息(始终且仅发送使用messages.sendMessage()的消息)

奇怪的是:由于代码中使用了许多控制台日志,我知道bot运行良好,因为它实际上没有通过使用messages.sendmages(控件为FALSE)的函数,但仍然发送消息

此外,在函数中复制消息(始终通过控制台日志)时,它只传递一次。 bot不会返回任何错误,并通过ctx.reply正确响应继续工作

这不是服务器问题,因为即使在本地,它也会继续有这种行为。我找到的唯一办法就是更改电报令牌。如果我重新启动进程,直到我更改令牌,问题才会得到解决

如果我没有很好地解释我自己,我为我的英语不好提前道歉。这是我第一次遇到如此奇怪的事情,在打扰你之前,我在网上搜索了一下,但什么也没找到。 “缓存”中似乎有一些消息(可能是错误的)。 此外,我指定bot发送的两条消息具有两个不同的update\u id;好像函数被调用了两次(我通过控制台日志排除了这一点)。

我感谢大家的帮助和时间

故障信息(针对bug) 没有来自bot或电报的错误;程序流程正确。控制台日志以正确的方式打印

代码
cron.schedule(“0019***”),函数(){
控制台日志(“开始计时”);
getWord();
});
函数getWord(){
试一试{
log(“getParole函数库”);//打印一个控制台日志
firebase.getLastWordFirebase().then(异步值=>{
var messaggio=“”;
for(设i=0;i{//bot将正确的消息发送两次XD;消息有两个不同的更新id
bot.telegram.pinChatMessage(orsoID,m.message_id);
});
});
}捕获(错误){
log(“最后一个字错误:+错误”);
}
}
cron.schedule(“0 20***”),函数(){
console.log(“帮助计时”);
如果(!db.get(“win”).value(){//win的值为True
console.log(“Win:+db.get(“Win”).value();//此控制台日志不打印
赢得帮助;
}
});
异步函数win_help(){
如果(db.get(“win”).value()==false){//win为true,则bot不会通过
试一试{
wait db.set(“control”,true).write();//该值保持为false,但机器人不会通过该值
log('win\u help function')//控制台日志不打印
自动电报
.sendMessage(//bot发送消息两次XD
奥索德,

“您确定脚本/cron没有被触发两次吗?因此,可能第二个bot正在后台运行,导致消息重复。感谢您的回复;我确定,因为服务器上只存在此脚本;它在更改令牌后也发生了第二次。我通过更改电报令牌再次解决了此问题。请注意:
然后
方法只返回一个承诺。因此,如果没有
await
,外部的
try…catch…
就无法捕获其参数中的函数。关于调试:在
pinChatMessage
之前(或之后)抛出一个异常,对于重复的消息,它可能会有所帮助。