问题描述
我在我的 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
参数清除待处理的消息