【问题标题】:having a predetermined ban list for telegram bot when added to a group在添加到组时具有预先确定的电报机器人禁止列表
【发布时间】:2020-06-13 05:18:34
【问题描述】:

此电报机器人每次添加到组时都会尝试禁止预定的用户 ID。 ID 列在文件中。我正在使用 this telegram bot classwebhook 方法。

$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


    【解决方案1】:

    根据进一步的研究,这两个表达的问题有两个原因

    对于第一个问题:如果您的机器人在无法禁止它之前没有看到用户 ID。所以机器人必须首先在某个地方看到用户,要么通过启动机器人,要么在与机器人相同的组内看到该用户

    对于第二个问题:如果请求不成功,电报机器人 API 认为您的服务器有问题并每隔几秒钟再次请求一次,因此您必须将 header("HTTP/1.1 200 OK"); 添加到您的脚本中或在 update_id 上进行增量

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 2020-03-22
      • 2016-09-17
      • 2019-02-01
      • 2018-01-01
      • 2020-12-24
      • 2020-12-11
      • 2021-03-24
      • 2017-08-18
      相关资源
      最近更新 更多