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

[VK BOT] Полезные функции (команды) для бота вк

Статьи / PHP



Список функций:
  • !cmd - список команд, в зависимости от места запроса (лс сообщества или беседа)
  • !kick - изменим команду исключения не от введенного id, а на пересланное сообщение
  • !nick - дадим возможность использовать ники в чате
  • !art - рандомное изображение из вашей группы вк
  • АвтоКик при выходе из беседы
Подготовка:

Я буду использовать redBeanPHP. Как скачать и настроить можно посмотреть тут или тут
Также можно просто скачать готовый архив к написанию команд:  vk-bot.zip (не забудьте изменить на свои данные)
Переменные должны быть следующие:
$peer_id = $data->object->peer_id; // Узнаем ИД беседы 2000000.....
$id = $data->object->from_id; // Узнаем ид пользователя который отправляет команду
$message = $data->object->text; // Текст самого сообщения
$cmd = mb_strtolower($message, 'utf-8'); // Изменили текст сообщение из БоТ в бот

$chat_id = $peer_id - 2000000000; // id беседы

!CMD:
Дадим ответ один при запросе в беседе и другой ответ при запросе в лс группы

Создадим команду !cmd, для этого просто проверим в пришедшем к нам сообщении на её наличие:
if ($data->type == 'message_new') { // Если это новое сообщение то выполняем код указанный в условии
  if($cmd == '!cmd'){

  }
}
Теперь надо проверить, где пришло это сообщение. Для этого проверим наш chat_id, если он будет меньше 0, то это личные сообщения группы
if($chat_id < 0){
    //Это в группе
}else{
    //Это в беседе
}
Дальше просто заполняем команды в первом случае для группы, во втором для бесед, у меня получиться так:

!KICK:
Для этой команды мы подготовим доп. переменные (имя пользователя) добавляем в начале перед обработкой команд:
$userInfo = $vk->request("users.get", ["user_ids" => $id]);
$first_name = $userInfo[0]['first_name'];
Теперь мы можем в любой команде вывести имя пользователя. Приступим к самой команде, для неё добавим переменную $reply_author, где мы получили автора пересланного сообщения:
$reply_author = $data->object->reply_message->from_id; // автор пересланного сообщения
ВНИМАНИЕ!: Была найдена ошибка с киком, если версия API в самой группе вк стоит 5:81, то он не работает, в таком случае измените его на 5:92 и выше, на этих версиях проблем нет.

Теперь приступим к команде
if($cmd == '!kick'){
    if($reply_author == ''){
      $vk->sendMessage($peer_id, "@id{$id} ({$first_name}), вы не указали человека, которого нужно исключить (перешлите любое его сообщение)");
    }else{
      //Будущий код исключения
    }
  }

для этого просто используем messages.removeChatUser при помощи $vk->request:
$vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
Давайте перед этим попрощаемся с этим человеком, для этого нужно отправить простое сообщение используя ссылку на пользователя. Такие ссылки делаются очень просто (выше уже использовали)
@id(числовой id пользователя без скобок, кавычек и т.п.) (в скобках указываем как его будем называть)
У меня это выглядит так, код ниже под спойлером
 Показать / Скрыть текст
if($cmd == '!kick'){
    if($reply_author == ''){
      $vk->sendMessage($peer_id, "@id{$id} ({$first_name}), вы не указали человека, которого нужно исключить (перешлите любое его сообщение)");
    }else{
      $userInfo_reply = $vk->request("users.get", ["user_ids" => $reply_author]);
      $first_name_reply = $userInfo[0]['first_name'];
      $vk->sendMessage($peer_id, "@id{$reply_author} ({$first_name_reply}), прощайте");
      $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
    }
  }


!NICK:

Давайте дадим возможность пользователям использовать свои никнеймы, для этого нужна база и соединение к ней. Подробнее можно прочитать в прошлых статьях (моих т.к. я буду использовать RedBeanPHP): [VK BOT] Бот раздающий ключи Steam или [Часть 1] Написание своего сайта. Регистрация и Авторизация

После чего мы создадим саму команду и проверим на наличие пользователя в базе. Для начала нам нужно обрезать сообщение и узнать что нам отправили, что делается прям в самой проверке:
if(mb_substr($cmd,0,5) == '!nick'){
    $get_user = R::findOne('users', 'user_id = ?', [$id]);
    if($get_user){
      //Пользователь существует
    }else{
      //Такой пользователь отсутствует из-за чего создадим его
    }
  }
Теперь нужно от сюда выразить текст после команды, что нужно делать из $message чтобы ник оставался таким, каким его задал пользователь, для этого после проверки команды создадим новую переменную с ником:
$new_nick = mb_substr($message, 6);
Теперь нужно записать пользователя, для чего выберем базу при помощи:
R::dispense('название');
Теперь нужно заполнить поля будущей строки в нашей базе:
$new_user->user_id = $id;
$new_user->nick = $new_nick;
И записать их в базу:
R::store($new_user);
В итоге получиться:
if(mb_substr($cmd,0,5) == '!nick'){
    $new_nick = mb_substr($message, 6);
    $get_user = R::findOne('users', 'user_id = ?', [$id]);
    if($get_user){
      //Пользователь существует
    }else{
      $new_nick = mb_substr($message, 6);
      $new_user = R::dispense('users');
      $new_user->user_id = $id;
      $new_user->nick = $new_nick;
      R::store($new_user);
    }
  }

Теперь давайте менять ник существующему пользователю в базе, для этого нужно просто в найденном пользователе заменить наш столбец с ником:
$get_user->nick = $new_nick;
R::store($get_user);

Остается уведомить пользователя, что его называем теперь $new_nick
$vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь именуется как {$new_nick}");

Итогом получилась команда:
 Показать / Скрыть текст
if(mb_substr($cmd,0,5) == '!nick'){
    $new_nick = mb_substr($message, 6);
    $get_user = R::findOne('users', 'user_id = ?', [$id]);
    if($get_user){
      $get_user->nick = $new_nick;
      R::store($get_user);
    }else{
      $new_nick = mb_substr($message, 6);
      $new_user = R::dispense('users');
      $new_user->user_id = $id;
      $new_user->nick = $new_nick;
      R::store($new_user);
    }
    $vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь именуется как {$new_nick}");
  }



Но бот меняет ник даже когда мы отправили просто !nick, давайте исправим (признаю свою ошибку, но у меня сейчас 22:46, надеюсь простите). Для этого просто нужно после $new_nick проверить на его пустоту:
if($new_nick != ''){

После чего идет выше написанный скрипт, потом закрываем эту проверку и пишем действие в else
    }else{
      $vk->sendMessage($peer_id, "@id{$id} (Вы) не указали желаемое имя");
    }

Итог:
 Показать / Скрыть текст
if(mb_substr($cmd,0,5) == '!nick'){
    $new_nick = mb_substr($message, 6);
    if($new_nick != ''){
      $get_user = R::findOne('users', 'user_id = ?', [$id]);
      if($get_user){
        $get_user->nick = $new_nick;
        R::store($get_user);
      }else{
        $new_nick = mb_substr($message, 6);
        $new_user = R::dispense('users');
        $new_user->user_id = $id;
        $new_user->nick = $new_nick;
        R::store($new_user);
      }
      $vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь именуется как {$new_nick}");
    }else{
      $vk->sendMessage($peer_id, "@id{$id} (Вы) не указали желаемое имя");
    }
  }


!art:
Данная команда будет выводить нам одно рандомное изображение из альбома вк. Для этого в команде !art создайте массив:
if($cmd == '!art'){
      $img = [];
    }
Внутри скобок заполняйте id изображений вместе с владельцем, получить их можно из адресной строки открытого изображения:
Если этот id начинается с минуса, то его обязательно оставляем (это указывает что автором является группа), после чего такие id заносим в наш массив, пример:
$img = ['-183754490_456239026', '-183754490_456239025', '-183754490_456239024', '-183754490_456239023', '-183754490_456239022'];
Теперь нам нужно выбрать одно из них рандомным способом:
$rand_img = array_rand($img, 1);
При помощи array_rand мы выбрали одно изображение из массива (т.е. id слота в массиве), теперь давайте отправим его, для этого мы будем отправлять простое сообщение, но с дополнительным атрибутом из-за чего используем request:
$vk->request('messages.send', ['peer_id' => $peer_id, 'message' => 'Красивая не правда ли?', 'attachment' => "photo{$img[$rand_img]}"]);
'peer_id' => Переменная - используем $peer_id если бот должен отправлять в беседу или $id если отправляем личным сообщением пользователю
'message' => переменная - не обязательно, но я решил отправить сообщение 'Красивая не правда ли?'
'attachment' => "типа{переменная со всеми изображениями[сгенерированный id слота]" - Используем двойные кавычки ОБЯЗАТЕЛЬНО т.к. в одинарных нельзя указывать { } (переменные). мы к нашему id (владелец_фотография) прикрепили что это тип Фотографии и таким образом прикрепили его.

Автокик при выходе из беседы:
Для данного случая нам нужно получить акт, который произошел с пользователем, добавляем ко всем переменным:
$chat_act = $data->object->action; // получаем действие, которое совершил пользователь (присоединился или покинул беседу)
В конце проверок на команды добавим:
if($chat_act->type == 'chat_kick_user'){
     // Исключаем
 }
В данном случае мы проверили, что пользователь покинул беседу ('chat_kick_user'), также можно проверить на любое другое действие, о которых вы можете узнать в разделе разработчиков VK
Теперь исключим из беседы этого пользователя,ничего сложного нет. Это как !kick, только без команды ( sweat_smile )
$vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $chat_act->member_id]);
В данном случае мы просто заменили $reply_author на id пользователя который указан в массиве с действием
Можно еще попрощаться с пользователем как я:
if($chat_act->type == 'chat_kick_user'){
    $userInfo = $vk->request("users.get", ["user_ids" => $id]);
    $first_name = $userInfo[0]['first_name'];
    $vk->sendMessage($peer_id, "@id{$chat_act->member_id} ({$first_name}) был исключен");
    $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $chat_act->member_id]);
  }

Это конец, если найдете какие-то недочеты, то пишите в комментариях 
(во время написания произошел съезд фрагментов кода из-за чего могут попадаться недочеты)

Также хочу вам показать фрагмент кода, как сделать переменную $nick, а не каждый раз получать её из базы. Для этого в начале кода (где получали имя) допишите:
  $get_user = R::findOne('users', 'user_id = ?', [$id]);
  $nick = $get_user['nick'];
  if(!$nick){
    $nick = $first_name;
  }
При обращении по нику мы получаем (в первом случае, если не зарегистрировать пользователь в нашей базе, второй наоборот):


Разработка ботов на заказ, любой сложности, обращаться:
 VK Дмитрий Котов, Сергей Котов mail: [email protected]u
TELEGRAM: @seriamod
  • アレクセイ サモシュキン
  • 24.07.2019
  • 15 033
  • 48
Скрипт исключения из беседы VK и не только, написанный на PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
21-02-2019, 04:04, Статьи / PHP
[VK BOT] Полезные функции для бота вк (Часть 2)
[VK BOT] Полезные функции для бота вк (Часть 2)
4-09-2019, 07:43, PHP
[VK BOT] Полезные функции для бота вк (Часть 3)
[VK BOT] Полезные функции для бота вк (Часть 3)
29-09-2019, 08:15, Статьи / PHP
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
  1. kronton

    kronton Гость 25 июля 2019 16:25

    годнота прилетела

  2. kronton

    kronton Гость 26 июля 2019 04:16

    Автор поста дай свой вк
    У меня пробелмы

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

      アレクセイ サモシュキン@アレクセイ 26 июля 2019 05:04

      https://vk.com/id540575911

  3. дед инсульт

    дед инсульт Гость 27 июля 2019 13:14

    не работает авто кик отсюда.

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

      Сергей Котов@Сергей Котов 27 июля 2019 17:41

      у бота должна быть админка в беседе, тип доступа, да и вообще, для начала логи ошибок бы показать, посмотреть можно на сервере, в папке logs, файл папкассайтом.error.log

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

      アレクセイ サモシュキン@アレクセイ 31 июля 2019 05:27

      Нашел проблему:
      Замените $action = $data->object->action; // получаем действие, которое совершил пользователь (присоединился или покинул беседу)
      На $chat_act = $data->object->action; // получаем действие, которое совершил пользователь (присоединился или покинул беседу) 

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

      Сергей Котов@Сергей Котов 31 июля 2019 11:15

      wink

    4. дед инсульт

      дед инсульт Гость 7 августа 2019 02:00

      ну, почти)

      if($chat_act->type == 'chat_kick_user'){    
      // Исключаем
      {

      в скобках ошибка)))))

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

      アレクセイ サモシュキン@アレクセイ 7 августа 2019 06:35

      Ой и правда. Извиняюсь, спасибо что подсказали  blush 

  4. Сергей Коваль

    Сергей Коваль@Сергей Коваль 5 августа 2019 18:07

    А почему название команды сменить нельзя?

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

      アレクセイ サモシュキン@アレクセイ 5 августа 2019 19:39

      Кто сказал, что нельзя?

  5. Арман Саргсян

    Арман Саргсян@Арман Саргсян 11 августа 2019 13:56

    как можно сделать так чтобы он реагировал только на выход из беседы,при использовании chat_kick_user,он реагирует и на исключение и на выход,как распределить если вышел то действие одно,если кикнули то действие другое?

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

      アレクセイ サモシュキン@アレクセイ 11 августа 2019 16:44

      Вроде бы не как. Когда происходит действие, вк нам отправляет лишь поля, по которым нельзя это определить

    2. Арман Саргсян

      Арман Саргсян@Арман Саргсян 11 августа 2019 16:47

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

    3. Арман Саргсян

      Арман Саргсян@Арман Саргсян 11 августа 2019 18:21

      нашел способ,if from id == member_id ,значит пользователь вышел ,иначе его исключили 

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

      アレクセイ サモシュキン@アレクセイ 12 августа 2019 07:36

      Ага, понял. Учту )) Спасибо

  6. HotBot

    HotBot@Дмитрий Мельник 13 августа 2019 15:00

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


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

                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]);
            $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) был исключен :-)"); 

        }
        } else {
                $vk->sendMessage($peer_id, "У Вас нет доступа к этой команде!");
            
            
            
     
             }
        if($cmd == 'х команды'){
           if($chat_id < 0){
            $vk->sendMessage($peer_id,"
           текст 
             ");
        
        }else{ 
             $vk->sendMessage($peer_id,"
            текст
             "); 
           }
         }   
        }
    }  





    ___________________________

    В чем проблема? я в php нуб поэтому могут быть тупейшие ошибки.

    если убрать cmd все работает атлишна. опечатка/скобки и тд. буду благодарен

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

      アレクセイ サモシュキン@アレクセイ 13 августа 2019 18:12

      Ответил в ЛС

  7. Xxxx Xxxx

    Xxxx Xxxx@Xxxx Xxxx 3 сентября 2019 14:19

    Добрый день, подскажите как просто отправить картинку?

  8. Никита Майоров

    Никита Майоров@Никита Майоров 10 сентября 2019 14:44

    Как можно при кике группы указать ее название и айди? Сейчас выходит такое: ub123456789 ()

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

      アレクセイ サモシュキン@アレクセイ 10 сентября 2019 16:39

      Через запрос groups.getById
      https://vk.com/dev/groups.getById

  9. SLAVACTC

    SLAVACTC@maxim 15 сентября 2019 19:14

    elseif($cmd == '!kick'){
    ошибка синтаксиса

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

      Сергей Котов@Сергей Котов 4 октября 2019 13:59

      Потому что нужно последовательно вставлять все как в статье,

        if($cmd == '!cmd'){  

      } elseif($cmd == '!kick'){

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

      アレクセイ サモシュキン@アレクセイ 4 октября 2019 14:48

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

  10. naughty555

    naughty555@Витя Коротков 4 октября 2019 01:14

    Как сделать прикрепление сразу нескольких изображений в 1 сообщении?

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

      Сергей Котов@Сергей Котов 4 октября 2019 14:09

      Использовать новую библиотеку, там есть удобный конструктор сообщений:


      <?php
      
      require_once "src/autoload.php"; //Подключаем библиотеку
      use DigitalStar\vk_api\Message as Message;
      use DigitalStar\vk_api\VK_api as vk_api;
      
      const VK_KEY = ""; // Токен сообщества
      const ACCESS_KEY = ""; // Тот самый ключ из сообщества
      const VERSION = "5.81"; // Версия API VK
      
      
      $vk = new vk_api(VK_KEY, VERSION);
      $my_msg = new Message($vk);
      $data = json_decode(file_get_contents('php://input'));
      
      if ($data->type == 'confirmation') {
      exit(ACCESS_KEY);
      }
      $vk->sendOK();
      $id = $data->object->from_id;
      $peer_id = $data->object->from_id;// Узнаем ID пользователя, кто написал нам
      
      if ($data->type == 'message_new') {
      
      &nbsp; &nbsp; &nbsp;if ($payload == 'btn_5'){
      $my_msg->setMessage("Оформление сделано для паблика @kotoffs (KotOFF)"); //добавить в конструктор сообщение
      $my_msg->addImage('img/Fh1BqkffpC4.jpg'); // 1 картинка
      $my_msg->addImage('img/Fh1BqkffpC4.jpg'); // 2 картинка
      $my_msg->send($peer_id);} //отправить пользователю
      
      }


      Картинки залить на сервер, у меня в папке img.Скачать библиотеку: https://github.com/digitalstars/simplevk

      Распаковать на сервер папку src, все остальное работает точно так же, как и в любой статье. В ближайшее время обновлю все статьи на новую библу, а пока можете скачать с гита и пользоваться

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

    2. MrTNTminer

      MrTNTminer@MrTNTminer 21 декабря 2019 00:26

      Как на API 5.103 это сделать? Не получается сделать данный код, ничего не отправляет.

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

      Сергей Котов@Сергей Котов 21 декабря 2019 20:35

      заменить 

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


      на

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

    4. MrTNTminer

      MrTNTminer@MrTNTminer 21 декабря 2019 20:38

      Я брал исходник из вашей статьи про API 5.103, там уже это все было. Может дело в этом? Если да то как сделать на тех исходниках которые были в вашей статье, или нужно делать ИМЕННО на этих?

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

      Сергей Котов@Сергей Котов 21 декабря 2019 20:42

      Очень просто, добавить к object-> это message-> во всем коде где это встречается 

    6. MrTNTminer

      MrTNTminer@MrTNTminer 21 декабря 2019 20:44

      Хорошо, попробую. Спасибо!

    7. MrTNTminer

      MrTNTminer@MrTNTminer 22 декабря 2019 02:19

      Сделал как вы сказали - ничего не получилось, бот не читает сообщения.

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

      Сергей Котов@Сергей Котов 22 декабря 2019 23:29

      версия апи 5.103 должна стоять везде и скрипте и настройках в вк, смотрите лог  ошибок

    9. MrTNTminer

      MrTNTminer@MrTNTminer 22 декабря 2019 23:45

      API установлен правильно, в логах ничего нету.
      Когда я пытаюсь поставить $my_msg = new Message($vk); между:
      $vk = vk_api::create(VK_KEY, VERSION)->setConfirm(CONFIRM_STR);
      ТУТ
      $data = json_decode(file_get_contents('php://input')); //Получает и декодирует JSON пришедший из ВК
      $vk->sendOK(); //Говорим vk, что мы приняли callback

      То весь скрипт тупо ломается и уходит в лоадинг.

      Если ставлю в переменные:
      // ====== Наши переменные ============
      $peer_id = $data->object->message->peer_id;
      $id = $data->object->message->from_id; // Узнаем ID пользователя, кто написал нам
      $message = $data->object->message->text; // Само сообщение от пользователя
      $userInfo = $vk->request("users.get", ["user_ids" => $id]);
      $first_name = $userInfo[0]['first_name']; // Имя пользователя 
      $last_name = $userInfo[0]['last_name']; // Фамилия пользователя
      $my_msg = new Message($vk);
      // ====== *************** ============

      И делаю такой код:
      if ($data->type == 'message_new') {

      if ($payload == '!test'){
      $my_msg->setMessage("TEST"); //добавить в конструктор сообщение
      $my_msg->addImage('img/1.jpg'); // 1 картинка
      $my_msg->addImage('img/2.png'); // 2 картинка
      $my_msg->send($peer_id);} //отправить пользователю

      }

      Ничего не работает. Тупо не отвечает и бот опять ломается.

  11. ronin-24ru

    ronin-24ru@Артём Макарович 16 декабря 2019 19:37

    Уведомление о выходе участника есть, но кикать не кикает

  12. f0344076

    f0344076@Grizli 12 января 2020 18:45

    Как сделать, что бы бот сам себя не кикал  и админов тоже?
    Нужна проверка какая-то.

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

      Сергей Котов@Сергей Котов 12 января 2020 22:23

      Проверяй ID Бота

      if ($kick_id == -1234567) // ид бота
      sendMessage($peer_id, "Я себя кикать не буду!");

    2. f0344076

      f0344076@Grizli 13 января 2020 08:36

      ???


      elseif($cmd == 'кик'){
          if($vk->isAdmin($peer_id, $id)){
          if($reply_author == ''){
            $vk->sendMessage($peer_id, "@id{$id} ({$first_name}), вы не указали пользователя, которого нужно кикнуть");
          }else{
            $reply_author = $data->object->reply_message->from_id; // автор пересланного сообщения
            $vk->sendMessage($peer_id, "Администратор @id{$id} исключил вас за нарушение правил беседы!");
            $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
          }
          }else{
            $vk->sendMessage($peer_id, "У вас нет доступа!");
          }
      }

    3. f0344076

      f0344076@Grizli 15 января 2020 15:37

      Так а куда вставлять в этом коде? Не работает, куда бы не вставлял.

    4. дд

      дд Гость 15 января 2020 22:42

      Замени 

      if($vk->isAdmin($peer_id, $id)){

      на 

      if($vk->isAdmin($peer_id, $id)){
      if ($kick_id == -1234567) {// ид бота
      sendMessage($peer_id, "Я себя кикать не буду!");
      exit();}

    5. f0344076

      f0344076@Grizli 16 января 2020 21:10

      Кикает всё-равно.

    6. дд

      дд Гость 16 января 2020 23:26

      укажи ид бота своего, вместо -1234567 

    7. f0344076

      f0344076@Grizli 17 января 2020 10:47

      Так и сделал.

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

      Сергей Котов@Сергей Котов 17 января 2020 22:40

      код в студию 

    9. f0344076

      f0344076@Grizli 30 января 2020 00:49

      elseif($cmd == 'кик'){
          if($vk->isAdmin($peer_id, $id)){
      if ($kick_id == -62262758) {// ид бота
      sendMessage($peer_id, "Я себя кикать не буду!"); 
      exit();}
          if($reply_author == ''){
            $vk->sendMessage($peer_id, "@id{$id} ({$first_name}), вы не указали пользователя, которого нужно кикнуть");
          }else{
            $reply_author = $data->object->reply_message->from_id; // автор пересланного сообщения
            $vk->sendMessage($peer_id, "Администратор @id{$id} исключил вас за нарушение правил беседы!");
            $vk->request('messages.removeChatUser', ['chat_id' => $chat_id, 'member_id' => $reply_author]);
          }
          }else{
            $vk->sendMessage($peer_id, "У вас нет доступа!");
          }
      }

      В итоге по пересланному сообщению кикает вообще всех.
      И себя. И админов. И создателя.

      Беседа группы.

    10. TREiV

      TREiV@Дмитрий Котов 30 января 2020 14:02

      Возьмите решение отсюда ​https://kotoff.net/article/10-sozdaem-sobstvennogo-bota-vk-podrobnaja-instrukci
      ja-kak-sozdat-bota-vk-za-5-minut.html
      ​​​

      Возьмите решение отсюда ​https://kotoff.net/article/10-sozdaem-sobstvennogo-bota-vk-podrobnaja-instrukci
      ja-kak-sozdat-bota-vk-za-5-minut.html
      ​​​

  13. Гость Никита

    Гость Никита Гость 22 июня 2020 08:30

    Скажите, как сделать так, чтобы бот закреплял только что присланное им сообщение? 

  14. Konstanta

    Konstanta@Константин Хакимов 24 октября 2020 21:35

    Доброго времени суток, впервые работаю с БД, поэтому прошу не бить. Написал по гайду код, сделал проверку соединения с БД:

    }elseif ($message == '!test') {
              if ( !R::testConnection() )
        {
            $vk->sendMessage($peer_id, "Соединения с БД нет");
            exit;
        }else{
            $vk->sendMessage($peer_id, "Соединение с БД есть");
        }


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

    Далее переписал команду смены ника:
     
     if (mb_substr($cmd,0,5) == '!ник'){
        $new_nick = mb_substr($message, 6);
        if($new_nick != ''){
          $get_user = R::findOne('users', 'user_id = ?', [$id]);
          if($get_user){
            $get_user->nick = $new_nick;
            R::store($get_user);
          }else{
            $new_nick = mb_substr($message, 6);
            $new_user = R::dispense('Имя БД');
            $new_user->user_id = $id;
            $new_user->nick = $new_nick;
            R::store($new_user);
          }
          $vk->sendMessage($peer_id, "@id{$id} ($first_name), теперь  {$new_nick}");
        }else{
          $vk->sendMessage($peer_id, "@id{$id} (Укажите имя)");
        }
     Если после "!ник" ничего не указано, то бот, как и следует, просит указать имя. Но вот если написать, к примеру, "!ник создатель", бот просто проигнорирует сообщение, даже не удосужившись занести меня в БД. Как можно решить сию проблему?

{login}

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

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

  • Новости
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
  • Магазин
Комментарии
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
В настройках приложения какой урл для редиректа указали?
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
{"error":"invalid_request","error_description":"redirect_uri is incorrect, check application
Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков
откуда наследуется peer_id - не возвращает его. Скорее всего потому, что получение peer_id идёт до
Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков
Помогите, всё работает, но при отправке сообщения боту, выходит ошибка Traceback (most recent call
[VK BOT] Бот раздающий ключи Steam
keys users Но если память мне не изменяет, библиотека RB сама создает таблицы
Все комментарии..
Полный список последних комментариев
Лучшие новости
Делаем отображение статистики за день, неделю месяц и все время PHP простой и удобный способ

Делаем отображение ...

14-02-2021, 22:30
Прием авто платежей в своем боте с самым низким процентом, используем VLITO.ru

Прием авто платежей в своем ...

22-02-2021, 22:08
Всего публикаций: 47
Добавлено за сутки: +0
Записей в блоге: 0
Добавлено за сутки: +0
Комментариев: 684
Добавлено за сутки: +0
Пользователей: 2991
Добавлено за сутки: +3
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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