наличие предопределенного списка банов для бота телеграммы при добавлении в группу - PullRequest
0 голосов
/ 29 февраля 2020

Этот бот-телеграмма пытается заблокировать заранее определенные идентификаторы пользователей при каждом добавлении в группу. Идентификаторы перечислены в файле. Я использую этот класс бота для телеграммы и метод 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. Если идентификаторы указаны в наш файл не был забанен до того, как бот группы был добавлен, бот не может забанить ни одного из них. Дело в том, что если вы забаните идентификаторы вручную в любой другой группе и выполните бан для бота, один раз вы сможете забанить эти идентификаторы в любой другой группе после этого.
2. Когда бот получает «DoBan» после того, как он заканчивает бан он застревает в каком-то l oop и печатает "бан сделан!" снова и снова, как будто он делает бан снова и снова.

ОБНОВЛЕНИЕ:
На основании дальнейших исследований есть две причины для двух выраженных проблем

Для первой проблемы: если ваш бот не видел пользователя ID, прежде чем он не может забанить его. Поэтому бот должен где-то сначала увидеть пользователя, либо запустив бот, либо увидев этого пользователя в одной группе с ботом

Для второй проблемы: В случае неудачного запроса API-интерфейс бота telegram считает, что что-то не так с вашим сервером и повторяет запросы каждые несколько секунд, поэтому вам нужно добавить 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");, потому что проблемы все еще существуют.

1 Ответ

0 голосов
/ 04 марта 2020

Основываясь на дальнейших исследованиях, есть две причины для двух выраженных проблем

для первой проблемы: если ваш бот не видел идентификатор пользователя, прежде чем он не может его заблокировать. Поэтому бот должен где-то сначала увидеть пользователя, либо запустив бот, либо увидев этого пользователя в той же группе с ботом

для второй проблемы: в случае неудачного запроса API-интерфейс бота telegram считает, что что-то не так с вашим сервером и повторяет запросы каждые несколько секунд, поэтому вам нужно добавить header("HTTP/1.1 200 OK"); к вашему сценарию или сделать приращение на update_id

...