← Вернуться к списку тем

restrictChatMember для php Телеграм бота

ребята, есть у меня скриптик с помощью которго бот в чате отслеживает ключевые слова, сообщает пользователю что это спам, удаляет его пост, а я хочу еще и третий этап туда добаить- ограничение в написании постов в чат на N-ое заданное время. МУТ на час допустим. как это дописать? не смог найти в инете примеров restrictChatMember на РНР. вот мой код-
function processMessage($message) {
  $message_id = $message['message_id'];
  $chat_id = $message['chat']['id'];
  if (isset($message['text'])) {
    $text = $message['text'];

// против спама
$update = json_decode(file_get_contents('php://input'));
if(preg_match("/b(билайн|МТС)b/ui", $update->message->text)){
     apiRequest('sendMessage', [
       'chat_id'=>$update->message->chat->id,
       'text'=>'Это спам!',
       'reply_to_message_id' => $update->message->message_id
     ]);
sleep(1);
apiRequest('deleteMessage', [
       'chat_id'=>$update->message->chat->id,
       'message_id' => $update->message->message_id
     ]);
// далее ставим мут пользователю, я это вижу примерно так но прошу поправить синтаксис-
apiRequest('restrictChatMember', [
       'chat_id'=>$update->message->chat->id,
       'user_id' => $update->message->user_id,
'ChatPermissions' => can_send_messages=FALSE, can_send_media_messages=false, can_send_polls=false, can_send_other_messages=false,
'until_date' => КАКОЕ то время
     ]);
    }

Ответы


  • iMakeBots [13.02.2020 в 11:53 → Грачик Абдулошвили]
    ...
    'permissions' => [ 
        'can_send_messages' => false, 
        'can_send_media_messages' => false, 
        'can_send_polls' => false, 
        'can_send_other_messages' => false
    ],
    ...
  • Грачик Абдулошвили [13.02.2020 в 15:27 → iMakeBots]
    я правильно понимаю что сначала мне надо переменную user_id обозначить?? и где нам задать ВРЕМЯ мута. То есть финальный целый код будет такой-

    function processMessage($message) {
      $message_id = $message['message_id'];
      $chat_id = $message['chat']['id'];
    $user_id = $message['user']['id'];
      if (isset($message['text'])) {
        $text = $message['text'];
    
    // против спама
    $update = json_decode(file_get_contents('php://input'));
    if(preg_match("/b(билайн|МТС)b/ui", $update->message->text)){
         apiRequest('sendMessage', [
           'chat_id'=>$update->message->chat->id,
           'text'=>'Это спам!',
           'reply_to_message_id' => $update->message->message_id
         ]);
    sleep(1);
    apiRequest('deleteMessage', [
           'chat_id'=>$update->message->chat->id,
           'message_id' => $update->message->message_id
         ]);
    // далее ставим мут пользователю-
    apiRequest('restrictChatMember', [
           'chat_id'=>$update->message->chat->id,
           'user_id' => $update->message->user_id,
         'permissions' => [ 
        'can_send_messages' => false, 
        'can_send_media_messages' => false, 
        'can_send_polls' => false, 
        'can_send_other_messages' => false
    ],
    'until_date' => КАКОЕ то время, как оно указывается?
         ]);
        }
  • iMakeBots [13.02.2020 в 15:38 → Грачик Абдулошвили]
    function processMessage($message) {
    	$update = json_decode(file_get_contents('php://input'));
    	if(isset($update->message->text)) {
    		if(preg_match("/b(билайн|МТС)b/ui", $update->message->text)){
    		    apiRequest('sendMessage', [
    	       		'chat_id'=>$update->message->chat->id,
    	       		    'text'=>'Это спам!',
    	       		    'reply_to_message_id' => $update->message->message_id
    	     	        ]);
    			apiRequest('deleteMessage', [
    	       		    'chat_id'=>$update->message->chat->id,
    	       		    'message_id' => $update->message->message_id
    	     	        ]);
    			apiRequest('restrictChatMember', [
    	       		    'chat_id'=>$update->message->chat->id,
    	       		    'user_id' => $update->message->from->id,
    	     		    'can_send_messages' => false, 
    	    		    'can_send_media_messages' => false, 
    	    		    'can_send_polls' => false, 
    	    		    'can_send_other_messages' => false,
    			    'until_date' => time() + 3600 // текущие время  + 1 час в секундах
    	     	]);
    		}
    	}
    }

    restrictChatMember
    ...
    поле: until_date
    тип: Integer
    описание: Date when restrictions will be lifted for the user, unix time. If user is restricted for more than 366 days or less than 30 seconds from the current time, they are considered to be restricted forever
  • Грачик Абдулошвили [13.02.2020 в 16:45 → iMakeBots]
    в таком виде БОт молчит наглухо к сожалнию, а вот в таком-
    function processMessage($message) {
      // process incoming message
      $message_id = $message['message_id'];
      $chat_id = $message['chat']['id'];
    $user_id = $message['user']['id'];
      if (isset($message['text'])) {
        // incoming text message
        $text = $message['text'];
    
    // против спама
    $update = json_decode(file_get_contents('php://input'));
    if(isset($update->message->text)) {
    if(preg_match("/b(вася|федя)b/ui", $update->message->text)){
         apiRequest('sendMessage', [
           'chat_id'=>$update->message->chat->id,
           'text'=>'В этом чате не любят спам!',
           'reply_to_message_id' => $update->message->message_id
         ]);
    sleep(1);
    apiRequest('deleteMessage', [
           'chat_id'=>$update->message->chat->id,
           'message_id' => $update->message->message_id
         ]);
    apiRequest('restrictChatMember', [
    	       		    'chat_id'=>$update->message->chat->id,
    	       		    'user_id' => $update->message->user_id,
    	     		    'permissions' => [ 
    	    			'can_send_messages' => false, 
    	    			'can_send_media_messages' => false, 
    	    			'can_send_polls' => false, 
    	    			'can_send_other_messages' => false
    				],
    		             'until_date' => time()  +  300
    	     	]);
    }
    }

    выполняется Реплай, Выполняется Удаление, а вот МУТ не выполняется.
  • iMakeBots [13.02.2020 в 17:11 → Грачик Абдулошвили]
    Попробуйте так
    apiRequest('restrictChatMember', [
        'chat_id'=>$update->message->chat->id,
        'user_id' => $update->message->from->id,
        'can_send_messages' => false, 
        'can_send_media_messages' => false, 
        'can_send_polls' => false, 
        'can_send_other_messages' => false,
        'until_date' => time() + 3600
    ]);
  • Грачик Абдулошвили [13.02.2020 в 18:18 → iMakeBots]
    не сработало, попробовал даже вот так- https://prnt.sc/r1ul5h
  • iMakeBots [14.02.2020 в 10:33 → iMakeBots]
    'user_id' => $update->message->from->id,
  • Грачик Абдулошвили [14.02.2020 в 14:54 → iMakeBots]
    ВСЕ заработало! Супер! спасибо!
    единственное что мне итересно, а почему оно работает при ЗАКОММЕНТИРОВАННОЙ вот этой строчке? https://prnt.sc/r29ivt
    по идее мы же должны были переменную user обьявить) а так она у нас получается только в Рестрикт встречается но работает. вот это для меня загадка...
  • iMakeBots [14.02.2020 в 14:56 → iMakeBots]
    В массиве $message нет элемента с ключем user