【发布时间】:2020-06-13 05:18:34
【问题描述】:
此电报机器人每次添加到组时都会尝试禁止预定的用户 ID。 ID 列在文件中。我正在使用 this telegram bot class 和 webhook 方法。
$telegram = new Telegram($bot_id);
$chat_id = $telegram->ChatID();
$button = $telegram->text();
if ($button == "DoBan"){
$fn = fopen("ids.txt","r");
while(! feof($fn)) {
$result = fgets($fn);
$int_result = (int)$result;
$content = array('chat_id' => $chat_id, 'user_id' => "$int_result");
$telegram->kickChatMember($content);
}
fclose($fn);
$content2 = array('chat_id' => $chat_id, 'text' => "ban done! ");
$telegram->sendMessage($content2);
die();
}
但是这里有两个问题:
1.如果我们文件中列出的ID在加入机器人之前没有被禁止,机器人不能禁止任何一个。关键是,如果您在任何其他组中手动禁止 ID,并在那里执行一次由 bot 禁止,之后您可以在任何其他组中禁止这些 ID。
2.当机器人在完成禁令后收到“DoBan”时,它会陷入某种循环并打印“禁令完成!”一遍又一遍,就像它在一遍遍地禁止。
更新:
根据进一步的研究,这两个表达的问题有两个原因
对于第一个问题:如果您的机器人在无法禁止它之前没有看到用户 ID。所以机器人必须首先在某个地方看到用户,要么通过启动机器人,要么在与机器人相同的组内看到该用户
对于第二个问题:如果请求不成功,电报机器人 API 认为您的服务器有问题并每隔几秒钟再次请求一次,因此您必须将 header("HTTP/1.1 200 OK"); 添加到您的脚本或在 update_id 上进行增量操作
所以这是更新的代码
$telegram = new Telegram($bot_id);
header("HTTP/1.1 200 OK");
http_response_code(200);
$chat_id = $telegram->ChatID();
$result = $telegram->getData();
$text = $result['message'] ['text'];
$update = $result ['update_id'];
$result ['update_id'] = ++$update;
if ($button == "DoBan"){
$fn = fopen("ids.txt","r");
while(! feof($fn)) {
$result = fgets($fn);
$int_result = (int)$result;
$content = array('chat_id' => $chat_id, 'user_id' => "$int_result");
$telegram->kickChatMember($content);
}
fclose($fn);
$content2 = array('chat_id' => $chat_id, 'text' => "ban done! ");
$telegram->sendMessage($content2);
die();
}
所以我需要知道我应该如何准确地增加update_id 或者添加header("HTTP/1.1 200 OK");的正确方法是什么,因为问题仍然存在。
【问题讨论】:
标签: php file telegram telegram-bot php-telegram-bot