А если отправить команду то добавляется сразу 2 раза из-за обычного сообщения и из-за команды !
Потому что $reg = $body, а $body = $data->object->text, а $reg это как условие и как бы получается, что код выполняется 2 раза, если я правильно понял. Сделайте по-человечески условие, лучше через preg_match:
if(preg_match('/рег/', $body)) {...
Ну и советую сделать проверку наличия id_vk запросом SELECT, в базу.
Если пользователь есть, то ничего не добавляем, если нет то соответственно добавляем
В итоге будет примерно так:
$check_user="SELECT id_vk FROM `bot` WHERE `id_vk` = {$peer_id}"; // делаем запрос на проверку по $peer_id
if(empty($check_user)) { //если переменная пустая (ничего не найдено в запросе)
$query ="INSERT INTO `bot`(`id_bot`, `id_vk`) VALUES (NULL, $peer_id)"; // то добавляем пользователя в базу
}