KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Скрипт исключения из беседы VK и не только, написанный на PHP

Статьи / PHP


В этой статье я продолжу рассказывать как писать бота ВК. Когда я задался поиском скрипта для кика из бесед, на удивление я ничего рабочего и годного не нашел. Поэтому в этой статье я расскажу и покажу как сделать своего бота для исключения из бесед VK с помощью PHP 5.6+ и API VK.

В прошлой статье я рассказывал как настроить и создать своего бота в социальной сети VK, неожиданный ажиотаж и более 1000 просмотров за месяц и постоянные обращения помочь сделать ту или иную функцию для будущего бота, но дело в том, что я могу лишь подсказать, писать код я за вас бесплатно не буду, имейте в виду.

И так давайте приступим, готовый и рабочий проект можете скачать в самом низу этой статьи, настройку для сообщества читайте в прошлой статье

Для работы с API будем использовать библиотеку, ее нужно заливать туда же, где будет ваш скрипт. Создаем файл с названием bot.php и начинаем творить. Как и в прошлый раз создаем ключ для работы с сообщением 



Копируем его и переходим к редактированию файла bot.php

Подключаем библиотеку, указываем константы, где укажем ключ сообщества, версию API и ключ для подтверждения сервера.

<?php

include "vk_api.php";


const VK_KEY = "b48c23e7e4aa9c7c02f61a51aff85b90e59a4c52567f8604e25074a9a82b2ccf8258f9b938095be8c5e9d"; //тот самый длинный ключ доступа сообщества
const ACCESS_KEY = "2835bc2f"; //например c40b9566, введите свой
const VERSION = "5.81"; //ваша версия используемого api



Да, в этот раз я использую программу PHPSTORM и советую скачать ее Вам, если планируете писать своего бота, она условна бесплатная, ну Вы сами знаете что делать  blush 

Теперь составим список задач что наш бот должен уметь:
1) Кик из беседы по команде /kick
2) Проверку на администратора
3) Остальное придумывайте сами :)

Начнем по порядку, первая задача создать команду, которая будет уметь исключать пользователя из беседы.

Пишем код:
<?php

include "vk_api.php";



const VK_KEY = "b48c23e7e4aa9c7c02f61a51aff85b90e59a4c52567f8604e25074a9a82b2ccf8258f9b938095be8c5e9d"; //тот самый длинный ключ доступа сообщества
const ACCESS_KEY = "2835bc2f"; //например c40b9566, введите свой
const VERSION = "5.81"; //ваша версия используемого api



$vk = new vk_api(VK_KEY, VERSION); // создание экземпляра класса работы с api, принимает ключ и версию api
$data = json_decode(file_get_contents('php://input')); //Получает и декодирует JSON пришедший из ВК
//print_r($data);
if ($data->type == 'confirmation') { //Если vk запрашивает ключ
    exit(ACCESS_KEY); //Завершаем скрипт отправкой ключа
}
$vk->sendOK(); //Говорим vk, что мы приняли callback

// Создаем необходиммые переменные
$peer_id = $data->object->peer_id; // Узнаем ИД беседы 2000000.....
$id = $data->object->from_id; // Узнаем ид пользователя который отправляет команду
$message = $data->object->text; // Текст самого сообщения


if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии


}


В комментарии к коду я оставил описание что есть что, поэтому тут вопросов у Вас возникать не должно. Теперь создаем команду и как-то пытаемся обработать ее:

if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии


    if ($message == '/kick') {

        $vk->sendMessage($peer_id, "Тут должен быть кик но его еще не доделали"); // Отправляем ответ

    }


}

Да, это лишь статичная команда с одним ответом, нам же нужно понять что сообщение содержит кроме команды еще какие-то аргументы, для этого я буду использовать не совсем стандартное решение как использую в своих ботах (Свой код, увы, не сливаю :-))

Пишем следующий код:
if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии


    if (mb_substr($message,0,5) == '/kick'){ // Обрезаем сообщение и сравниваем что получилось

        $kick_id = mb_substr($message ,6); // еще раз обрезаем и получаем все что написано после /kick_
        $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $kick_id]);
        $vk->sendMessage($peer_id, "id - {$kick_id} был исключен :-)");

    }


}

Если посмотреть на скриншот, можно увидеть дополнительные слова в коде, такие как: str, start, length их не нужно писать, это подсказки IDE (PhpStorm). Это уже действующая команда, давайте проверим.

Подтверждаем адрес сервера 

Добавляем в беседу и пробуем кого-нибудь исключить.
Хм, не работает...



Проверяем включили ли мы тип событий который бот должен принимать, если нет, включаем.

Снова не работает


Ну конечно, нужно создать еще одну переменную 
$chat_id = $peer_id - 2000000000;

Проверяем:


Все работает, всего 6 строк кода для команды, не плохо не правда ли? Да, тут есть некоторые проблемы, дело в том что нужно указывать именно ID пользователя, иначе работать не будет, а так же допишем проверку на пустой аргумент, например если пользователь просто написал /kick

if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии


    if (mb_substr($message,0,5) == '/kick'){ // Обрезаем сообщение и сравниваем что получилось

        $kick_id = mb_substr($message ,6); // еще раз обрезаем и получаем все что написано после /kick_
        if($kick_id == ""){
            $vk->sendMessage($peer_id, "Вы забыли указать аргумент");

        } else {

        $chat_id = $peer_id - 2000000000;
        $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $kick_id]);
        $vk->sendMessage($peer_id, "id - {$kick_id} был исключен :-)");

    }
    }

}


Простая проверка на пустоту, если аргумент не указан, сообщаем об этом, иначе выполняем функцию исключения из беседы.


Отлично, давайте упростим немного кик из беседы и создадим мини админку.
Что бы исключать из беседы, нужно понимать в каком виде приходит сообщение при упоминании пользователя [id1|Павел Дуров] нам нужен только ID, получить его можно с помощью функции explode, давайте вернемся в PhpStorm и напишем код:
 $kick_id = explode("|", mb_substr($kick_id, 3))[0]; // Делитель |, обрезаем первые 3 символа (@id) и получаем чистый ID :-)


Давайте проверим, будет ли работать наш код:

Отлично, теперь у вас есть свой личный бот, который умеет исключать из бесед, но, если Вам нужен более профессиональный бот с большим функционалом и мощным инструментом администрирования бесед, то советую наш продукт Conference Kot



С первым пунктом покончено, давайте теперь создадим мини админку, где будем указывать ID’s пользователей, которым разрешено использовать команду, так как она сейчас доступна для всех.

К нашим переменным добавляем новую:
$is_admin = [87444494, 183657]; // создаем массив с ID's наших будущих админов через запятую 

Теперь добавляем еще 1 проверку, где будем перебирать массив и искать схожесть, иначе просто не выполняем команду  sunglasses 
$is_admin = [87444494, 183657]; // создаем массив с ID's наших будущих админов через запятую
$chat_id = $peer_id - 2000000000;

if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии


    if (mb_substr($message,0,5) == '/kick'){ // Обрезаем сообщение и сравниваем что получилось

            if (in_array($id, $is_admin)) { // С помощью in_array проверяем схожесть переменной $id с массивом с ID's

        $kick_id = mb_substr($message ,6); // еще раз обрезаем и получаем все что написано после /kick_
        $kick_id = explode("|", mb_substr($kick_id, 3))[0];

        if($kick_id == ""){
            $vk->sendMessage($peer_id, "Вы забыли указать аргумент");

        } else {

        $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $kick_id]);
        $vk->sendMessage($peer_id, "id - {$kick_id} был исключен :-)");

    }
    } else {
            $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");

        }
    }
}

Весь код целиком:
<?php

include "vk_api.php";



const VK_KEY = "b48c23e7e4aa9c7c02f61a51aff85b90e59a4c52567f8604e25074a9a82b2ccf8258f9b938095be8c5e9d"; //тот самый длинный ключ доступа сообщества
const ACCESS_KEY = "be20ea35"; //например c40b9566, введите свой
const VERSION = "5.81"; //ваша версия используемого api



$vk = new vk_api(VK_KEY, VERSION); // создание экземпляра класса работы с api, принимает ключ и версию api
$data = json_decode(file_get_contents('php://input')); //Получает и декодирует JSON пришедший из ВК
//print_r($data);
if ($data->type == 'confirmation') { //Если vk запрашивает ключ
    exit(ACCESS_KEY); //Завершаем скрипт отправкой ключа
}
$vk->sendOK(); //Говорим vk, что мы приняли callback
// Создаем необходимые переменные
$peer_id = $data->object->peer_id; // Узнаем ИД беседы 2000000.....
$id = $data->object->from_id; // Узнаем ид пользователя который отправляет команду
$message = $data->object->text; // Текст самого сообщения
$is_admin = [87444494, 183657]; // создаем массив с ID's наших будущих админов через запятую
$chat_id = $peer_id - 2000000000;

if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии


    if (mb_substr($message,0,5) == '/kick'){ // Обрезаем сообщение и сравниваем что получилось

            if (in_array($id, $is_admin)) { // С помощью in_array проверяем схожесть переменной $id с массивом с ID's

        $kick_id = mb_substr($message ,6); // еще раз обрезаем и получаем все что написано после /kick_
        $kick_id = explode("|", mb_substr($kick_id, 3))[0];

        if($kick_id == ""){
            $vk->sendMessage($peer_id, "Вы забыли указать аргумент");

        } else {

        $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $kick_id]);
        $vk->sendMessage($peer_id, "id - {$kick_id} был исключен :-)");

    }
    } else {
            $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");

        }
    }
}


Проверим:



Изменим ID на другой:

Работает  smirk 

Если данная статья окажется такой же полезной как и прошлая то в следующей статье мы рассмотрим уже подключение к базе данных и хранение в ней информации, в том числе отображение. Ставим лайки и пишем комментарии, удачного кодинга вам  yum 


Скачать архив с библиотекой и исходным кодом (требуется регистрация на сайте)
Внимание! У Вас нет прав для просмотра скрытого текста.
  • Сергей Котов
  • 21.02.2019
  • 34 042
  • 39
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
Подключение к базе данных MySQL и работа с ней. Используем ее для ботов VK
Подключение к базе данных MySQL и работа с ней. Используем ее для ботов VK
5-04-2019, 20:16, Статьи / PHP
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
24-01-2019, 04:11, Статьи
  1. Eldakim

    Eldakim@Ельдар 5 марта 2019 20:34

    Подскажите пожалуйста. Куда загружать этот код ? 

    1. Сергей Котов

      Сергей Котов@Сергей Котов 6 марта 2019 01:06

      На сервер, без него работать не будет. На сайте есть статья как это сделать -> Здесь

  2. Dizem

    Dizem@Dizem 21 марта 2019 13:31

    А как сделать, что бы бот отвечал
    "Имя Фамилия(с ссылкой) бы исключен"

    1. Сергей Котов

      Сергей Котов@Сергей Котов 22 марта 2019 16:17

      Вместо
      $vk->sendMessage($peer_id, "id - {$kick_id} был исключен :-)");
      Вставить 

      $userInfo = $vk->request("users.get", ["user_ids" => $kick_id]);
      $first_name = $userInfo[0]['first_name']; // Имя исключаемого пользователя 
      $last_name = $userInfo[0]['last_name']; // Фамилия исключаемого пользователя

      $vk->sendMessage($peer_id, " Пользователь @id$kick_id ($first_name $last_name) был исключен :-)"); 

    2. Dizem

      Dizem@Dizem 22 марта 2019 18:47

      Попробовал примить это на приветствие и понял, что ничего не понял)

       Показать / Скрыть текст
      $userInfo = $vk->request("users.get", ["user_ids"]);$first_name = $userInfo[0]['first_name']; 
      $last_name = $userInfo[0]['last_name'];
      $vk->sendMessage($peer_id, "@id$id ($first_name $last_name), здравствуйте.");



      Бот выдает сообщение только с айди, а то что в скобках игнорирует. Хотелось бы разобраться
      Или может быть будет отдельная статья по методам vk api

      UPD: 
      РАЗОБРАЛСЯ!)
      $userInfo = $vk->request("users.get", ["user_ids" => $id]);
      И заработало)

    3. лолол

      лолол 17 мая 2019 20:08

      А почему у меня точно все так же написано, но имя и фамилию не пишет.

    4. None

      None Гость 3 августа 2022 15:09

      Если Ваш код соответствует, то в $userinfo будут лежать first_name и last_name

  3. Kukuhin1221

    Kukuhin1221 4 апреля 2019 16:54

    Ждём нового поста)

  4. лолол

    лолол 9 мая 2019 11:09

    Как добавлять участников в беседу?

  5. Петя

    Петя Гость 3 июля 2019 18:23

    Окей, спасибо за код!
    1. Как сделать чтобы можно было кикать в ответ на сообщение пользователя, а не тегая его через "/kick"?
    2. Как изменить команду "/kick" на другую, чтобы бот понимал и кикал после ввода новой команды?

    Окей, спасибо за код!
    1. Как сделать чтобы можно было кикать в ответ на сообщение пользователя, а не тегая его через "/kick"?
    2. Как изменить команду "/kick" на другую, чтобы бот понимал и кикал после ввода новой команды?

    1. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 4 июля 2019 08:49

      1) 1) https://kotoff.net/article/21-podkljuchenie-k-baze-dannyh-mysql-i-rabota-s-nej-
      ispolzuem-ee-dlja-botov-vk.html Посмотри тут, я скидывал в комментариях

    2. Павел Гаснаш

      Павел Гаснаш@Павел Гаснаш 24 ноября 2019 17:03

      Петя, ты что?) В коде, вместо /kick -ставишь свое слово, и все.
      А вот как кикать из беседы с помощью команды из вне... это вопрос.

  6. HotBot

    HotBot@Дмитрий Мельник 11 августа 2019 18:16

    Хах, вы мой новый кумир) Есть страница в ВК?

  7. Дима Литвинов

    Дима Литвинов@Дима Литвинов 18 декабря 2019 19:24

    Приветствую, как сделать чтобы в конце указывалась причина кика, ну и после упоминания пользователя необходимо было писать ее? Заранее благодарен за ответ.

  8. MazAXaka

    MazAXaka@Андрей Паркер 12 января 2020 12:12

    Добрый день а нет урока по созданию авто приветствия нового пользователя в беседе?
    Или может кто подскажет скрипт как это реализовать

  9. Giperfast

    Giperfast Гость 16 января 2020 17:29

    Сервер вернул неправильный ответ: HTTP response code said error

  10. Игорь Емельянов

    Игорь Емельянов@Игорь Емельянов 13 февраля 2020 15:56

    Кик не работает

  11. Wonder

    Wonder Гость 16 мая 2020 20:17

    Все сделал, бот видит сообщения но не реагирует на команды, что делать? 



    Теперь он реагирует но не кикает, пишу просто кик он говорит нет аргумента пишу уже аргумент ничего не делает 



    Все сам решил проблему, работает, спасибо!

  12. Авокадо

    Авокадо 9 июля 2020 21:26

    Кик — это конечно хорошо, но как сделать чтобы человека приглашало по команде !invite от моего лица например

  13. Dyec

    Dyec@Дмитрий Секретнов 30 марта 2021 14:54

    нихрена не работает этот код

    1. Сергей Котов

      Сергей Котов@Сергей Котов 30 марта 2021 15:01

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

    2. Dyec

      Dyec@Дмитрий Секретнов 30 марта 2021 16:35

      да у меня давно 1.103, прикол в том, что он реагирует чисто только на циферный ID, а если его через @ кикать с ником, то не работает

    3. Сергей Котов

      Сергей Котов@Сергей Котов 30 марта 2021 18:20

      Работает через пуш (только юзеров, на группы не работает):
      
      $kick_id = explode("|", mb_substr($kick_id, 3))[0]; //&nbsp;Делитель |, обрезаем первые 3 символа (@id)&nbsp;и&nbsp;получаем чистый ID&nbsp;:-) 
      

    4. Dyec

      Dyec@Дмитрий Секретнов 30 марта 2021 18:32

      ты не понял, если ввести ник к примеру @tester то не сработает. Там нужны только цифры

    5. Сергей Котов

      Сергей Котов@Сергей Котов 30 марта 2021 20:27

      Сработает)

    6. Dyec

      Dyec@Дмитрий Секретнов 30 марта 2021 21:39

      ты внимательно на скрин глянь, у тебя @id+цифры, а у меня в беседе некоторые с никами, т.е. вместо @id будет @durov. Понял о чем я? И вот тогда он не сработает

    7. Сергей Котов

      Сергей Котов@Сергей Котов 31 марта 2021 16:03

      этот код работает и с доменами юзеров, вк всегда присылает один формат

      [idцифры|Домен или любое другое обращение]

      Что бы ты не написал, ВК вернет именно в таком формате ответ

      Взял код из статьи и указал домен вместо ида
      а вот что получает ВК:

  14. Dead Insult

    Dead Insult@Dead Insult 10 июня 2022 11:12

    вопрос, как сделать так чтобы после того как ты написал команду бот сразу же удалил твое сообщение а потом кикнул человека что бы он не заметил кто именно его кикнул

    1. SANYA

      SANYA@Александр Иванов 18 июня 2022 22:58

      это делается через апи вк, решения на сайте пока еще нет, но думаю в ближайшем будущем появится)

  15. Слава Евдокимов

    Слава Евдокимов@Слава Евдокимов 15 февраля 2023 20:02

    Подскажите как сделать не только чтобы писало имя кого кикнуло а кто кикнул ещё на пример


    Администратор 12321 кикнул пользователя 1212 по причине 1

    1. 5id15

      5id15@Константин Дорофеев 16 февраля 2023 22:17

      $id = $data->object->from_id;

      Это айди пользователя, который отправил сообщение. То есть айди админа, отправившего команду /kick.
      Если нужно отправлять только айди - просто допишите его в ответ:

      $vk->sendMessage($peer_id, "id - {$kick_id} был исключен администратором @id" . $id);


      Если нужно именно имя, то его можно подтянуть методом userInfo():

      $user_info = $vk->userInfo( $id, [ 'fields' => 'first_name, last_name' ] );

      $userInfo['first_name'] . ' ' . $userInfo['last_name'] // ==> Иван Иванов


    2. Слава Евдокимов

      Слава Евдокимов@Слава Евдокимов 26 февраля 2023 16:07

      и можете подсказать как причину сделать пажалуста

    3. 5id15

      5id15@Константин Дорофеев 27 февраля 2023 00:16

      В команде дописывайте причину в кач-ве второго параметра: "/кик @id1 причина". Далее разбейте сообщение на массив через пробел, чтобы причину можно было получить по индексу $msg[2]

      $msg = explode( ' ', $message );

      Остается только вставить это, куда вам необходимо.

    4. Слава Евдокимов

      Слава Евдокимов@Слава Евдокимов 28 февраля 2023 11:50

      спасибо помогли, и последний вопрос в чтобы переделать бота на php обязательно simplevk?

    5. Сергей Котов

      Сергей Котов@Сергей Котов 28 февраля 2023 18:07

      Не обязательно, это лишь вспомогательная библиотека, таких полно) они упрощают работу, поэтому мы используем в статьях разные библиотеки, которые, на наш взгляд, простые и удобные в использовании 

    6. Слава Евдокимов

      Слава Евдокимов@Слава Евдокимов 1 марта 2023 09:40

      понятно, и ещё такой вопрос будет когда то урок по добавлению пользователя через команду и через метод messages.addChatUser, а то я пытаюсь сделать чёт не получается это будет годно

    7. 5id15

      5id15@Константин Дорофеев 1 марта 2023 22:19

      Постараюсь сделать в ближайшее время. Спасибо за идею) 

    8. Слава Евдокимов

      Слава Евдокимов@Слава Евдокимов 2 марта 2023 15:01

      Угу),просто я пробывал сделать у меня не получилось

    9. 5id15

      5id15@Константин Дорофеев 10 марта 2023 23:06

      Совсем забыл, что адекватное использование addChatUser отключили. Метод вызывается только ключом доступа пользователя, а доступ к секции Messages не дадут, если бот работает с сервера. https://vk.com/apiclub?w=wall-1_390510

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
      • Игровые
    • Модули
    • Хаки
  • Магазин
Комментарии
Авторизация на сайте через ВК с занесением пользователя в базу данных (PHP)
В статье используется библиотека для работы с MySQLi, которая исключает SQL инъекции при
Авторизация на сайте через ВК с занесением пользователя в базу данных (PHP)
Когда будет гайд про защиту от sql injection?
Скрипт исключения из беседы VK и не только, написанный на PHP
Совсем забыл, что адекватное использование addChatUser отключили. Метод вызывается только ключом
Cкрипт добавление возможных друзей Вконтакте, законная накрутка друзей без блокировок!
Скрипт всего лишь имитирует нажатие кнопки для добавления в друзья. Само собой у Вк есть алгоритмы
Cкрипт добавление возможных друзей Вконтакте, законная накрутка друзей без блокировок!
Баны летят только так. Крутил 10 аккаунтов с помощью этого скрипта и использова хорошие прокси. 9
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 79
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 867
Добавлено за сутки: +0
Пользователей: 3904
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2022. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль