如何防止我的机器人进入循环?

问题描述

我在我的 bot 中创建了一个功能,允许 ping 其他计算机,当用户 ping 超过 60 次时,bot 需要很长时间才能完成,而且我认为它不会使用 http 200 代码响应 Telegram,因此 Telegram 再次发送 ping 请求,循环永不停止。我使用这个库来构建我的机器人:https://github.com/Eleirbag89/TelegramBotPHP

代码很简单:

<?PHP
$telegram = new Telegram('token');
date_default_timezone_set('America/Bogota');
$chat_id = $telegram->ChatID();
$text = $telegram->Text();
$palabras = explode(" ",$text); 
foreach ($palabras as $key) {
  if (filter_var($key,FILTER_VALIDATE_IP)) {
      $ip = $key;
      $key = "";
  }
  if (is_numeric($key)){
    $cant_paq=$key;
  };
};

if (stristr($text,'ping') && !empty($ip)) {

    $numero = !empty($cant_paq) ? $cant_paq : 4;
    exec("ping -c $numero $ip",$output,$status);
    foreach ($output as $key) {
      $resultPing .= $key . "\r\n";
    }
    $content = array('chat_id' => $chat_id,'text' => $resultPing);
    $telegram->sendMessage($content);
}

解决方法

最后我自己解决了,我在网上搜索了很多,从遇到同样问题的人那里找到了一个线索,添加http_response_code (200)是不够的。现在,每次有东西进入 (stristr ($ text,'ping') &&! empty ($ ip)) 时,我都会通过 drop_pending_updates 方法 https://core.telegram.org/bots/api#setwebhook

中的 setWebhook 参数清除待处理的消息