if(in_array($cmd, ['бот', 'bot'])){
// В скором поясню что тут будет
}
Чтобы всё работало как надо, нам нужно получить не всю строку $cmd а лишь первое слово из строки, для этого давайте в переменных добавим новую переменную (в bot.php из архива выше этого делать не надо, т.к. там всё это уже подготовлено)$messages = explode(" ", $message); // Разделяем строку на массив слов
$cmd = mb_strtolower(str_replace(array("/", "!"), "", $messages[0])); // Убираем / ! перед первым словом массива
$args = array_slice($messages, 1); // Создали массив из аргументов, которые идут после команды (а точнее мы просто убрали команду)
Думаю пояснить тут нужно $args, как с ним работать и для чего оно нужно нам:if(in_array($cmd, ['бот', 'bot'])){
наif(in_array(mb_strtolower($messages[0]), ['бот', 'bot'])){
Теперь в теле этой проверки просто нужно отредактировать $args, $cmd$messages = array_slice($messages, 1); // Убрали bot/бот в начале массива
$cmd = mb_strtolower(str_replace(array("/", "!"), "", $messages[0])); // Получили первое слово массива
$args = array_slice($messages, 1); // Получили аргументы без команды и обращения
А теперь добавим интересную вещь. Если вам нужно чтобы бот отвечал только тогда, когда обратились к нему, то после закрывающей скобки добавляемelse{
exit;
}
В итоге у меня получился такой код:if(implode(' ', $messages) == 'созвать всех'){
Далее нам нужно получить список пользователей и из него отправить уведомление каждому: if(implode(' ', $messages) == 'созвать всех'){
$get_members = $vk->request('messages.getConversationMembers', ['peer_id' => $peer_id]); // Получили список пользователей беседы
foreach ($get_members['profiles'] as $member) { // Прошли по массиву для регистрации пользователей по их id
$user_id = $member['id']; // Получили id пользоавтеля
$vk->sendMessage($peer_id, "@id{$user_id} (Господа, вас созывают)"); // Отправили уведомление на полученный id пользователя
}
}
Вот и готова команда, но давайте добавим интересную штуку как проверка на админ права в беседе public function isAdmin ($peer_id, $id)
{
$chatInfo = $this->request('messages.getConversationsById', ['peer_ids' => $peer_id, 'extended' => 0]);
if($id == $chatInfo['items'][0]['chat_settings']['owner_id'] || in_array($id, $chatInfo['items'][0]['chat_settings']['admin_ids'])){
return true;
}else{
return false;
}
}
public function isAdmin ($peer_id, $id)
$chatInfo = $this->request('messages.getConversationsById', ['peer_ids' => $peer_id, 'extended' => 0]);
if($id == $chatInfo['items'][0]['chat_settings']['owner_id'] || in_array($id, $chatInfo['items'][0]['chat_settings']['admin_ids'])
if($vk->isAdmin($peer_id, $id)){
// Тут код если человек является администратором
}else{
// Если человек не является администратором
}
if($chat_id > 0){//Проверка на чат
if(!$vk->isChatAdmin($peer_id)){ // Проверка на админку бота в чате (Важно: это из моего vk_api, где я сам это дописывал)
$vk->sendMessage($peer_id, "⚠ Мне необходимы права администратора ⚠"); // Уведомляем что не выдали
exit;
}
Теперь в ином случаем проверим на регистрацию настроек беседы. После закрывающей скобкиelse{
$chat = R::findOne('settings', 'peer_id = ?', [$peer_id]); // Проверка на регистрацию настроек беседы в базе
if(!$chat){ // Если таковы отсутствую, то отправляем id беседы на регистрацию
$vk->registrationChat($peer_id);
}
}
}
Полный кодregistrationChat
и в редактируем регистрацию в записи для бд.if($chat_act->type == 'chat_title_update'){
//Замена в бд
}
Таким образом мы узнали о действии в беседе, ВАЖНО! в переменных у вас должен быть$chat_act = $data->object->action;
А теперь давайте получим настройки для беседы и заменим название беседы на новое. Я использую RedBeanPHP, а вы можете использовать что-то другое, однако в статье всё работает через (связанное с бд) rb.php$chatSettings = R::findOne('settings', 'peer_id = ?', [$peer_id]);
В базе название записано в столбце 'title', давайте же получим пришедшее название и заменим его$chatSettings->title = $chat_act->text //text из action является название беседы для данного случая
R::store($chatSettings);
Далее просто можно уведомить, что новое название было записано в бдif($chat_act->type == 'chat_title_update'){
$chatSettings = R::findOne('settings', 'peer_id = ?', [$peer_id]);
$chatSettings->title = $chat_act->text
R::store($chatSettings);
$vk->sendMessage($peer_id, "💬 Новое название чата: {$chat_act->text}");
}
Делаем отображение ...
14-02-2021, 22:30Прием авто платежей в своем ...
22-02-2021, 22:08 Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter