Tự động tạo tài khoản Discord - Get Token, Mở Mail, Copy Email
// ==UserScript==
// @name Discord Auto Register - Simple
// @namespace http://tampermonkey.net/
// @version 15.5
// @description Tự động tạo tài khoản Discord - Get Token, Mở Mail, Copy Email
// @match https://discord.com/register*
// @match https://discord.com/channels/*
// @match https://discord.com/verify*
// @grant GM_xmlhttpRequest
// @grant GM_openInTab
// @connect email.devtai.net
// @connect localhost
// @connect click.discord.com
// ==/UserScript==
(async () => {
'use strict';
const CFG = {
SERVER: 'http://localhost:5000',
PASS: '939945729',
API: 'https://email.devtai.net/api',
DOMAINS: ['epmtyfl.me', 'sptech.io.vn'],
INTERVAL: 5000,
MAX: 24
};
const state = { email: '', user: '', count: 0, checking: false, panelOpen: true };
const sleep = ms => new Promise(r => setTimeout(r, ms));
const $ = s => document.querySelector(s);
const $$ = s => document.querySelectorAll(s);
// Toast notification
const toast = (msg, color = '#3b82f6') => {
const el = document.createElement('div');
el.style.cssText = `position:fixed;bottom:80px;right:20px;background:${color};color:#fff;padding:12px 20px;border-radius:10px;font:600 13px Inter,sans-serif;box-shadow:0 4px 12px rgba(0,0,0,.3);z-index:999999;opacity:0;transition:all .3s;cursor:pointer;`;
el.textContent = msg;
document.body.appendChild(el);
requestAnimationFrame(() => el.style.opacity = '1');
el.onclick = () => el.remove();
setTimeout(() => el.remove(), 4000);
};
const success = msg => toast(msg, '#10b981');
const error = msg => toast(msg, '#ef4444');
const info = msg => toast(msg, '#3b82f6');
// API call
const api = (method, url, data) => new Promise(resolve => {
GM_xmlhttpRequest({
method, url,
headers: { 'Content-Type': 'application/json' },
data: data ? JSON.stringify(data) : undefined,
timeout: 10000,
onload: r => {
try { resolve({ ok: true, data: JSON.parse(r.responseText) }); }
catch { resolve({ ok: false }); }
},
onerror: () => resolve({ ok: false }),
ontimeout: () => resolve({ ok: false })
});
});
// Gen username & email
const genUsername = () => `royarontop_${Math.floor(Math.random() * 1000000)}`;
const genEmail = () => {
const d = CFG.DOMAINS[~~(Math.random() * CFG.DOMAINS.length)];
const s = Array(8).fill().map(() => 'abcdefghijklmnopqrstuvwxyz0123456789'[~~(Math.random() * 36)]).join('');
const p = ~~(Math.random() * (s.length + 1));
return `${s.slice(0, p)}royar${s.slice(p)}@${d}`;
};
// Lấy token Discord
const getToken = () => {
try {
const t = (webpackChunkdiscord_app.push([[''], {}, e => { m = []; for (let c in e.c) m.push(e.c[c]); }]), m)
.find(m => m?.exports?.default?.getToken !== void 0).exports.default.getToken();
if (t) return t;
} catch { }
for (let k in localStorage) {
if (k.includes('token')) {
const v = localStorage[k];
if (typeof v === 'string' && v.length > 50) return v.replace(/\"/g, '');
}
}
return null;
};
// Extract link verify từ email
const extractLink = (txt, html) => {
const m1 = txt.match(/https:\/\/click\.discord\.com\/ls\/click\?upn=[^\s\n]+/);
if (m1) return m1[0];
const m2 = html.match(/href="(https:\/\/click\.discord\.com\/ls\/click\?upn=[^"]+)"/);
return m2 ? m2[1].replace(/&/g, '&') : null;
};
// Check email để lấy link verify
const checkEmail = async () => {
if (state.checking || !state.email) return;
state.checking = true;
state.count++;
try {
const r = await api('GET', `${CFG.API}/email/${state.email}`);
if (r.ok && r.data?.length > 0) {
const msg = r.data.find(m => m.fromAddress?.includes('discord.com') &&
(m.subject?.includes('Verify') || m.subject?.includes('Xác')));
if (msg) {
const full = await api('GET', `${CFG.API}/inbox/${msg.id}`);
if (full.ok) {
const link = extractLink(full.data.textContent || '', full.data.htmlContent || '');
if (link) {
let token = getToken();
for (let i = 0; !token && i < 3; i++) {
await sleep(500);
token = getToken();
}
if (token) {
await api('POST', `${CFG.SERVER}/api/save-token`, {
email: state.email, username: state.user, password: CFG.PASS, token, verified: false
});
}
localStorage.setItem('v_link', link);
localStorage.setItem('v_progress', 'true');
localStorage.setItem('v_email', state.email);
localStorage.setItem('v_user', state.user);
success('✅ Đã lấy link verify!');
window.open(link, '_blank');
return;
}
}
}
}
if (state.count < CFG.MAX) setTimeout(checkEmail, CFG.INTERVAL);
} catch {
if (state.count < CFG.MAX) setTimeout(checkEmail, CFG.INTERVAL);
} finally {
state.checking = false;
}
};
// Fill form đăng ký
const setInput = (el, val) => {
if (!el) return;
Object.getOwnPropertyDescriptor(el.__proto__, 'value').set.call(el, val);
el.dispatchEvent(new Event('input', { bubbles: true }));
};
const selectDD = async (sel, txt) => {
const dd = $(sel);
if (!dd) return false;
dd.click();
await sleep(500);
const opt = Array.from($$('div[role="option"]')).find(o => o.textContent.trim().toLowerCase() === txt.toLowerCase());
if (opt) { opt.click(); return true; }
return false;
};
const fillDOB = async () => {
await selectDD('div[aria-label="Ngày"]', (1 + ~~(Math.random() * 28)).toString());
await sleep(300);
await selectDD('div[aria-label="Tháng"]', `tháng ${1 + ~~(Math.random() * 12)}`);
await sleep(300);
await selectDD('div[aria-label="Năm"]', (1990 + ~~(Math.random() * 16)).toString());
};
const startReg = async () => {
state.email = genEmail();
state.user = genUsername();
localStorage.setItem('p_email', state.email);
localStorage.setItem('p_user', state.user);
await sleep(500);
setInput($('input[type="email"]'), state.email);
setInput($('input[aria-label="Tên hiển thị"]'), 'royar on top');
setInput($('input[aria-label="Tên đăng nhập"]'), state.user);
setInput($('input[aria-label="Mật khẩu"]'), CFG.PASS);
await fillDOB();
};
// Xóa dữ liệu & tạo acc mới
const clearData = async () => {
localStorage.clear();
sessionStorage.clear();
document.cookie.split(';').forEach(c => {
const n = c.split('=')[0].trim();
document.cookie = `${n}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/;domain=.discord.com`;
});
if (window.indexedDB) {
const dbs = await window.indexedDB.databases();
await Promise.all(dbs.map(db => db.name ? window.indexedDB.deleteDatabase(db.name) : null));
}
success('🗑️ Đã xóa dữ liệu!');
};
const newAcc = async () => {
await clearData();
localStorage.removeItem('v_done');
window.location.href = 'https://discord.com/register';
};
// Verify
const verify = async () => {
if (localStorage.getItem('v_progress') !== 'true') return;
const email = localStorage.getItem('v_email');
const user = localStorage.getItem('v_user');
if (!email) return;
info('⏳ Đang verify...');
const check = setInterval(async () => {
const txt = document.body.textContent;
if (txt.includes('phone') || txt.includes('điện thoại')) {
clearInterval(check);
error('📱 Yêu cầu SĐT. Bỏ qua!');
localStorage.removeItem('v_progress');
setTimeout(() => window.location.href = 'https://discord.com/channels/@me', 2000);
return;
}
if (txt.includes('Đã Được Xác Nhận') || txt.includes('Verified')) {
clearInterval(check);
success('✅ Verify thành công!');
await api('POST', `${CFG.SERVER}/api/update-verified`, { email, username: user, password: CFG.PASS, verified: true });
localStorage.setItem('v_done', 'true');
localStorage.removeItem('v_progress');
await sleep(1500);
window.location.href = 'https://discord.com/channels/@me';
}
}, 800);
setTimeout(() => clearInterval(check), 30000);
};
const channels = async () => {
if (localStorage.getItem('v_done') === 'true') return;
const email = localStorage.getItem('p_email') || localStorage.getItem('v_email');
const user = localStorage.getItem('p_user') || localStorage.getItem('v_user');
if (!email) return;
state.email = email;
state.user = user;
state.count = 0;
state.checking = false;
setTimeout(checkEmail, 2000);
};
// Toggle panel
const togglePanel = () => {
state.panelOpen = !state.panelOpen;
const content = $('#panel-content');
const toggle = $('#panel-toggle');
if (state.panelOpen) {
content.style.maxHeight = '500px';
content.style.opacity = '1';
content.style.padding = '12px';
toggle.textContent = '▼';
} else {
content.style.maxHeight = '0';
content.style.opacity = '0';
content.style.padding = '0 12px';
toggle.textContent = '▲';
}
};
// Panel UI
const panel = () => {
const p = document.createElement('div');
const isC = location.pathname.includes('/channels/');
const email = localStorage.getItem('p_email') || localStorage.getItem('v_email') || '';
const user = localStorage.getItem('p_user') || localStorage.getItem('v_user') || '';
p.id = 'control-panel';
p.innerHTML = `
<div id="panel-header" style="display:flex;justify-content:space-between;align-items:center;padding:10px 12px;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:12px 12px 0 0;cursor:pointer;user-select:none;">
<div style="font:700 13px Inter,sans-serif;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.3);display:flex;align-items:center;gap:6px;">
<span>🦈</span>
<span>ROYAR Reg</span>
</div>
<button id="panel-toggle" style="background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);color:#fff;width:24px;height:24px;border-radius:6px;cursor:pointer;font:700 12px Inter,sans-serif;transition:all .3s;">▼</button>
</div>
<div id="panel-content" style="max-height:500px;opacity:1;overflow:hidden;transition:all .4s;padding:12px;background:rgba(255,255,255,.95);border-radius:0 0 12px 12px;">
${isC ? `
<div style="background:linear-gradient(135deg,#10b981,#34d399);padding:8px 10px;border-radius:8px;margin-bottom:10px;color:#fff;font:600 11px Inter,sans-serif;box-shadow:0 2px 8px rgba(16,185,129,.3);">
<div style="margin-bottom:3px;word-break:break-all;">📧 ${email || '-'}</div>
<div>👤 ${user || '-'}</div>
</div>
<button id="btn-token" style="width:100%;padding:8px;margin-bottom:6px;background:linear-gradient(135deg,#f59e0b,#fbbf24);color:#fff;border:none;border-radius:8px;font:700 12px Inter,sans-serif;cursor:pointer;box-shadow:0 2px 8px rgba(245,158,11,.3);transition:all .2s;">
🔑 Get Token
</button>
<button id="btn-open-mail" style="width:100%;padding:8px;margin-bottom:6px;background:linear-gradient(135deg,#8b5cf6,#a78bfa);color:#fff;border:none;border-radius:8px;font:700 12px Inter,sans-serif;cursor:pointer;box-shadow:0 2px 8px rgba(139,92,246,.3);transition:all .2s;">
📬 Mở Mail
</button>
<button id="btn-copy-email" style="width:100%;padding:8px;margin-bottom:6px;background:linear-gradient(135deg,#06b6d4,#22d3ee);color:#fff;border:none;border-radius:8px;font:700 12px Inter,sans-serif;cursor:pointer;box-shadow:0 2px 8px rgba(6,182,212,.3);transition:all .2s;">
📋 Lấy Mail
</button>
` : ''}
<button id="btn-start" style="width:100%;padding:10px;background:linear-gradient(135deg,#3b82f6,#60a5fa);color:#fff;border:none;border-radius:8px;font:700 12px Inter,sans-serif;cursor:pointer;box-shadow:0 3px 10px rgba(59,130,246,.4);transition:all .2s;">
${isC ? '🔄 Reset' : '▶️ Bắt Đầu'}
</button>
</div>
`;
p.style.cssText = 'position:fixed;bottom:15px;right:15px;z-index:999998;font-family:Inter,sans-serif;width:260px;box-shadow:0 10px 30px rgba(0,0,0,.2);border-radius:12px;overflow:hidden;';
// CSS hover effects
if (!$('#panel-styles')) {
const style = document.createElement('style');
style.id = 'panel-styles';
style.textContent = `
#panel-toggle:hover{background:rgba(255,255,255,.3);transform:scale(1.1);}
#btn-token:hover,#btn-open-mail:hover,#btn-copy-email:hover,#btn-start:hover{transform:translateY(-1px);filter:brightness(1.1);}
#btn-token:active,#btn-open-mail:active,#btn-copy-email:active,#btn-start:active{transform:translateY(0);}
`;
document.head.appendChild(style);
}
document.body.appendChild(p);
// Event listeners
$('#panel-header').onclick = togglePanel;
$('#panel-toggle').onclick = (e) => { e.stopPropagation(); togglePanel(); };
if (isC) {
// Nút Get Token
$('#btn-token').onclick = async () => {
const token = getToken();
if (token) {
await navigator.clipboard.writeText(token);
success('✅ Token đã copy!');
} else {
error('❌ Không tìm thấy token!');
}
};
// Nút Mở Mail - Mở web email.devtai.net
$('#btn-open-mail').onclick = () => {
const email = localStorage.getItem('p_email') || localStorage.getItem('v_email');
if (email) {
window.open('https://email.devtai.net', '_blank');
info(`📬 Đã mở email.devtai.net`);
} else {
error('❌ Không có email!');
}
};
// Nút Lấy Mail - Copy phần trước @ vào clipboard
$('#btn-copy-email').onclick = async () => {
const email = localStorage.getItem('p_email') || localStorage.getItem('v_email');
if (email) {
const emailPrefix = email.split('@')[0]; // Lấy phần trước @
await navigator.clipboard.writeText(emailPrefix);
success(`✅ Đã copy: ${emailPrefix}`);
} else {
error('❌ Không có email!');
}
};
$('#btn-start').onclick = newAcc;
} else {
$('#btn-start').onclick = startReg;
}
};
// Init
const init = () => {
const path = location.pathname;
if (path.includes('/register')) setTimeout(panel, 1000);
else if (path.includes('/verify')) verify();
else if (path.includes('/channels')) { setTimeout(panel, 1000); channels(); }
};
init();
})();