Не работает цикл на foreach для removechatuser
Приветствую всех посетителей данной темы. Решил сделать кик из бесед с помощью цикла,а именно - с помощью цикла foreach.
if (mb_substr($message,0,5) == '?kick'){
$checkfromiduser = R::findOne('users', 'user_id = ?', [$id]);
$checkdostyp = $checkfromiduser->dostyp;
$cyclekick = [2000000034,2000000033,2000000035];
if ($checkdostyp >= 4) {
$kick_id = mb_substr($message ,6);
$kick_id = explode("|", mb_substr($kick_id, 3))[0];
if($kick_id == ""){
$vk->sendMessage($peer_id, "Вы забыли указать аргумент");
} elseif(in_array($kick_id, $is_admin)) {
$vk->sendMessage($peer_id,"Вы не можете исключить системного администратора");
} else {
$userInfo = $vk->request("users.get", ["user_ids" => $kick_id]);
$first_name = $userInfo[0]['first_name']; // Имя исключаемого пользователя
$last_name = $userInfo[0]['last_name'];
//////////////////////////////////////////////////////////
$userInfosecond = $vk->request("users.get",["user_ids" => $id]);
$firstsecond_name = $userInfosecond[0]['first_name'];
$lastsecond_name = $userInfosecond[0]['last_name'];
/////////////////////////////////////////////////////////
$chat_data = $vk->request('messages.getConversationsById', ['peer_ids' => $peer_id, 'extended' => 0]);
$title = $chat_data['items'][0]['chat_settings']['title'];
/////////////////////////////////////////////////////////
$idc = implode(" ", $args);
$clrdostyp = R::Findone('users', 'user_id = ?' [$kick_id]);
foreach ($cyclekick as $chat_id => $cyclekicked) {
$vk->request('messages.removeChatUser', ['chat_id' => $cyclekicked, 'member_id' => $kick_id]);
$vk->sendMessage($cyclekicked, "?@id$kick_id ($first_name $last_name)\n✅Удален из беседы по запросу $firstsecond_name $lastsecond_name\nПричина: $idc ");
}
$vk->sendMessage($peer_id, "?@id$kick_id ($first_name $last_name)\n✅Удален из беседы по запросу $firstsecond_name $lastsecond_name\nПричина: $idc ");
$vk->sendMessage($log, "✅Из беседы: $peer_id \nНазвание: $title\nБыл удален @id$kick_id($first_name $last_name)\nПо запросу $firstsecond_name $lastsecond_name\nПричина: $idc");
}
} else {
$vk->sendMessage($peer_id, "Данная команда доступна с 4 уровня доступа. У вас: $checkdostyp");
}
}
Суть в том,что кик не работает с помощью такого метода,но сообщения в указанные беседы с помощью цикла отправляет на ура
foreach ($cyclekick as $chat_id => $cyclekicked) {
$vk->request('messages.removeChatUser', ['chat_id' => $cyclekicked, 'member_id' => $kick_id]);
$vk->sendMessage($cyclekicked, "?@id$kick_id ($first_name $last_name)\n✅Удален из беседы по запросу $firstsecond_name $lastsecond_name\nПричина: $idc ");
}
Прошу разъяснить как можно сделать,чтобы оно заработало. Заранее огромное спасибо.
Ответы (2 шт):
Попробуйте во время вызова messages.removeChatUser указать ещё и параметр user_id - задайте ему точно такое же значение, что и member_id
$vk->request('messages.removeChatUser', ['chat_id' => $cyclekicked, 'member_id' => $kick_id, 'user_id' => $kick_id]);
Насколько я знаю, user_id - обязательный параметр
всех. Пересмотрел документацию,все оказалось проще простого. Когда я указывал айди бесед из которых нужно кикнуть пользователя - я указывал неверно айди,в формате 20000000019,а нужно было в формате $confs = [34,35,33];
if($message == "?testkick") {
$confs = [34,35,33];
$kick_id = 608723470;
foreach($confs as $confs) {
$vk->request('messages.removeChatUser', array('chat_id' => $confs, 'member_id' => $kick_id));
$why= $vk->request('messages.removeChatUser', ['chat_id' => $confs, 'member_id' => $kick_id]);
$why = $why['error'];
$why = $why['error_code'];
$vk->SendMessage($peer_id,"$why $confs $kick_id");
}
}
Как у меня получилось - кикнуло из всех вышеуказанных бесед.