VK Moderator Bot (PHP, Callbacks)

Олдфаг
Статус
Оффлайн
Регистрация
5 Июл 2017
Сообщения
2,108
Реакции[?]
1,189
Поинты[?]
0
Бот для модерации комментариев в VK группе (стенка, маркет, обсуждения, фотографии, видео, в общем, во всех местах, кроме ЛС).
Ссылка -
Пожалуйста, авторизуйтесь для просмотра ссылки.


PHP бот, работает через VK Callbacks, всё что нужно - уметь настраивать callback'и + иметь 1 ВК аккаунт с роль не ниже модератора в группе + уметь получать access token с аккаунта + иметь сервер с доменом и SSL чтобы работать по https.
~ Config.php - здесь необходимо вписать данные.
~ BlackListWords.txt - здесь можно менять/вписывать запрещенные слова/предложения. Новая строка - новое слово/предложение для проверки (писать только через нижний регистр).
~ WhiteListWords.txt - здесь можно менять/вписывать слова/предложения, при наличие которых комментарий не будет подвергнут проверке (можно например разрешить свой вебсайт вписывать, а другие запретить). Новая строка - новое слово/предложение для проверки (писать только через нижний регистр).

Принцип работы - VK присылает событие о создание комментария на ваш сервер, сервер анализирует комментарий на содержание запрещенной последовательности символов, если же таковая присутствует - сервер отправляет запрос VK на удаления комментария с помощью Access Token'а.

Снимок2.PNG
Снимок2.PNG
 
Последнее редактирование:
Эх, жизнь — хоть за хуй
Забаненный
Статус
Оффлайн
Регистрация
8 Июл 2019
Сообщения
2,993
Реакции[?]
1,656
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нужно срочно опробовать!
 
Олдфаг
Статус
Оффлайн
Регистрация
5 Июл 2017
Сообщения
2,108
Реакции[?]
1,189
Поинты[?]
0
Добавил еще модерацию фотографий, видео и исправил баг с ответом, чтобы не было спама callback'ми
1608789804339.png
 
Последнее редактирование:
Олдфаг
Статус
Оффлайн
Регистрация
5 Июл 2017
Сообщения
2,108
Реакции[?]
1,189
Поинты[?]
0
Добавил WhiteList, если слово/предложение из WhiteList'а будет найдено в комментарии, то бот не будет продолжать его проверку, так можно ограничить доступ к распространению любых ссылок, кроме своего сайта, к примеру
 
Олдфаг
Статус
Оффлайн
Регистрация
5 Июл 2017
Сообщения
2,108
Реакции[?]
1,189
Поинты[?]
0
Если кто-то хочет реализовать ещё чат-бота в ЛС группы с кнопками на основе этого сурса то:

В CVKAPI.php:
PHP:
<?php

    class CVKAPI {
        private $token;
        private $version;

        public function __construct($token, $version = NULL) {
            $this->token = $token;
            $this->version = $version ? $version : '5.120';
        }

        public function UID() {
            $s = explode(' ', microtime());
            $a = $s[0] * 1000000;
            $c = $s[1].$a;
            return $c;
        }

        public function Call($method, $data = NULL) {
            $default = ['v' => $this->version, 'access_token' => $this->token];
            $ch = curl_init();
            curl_setopt_array($ch, array(
                CURLOPT_POST => TRUE,
                CURLOPT_RETURNTRANSFER => TRUE,
                CURLOPT_SSL_VERIFYPEER => FALSE,
                CURLOPT_SSL_VERIFYHOST => FALSE,
                CURLOPT_POSTFIELDS => isset($data) ? array_merge($default, $data) : $default,
                CURLOPT_URL => sprintf('https://api.vk.com/method/%s', $method),
            ));
            $response = curl_exec($ch);
            curl_close($ch);
            return $response;
        }

        public function SendMessage($userID, $text, $keyboard = NULL) {
            $randomID = $this->UID();
            $data = [
                'peer_id' => $userID,
                'random_id' => $randomID,
                'message' => $text,
                'keyboard' => $keyboard,
            ];
           
            $call = $this->Call('messages.send', $data);
            return $call;
        }

        public function Upload($filePath, $uploadUrl, $uploadType) {
            $fileMime = mime_content_type($filePath);
            $curlFile = function_exists('curl_file_create') ? curl_file_create($filePath, $fileMime, basename($filePath)) : '@'.$filePath;

            $ch = curl_init();
            curl_setopt_array($ch, array(
                CURLOPT_URL => $uploadUrl,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_POST => true,
                CURLOPT_POSTFIELDS => [$uploadType => $curlFile]
            ));
            $uploadImage = curl_exec($ch);
            curl_close($ch);

            $uploadImage = json_decode($uploadImage);

            $array[$uploadType] = $uploadImage->$uploadType;
            $array['server'] = $uploadImage->server;
            $array['hash'] = $uploadImage->hash;

            return $array;
        }
    }

?>
Использование пользование:

PHP:
$GroupVK = new CVKAPI($GroupAccessToken);
PHP:
        // make buttons
        $Buttons = [
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 0'
                ],
                'color' => 'negative']
            ],
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 1'
                ],
                'color' => 'primary']
            ],
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 2'
                ],
                'color' => 'positive']
            ],
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 3'
                ],
                'color' => 'secondary']
            ],
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 4'
                ],
                'color' => 'secondary']
            ],
        ];
        $Keyboard = json_encode(['one_time' => false, 'buttons' => $Buttons]);

        // send buttons + message
        $WelcomeText = '
            Добро пожаловать!
           
            Здесь Вы можете задать интересующий Вас вопрос.
        ';
        $GroupVK->SendMessage($MessageFrom, $WelcomeText, $Keyboard);
PHP:
if($MessageText == 'Button 1') {
    $GroupVK->SendMessage($MessageFrom, "What?");
    break;
}
PHP:
$Buttons = [
[
    ['action' => [
        'type' => 'text',
        'label' => 'I want 1'
    ],
    'color' => 'primary']
],  
[
    ['action' => [
        'type' => 'text',
        'label' => 'I want 2'
    ],
    'color' => 'primary']
],
];
$Keyboard = json_encode(['one_time' => false, 'buttons' => $Buttons, 'inline' => true]);
$GroupVK->SendMessage($MessageFrom, "Choose button:", $Keyboard);
На гитхабе обновлять не хочу, все равно не нужно, ну, в общем, да, как-то так
 
Эх, жизнь — хоть за хуй
Забаненный
Статус
Оффлайн
Регистрация
8 Июл 2019
Сообщения
2,993
Реакции[?]
1,656
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если кто-то хочет реализовать ещё чат-бота в ЛС группы с кнопками на основе этого сурса то:

В CVKAPI.php:
PHP:
<?php

    class CVKAPI {
        private $token;
        private $version;

        public function __construct($token, $version = NULL) {
            $this->token = $token;
            $this->version = $version ? $version : '5.120';
        }

        public function UID() {
            $s = explode(' ', microtime());
            $a = $s[0] * 1000000;
            $c = $s[1].$a;
            return $c;
        }

        public function Call($method, $data = NULL) {
            $default = ['v' => $this->version, 'access_token' => $this->token];
            $ch = curl_init();
            curl_setopt_array($ch, array(
                CURLOPT_POST => TRUE,
                CURLOPT_RETURNTRANSFER => TRUE,
                CURLOPT_SSL_VERIFYPEER => FALSE,
                CURLOPT_SSL_VERIFYHOST => FALSE,
                CURLOPT_POSTFIELDS => isset($data) ? array_merge($default, $data) : $default,
                CURLOPT_URL => sprintf('https://api.vk.com/method/%s', $method),
            ));
            $response = curl_exec($ch);
            curl_close($ch);
            return $response;
        }

        public function SendMessage($userID, $text, $keyboard = NULL) {
            $randomID = $this->UID();
            $data = [
                'peer_id' => $userID,
                'random_id' => $randomID,
                'message' => $text,
                'keyboard' => $keyboard,
            ];
          
            $call = $this->Call('messages.send', $data);
            return $call;
        }

        public function Upload($filePath, $uploadUrl, $uploadType) {
            $fileMime = mime_content_type($filePath);
            $curlFile = function_exists('curl_file_create') ? curl_file_create($filePath, $fileMime, basename($filePath)) : '@'.$filePath;

            $ch = curl_init();
            curl_setopt_array($ch, array(
                CURLOPT_URL => $uploadUrl,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_POST => true,
                CURLOPT_POSTFIELDS => [$uploadType => $curlFile]
            ));
            $uploadImage = curl_exec($ch);
            curl_close($ch);

            $uploadImage = json_decode($uploadImage);

            $array[$uploadType] = $uploadImage->$uploadType;
            $array['server'] = $uploadImage->server;
            $array['hash'] = $uploadImage->hash;

            return $array;
        }
    }

?>
Использование пользование:

PHP:
$GroupVK = new CVKAPI($GroupAccessToken);
PHP:
        // make buttons
        $Buttons = [
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 0'
                ],
                'color' => 'negative']
            ],
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 1'
                ],
                'color' => 'primary']
            ],
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 2'
                ],
                'color' => 'positive']
            ],
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 3'
                ],
                'color' => 'secondary']
            ],
            [
                ['action' => [
                    'type' => 'text',
                    'label' => 'Button 4'
                ],
                'color' => 'secondary']
            ],
        ];
        $Keyboard = json_encode(['one_time' => false, 'buttons' => $Buttons]);

        // send buttons + message
        $WelcomeText = '
            Добро пожаловать!
          
            Здесь Вы можете задать интересующий Вас вопрос.
        ';
        $GroupVK->SendMessage($MessageFrom, $WelcomeText, $Keyboard);
PHP:
if($MessageText == 'Button 1') {
    $GroupVK->SendMessage($MessageFrom, "What?");
    break;
}
PHP:
$Buttons = [
[
    ['action' => [
        'type' => 'text',
        'label' => 'I want 1'
    ],
    'color' => 'primary']
], 
[
    ['action' => [
        'type' => 'text',
        'label' => 'I want 2'
    ],
    'color' => 'primary']
],
];
$Keyboard = json_encode(['one_time' => false, 'buttons' => $Buttons, 'inline' => true]);
$GroupVK->SendMessage($MessageFrom, "Choose button:", $Keyboard);
На гитхабе обновлять не хочу, все равно не нужно, ну, в общем, да, как-то так
Астанавись машина
 
Сверху Снизу