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
  • 4 131
  • 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
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
<Script>Alert("hello");</Script>
Генерация всевозможных комбинаций из набора символов — комбинаторика в Python (itertools)
Qwertyuiopasdfghjklzxcvbnm 1234567890
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 938
Добавлено за сутки: +0
Пользователей: 4125
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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