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

Логирование и удаление комментариев, блокировка пользователей в группе ВК через бота | PHP

Статьи / PHP

Сегодня напишем бота, который будет логировать все оставляемые комментарии в вашей группе. Также с помощью inline-кнопок добавим возможность быстрой блокировки пользователей и удаления всего того, что они успели понаписать.



Шаг 1: Ключ доступа сообщества

Начинаем с подготовки сообщества:

 Показать / Скрыть текст

1. Включите сообщения сообщества, возможности для ботов и разрешите добавлять сообщество в чаты:


2. Создайте ключ, поставив галочку напротив сообщений сообщества:


3. Далее укажите ссылку на файл с ботом, скопируйте и сохраните у себя строку, которую должен вернуть сервер (она нам пригодится, когда начнём писать код). Также не забудьте нажать кнопку "Подтвердить" по окончании работ по созданию скрипта:


4. Добавьте в типы событий входящие сообщения и добавление/редактирование комментариев:

Первый этап уже позади, переходим к следующему.



Шаг 2: Ключ доступа пользователя

Для удаления комментариев и выдачи банов потребуется ещё один ключ - пользовательский ключ. Получать его мы будет в Standalone-приложении через Implicit Flow:

 Показать / Скрыть текст

1. Перейдите по ссылке https://vk.com/apps?act=manage, нажмите кнопку "Создать". Придумайте любое название и поставьте галочку напротив Standalone-приложения:


2. Далее вы должны составить запрос на получение токена:

https://oauth.vk.com/authorize?client_id=*******&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=wall,offline,groups&response_type=token&v=5.131


Вместо звёздочек вставляем ID приложения:

В параметре scope я указал права доступа для стены сообщества (wall), управления сообществом (groups) и опцию offline для бессрочной работы токена.


3. После успешной авторизации скопируйте токен в адресной строке:



Шаг 3: Скрипт

Начинаю с подключения библиотеки и создания некоторых констант:

<?php


require_once 'simplevk-master/autoload.php'; // Подключение библиотеки SimpleVK



const VK_KEY = '**********************'; // Ключ доступа сообщества
const VK_USER_KEY = '***********************'; // Ключ доступа пользователя
const ACCESS_KEY = '7a6e4873'; // Строка, которую должен вернуть сервер
const VERSION = '5.131'; // Версия API

const BOT_ENABLED = true; // Константа, отвечающая за статус бота (вкл/выкл)
const CONF_LOG_ID = **********; // Айди беседы, в которой будут логироваться комменты
const GROUP_ID = **********; // Айди вашей группы

const EXCEPTION_USERS = array (
    123456789,
    987654321,
); // Массив с айдишниками юзеров, на чьи комментарии бот реагировать не будет


Проверяем, включён ли бот (константа BOT_ENABLED). Внутри этой конструкции будем писать весь остальной код:

if ( BOT_ENABLED ) // Проверка на включённость бота
{

    // Тут продолжим

}


Авторизируемся с помощью двух ключей, которые мы получили ранее, а также инициализируем основные переменные для работы с ботом:

$vk = \DigitalStar\vk_api\vk_api::create( VK_KEY, VERSION )->setConfirm( ACCESS_KEY ); // Авторизация с помощью ключа сообщества
$vk_user = \DigitalStar\vk_api\vk_api::create( VK_USER_KEY, VERSION ); // Авторизация с помощью ключа пользователя 

$vk->initVars( $peer_id, $message, $payload, $vk_id, $type, $data ); // Инициализация переменных


Далее вставляем конструкцию if-elseif, с помощью которой будем определять тип события. Всего событий будет 3: новое сообщение (messge_new), новый комментарий (wall_reply_new), редактирование комментария (wall_reply_edit):

    if ( $type == 'message_new' )
    {
       // Тут продолжим писать код
    }
    else if ( $type == 'wall_reply_new' or $type == 'wall_reply_edit' )
    {
       // Тут продолжим писать код
    }


Итак, начнём с логирования, дабы соблюдать не запутаться в командах и кнопках: 

    else if ( $type == 'wall_reply_new' or $type == 'wall_reply_edit' )
    {


        if ( in_array( $data->object->from_id, EXCEPTION_USERS ) )
            exit; // Если пользователь в списке исключений, то завершаем работу скрипта

        $userInfo = $vk->userInfo( $data->object->from_id, $scope = [ 'first_name', 'last_name', 'sex' ] ); // Получаем имя, фамилию и пол юзера
        $end = $userInfo['sex'] == 1 ? 'а' : ''; // Если пол женский - добавленям окончание 'а' для глагола
        $do = $type == 'wall_reply_new' ? 'оставил' . $end . ' новый' : 'изменил' . $end . ' свой';


        $is_member = $vk->request( 'groups.isMember', $params = [ 'group_id' => GROUP_ID, 'user_id' => $userInfo['id']  ] ) ? 'Подписчик ' : ''; // Если юзер является подписчиком сообщетсва, то добавляем соответсвующую приписку к сообщению бота

        $del_btn = $vk->buttonText( 'Удалить', 'red', [ 'command' => 'del_' . $data->object->owner_id . '_' . $data->object->id ] ); // Формируем команду для кнопки 'Удалить', записываем в неё айди юзера и айди комментария
        $ban_btn = $vk->buttonText( 'Забанить', 'red', [ 'command' => 'ban_' . $data->object->owner_id . '_' . $data->object->id . '_' . $data->object->from_id ] ); // Формируем команду для кнопки 'Забанить', записываем в неё айди юзера и айди комментария

        $vk->sendButton( CONF_LOG_ID, $is_member . '@id' . $userInfo['id'] . '(' . $userInfo['first_name'] . ' ' . $userInfo['last_name'] . ')' . $do . ' комментарий', [ [ $del_btn, $ban_btn ] ], true, false, $params = [ 'attachment' => 'wall' . $data->object->owner_id . '_' . $data->object->id ] ); // Отправляем сообщение с inline-кнопками и прикрепленным комменом


    }


Теперь перехожу к обработке команд на удаление комментариев и блокировку пользователей. Сразу добавляю команду '/айди' для быстрого просмотра айди беседы:

    if ( $type == 'message_new' )
    {


        if ( $message == '/айди' and $peer_id > 2000000000 ) {

            $vk->sendMessage( $peer_id, $peer_id );

        }



       // Тут продолжим 

    }


Получаем payload:

    if ( $type == 'message_new' )
    {


        if ( $message == '/айди' and $peer_id > 2000000000 ) {

            $vk->sendMessage( $peer_id, $peer_id );

        }



        if ( isset( $data->object->payload ) )
            $payload = json_decode( $data->object->payload, true );
        else
            $payload = null;
        $payload = $payload['command'];




        // Тут продолжим


    }


Если payload не пустой, значит пользователь использовал кнопки. Соответственно, необходимо обработать это нажатие. Напомню, что команды кнопок имеют у нас следующий вид: действие_айди-пользователя_айди-комментария. Поэтому нужно разбить эту строку на массив с помощью функции explode():

    if ( $type == 'message_new' )
    {


        if ( $message == '/айди' and $peer_id > 2000000000 ) {

            $vk->sendMessage( $peer_id, $peer_id );

        }



        if ( isset( $data->object->payload ) )
            $payload = json_decode( $data->object->payload, true );
        else
            $payload = null;
        $payload = $payload['command'];


        if ( $payload !== null )
        {

            $command = explode( '_', $payload );

            // Тут продолжим

        }


    }


Удаление комментариев:

            if ( $command[0] == 'del' ) // Если была нажата кнопка 'Удалить'
            {
                try
                {
                    $vk_user->request( 'wall.deleteComment', $params = [ 'owner_id' => $command[1], 'comment_id' => $command[2] ] ); // Удаление комментария
                    $vk->sendMessage( CONF_LOG_ID, 'Комментарий удалён' ); // Отправление в беседу сбщ о том, что комментарий был успешно удалён
                }
                catch ( \DigitalStar\vk_api\VkApiException $e )
                {
                    $vk->sendMessage( CONF_LOG_ID, 'Произошла ошибка. Возможно, комментарий уже удалён.' ); // Уведомление об ошибке
                }
            }


Блокировка пользователя с удалением его комментария:

            else if ( $command[0] == 'ban' ) // Если была нажата кнопка 'Забанить'
            {
                try
                {
                    $vk_user->request( 'wall.deleteComment', $params = [ 'owner_id' => $command[1], 'comment_id' => $command[2] ] ); // Удаление комментария
                    $vk_user->request( 'groups.ban', $params = [ 'group_id' => GROUP_ID, 'owner_id' => $command[3], 'comment' => '*Причина*', 'comment_visible' => 1 ] ); // Бан пользователя,
                    $vk->sendMessage( CONF_LOG_ID, 'Пользователь заблокирован' );
                }
                catch ( \DigitalStar\vk_api\VkApiException $e )
                {
                    $vk->sendMessage( CONF_LOG_ID, 'Произошла ошибка. Возможно, пользователь уже заблокирован или его комментарий был удалён.' );
                }
            }


Хочу обратить внимание на строку с занесением юзера в ЧС:

$vk_user->request( 'groups.ban', $params = [ 'group_id' => GROUP_ID, 'owner_id' => $command[3], 'comment' => '*Причина бла бла*', 'comment_visible' => 1 ] );

В параметре 'comment' указывается причина блокировки. В параметре 'comment_visible' - значение 1, если пользователю будет видна причина, значение 0 - если нет. Так вот, причину можно либо сразу вписать какую-то стандартную на все случаи жизни, либо удалить оба этих параметра из строки (они необязательны).



Шаг 4: Смотрим, как работает



На этом, пожалуй, всё. Архив с исходниками прикреплён ниже.

bot.zip

  • 5id15
  • 06.07.2022
  • 1 929
  • 0
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
Как сделать цепочку сообщений (анкету) для бота ВК на PHP
Как сделать цепочку сообщений (анкету) для бота ВК на PHP
23-06-2022, 16:32, PHP
BOT VK — Скрипт бана и мута пользователей в беседе (PHP)
BOT VK — Скрипт бана и мута пользователей в беседе (PHP)
29-06-2022, 18:06, PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
21-02-2019, 04:04, Статьи / PHP
Movie

Нет комментариев. Не желаешь оставить первый комментарий?

Перед публикацией, советую ознакомится с правилами!

{login}

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

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

Рекламный блок
  • Новости
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
Комментарии
Готовый обработчик платежей ANYPAY.io для ботов ВК и сайтов
А ты сделай на сайт этот шаблон какой-то и отправь запрос они примут
Вывод записей из БД по дням (по месяцам)
А можно просто сгрупировать нужные данные по дням в sql запросе и не городить кучу ненужно кода.
Скрипт исключения из беседы VK и не только, написанный на PHP
Если Ваш код соответствует, то в $userinfo будут лежать first_name и last_name
Callback-кнопки для бота ВК
Если есть предложения про что конкретно нужно написать статью, пишите)
Callback-кнопки для бота ВК
Спасибо за статью! Читаю все ваши статьи про создание ботов, мне было очень полезно! Странно, что
Все комментарии..
Полный список последних комментариев
Лучшие новости
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]

Создание простого

10-08-2022, 20:16
Стейты для бота ВК (последовательный ввод step by step)

Стейты для бота ВК

20-07-2022, 20:03
Callback-кнопки для бота ВК

Callback-кнопки для бота ВК

22-07-2022, 20:20
Карусели для бота ВК

Карусели для бота ВК

24-07-2022, 15:48
Создаем бота VK на библиотеке SimpleVK 3.x [Часть 1]

Создаем бота VK на

26-07-2022, 17:01
Форматы вывода дат относительно текущего времени

Форматы вывода дат

14-07-2022, 00:16
Вывод записей из БД по дням (по месяцам)

Вывод записей из БД по дням

15-07-2022, 15:02
Пагинация кнопок для LongPoll-бота ВК — на библиотеке SimpleVK 3.x [Часть 2]

Пагинация кнопок для

4-08-2022, 16:43
Поиск записей в группе ВКонтакте по автору

Поиск записей в группе

3-08-2022, 17:26
Всего публикаций: 66
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 810
Добавлено за сутки: +0
Пользователей: 3711
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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