Duolingo Account Generator UI (Modern)

Tạo tài khoản Duolingo với giao diện hiện đại, xem lại tài khoản đã tạo và truy cập Discord (demo)

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Duolingo Account Generator UI (Modern)
// @namespace    http://tampermonkey.net/
// @version      0.5
// @description  Tạo tài khoản Duolingo với giao diện hiện đại, xem lại tài khoản đã tạo và truy cập Discord (demo)
// @author       You
// @match        https://www.duolingo.com/*
// @grant        none
// ==/UserScript==

(function () {
  'use strict';

  const accountLog = [];

  function generateRandomString(length) {
    const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
    return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
  }

  function generateEmail(domain = 'example.com') {
    return `${generateRandomString(10)}@${domain}`;
  }

  function generatePassword(length = 12) {
    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()';
    return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
  }

  async function createDuolingoAccount() {
    const email = generateEmail();
    const password = generatePassword();
    const username = email.split('@')[0];

    const payload = {
      email: email,
      password: password,
      username: username,
      age: 25,
      fromLanguage: 'en',
      learningLanguage: 'es'
    };

    try {
      const response = await fetch('https://www.duolingo.com/register', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(payload)
      });

      if (response.ok) {
        const accountInfo = `✅ Username: ${username}\n📧 Email: ${email}\n🔒 Password: ${password}`;
        accountLog.push(accountInfo);
        updateStatus(`🎉 Tạo thành công!\n${accountInfo}`);
      } else {
        const errorText = await response.text();
        updateStatus(`❌ Thất bại: ${response.status}\n${errorText}`);
      }
    } catch (err) {
      updateStatus(`❌ Lỗi kết nối: ${err.message}`);
    }
  }

  function createUI() {
    const container = document.createElement('div');
    container.style.position = 'fixed';
    container.style.bottom = '20px';
    container.style.right = '20px';
    container.style.zIndex = '9999';
    container.style.padding = '20px';
    container.style.background = '#1cb0f6';
    container.style.color = 'white';
    container.style.borderRadius = '16px';
    container.style.boxShadow = '0 4px 20px rgba(0,0,0,0.2)';
    container.style.fontFamily = 'Segoe UI, sans-serif';
    container.style.maxWidth = '320px';

    const title = document.createElement('div');
    title.innerText = '🚀 Duolingo Account Generator';
    title.style.fontWeight = '600';
    title.style.fontSize = '16px';
    title.style.marginBottom = '12px';
    container.appendChild(title);

    const btnCreate = document.createElement('button');
    btnCreate.innerText = 'Tạo tài khoản';
    styleButton(btnCreate);
    btnCreate.onclick = createDuolingoAccount;
    container.appendChild(btnCreate);

    const btnView = document.createElement('button');
    btnView.innerText = 'Xem tài khoản đã tạo';
    styleButton(btnView);
    btnView.style.marginTop = '10px';
    btnView.onclick = () => {
      if (accountLog.length === 0) {
        updateStatus('📭 Chưa có tài khoản nào được tạo.');
      } else {
        updateStatus(accountLog.join('\n\n'));
      }
    };
    container.appendChild(btnView);

    const btnDiscord = document.createElement('button');
    btnDiscord.innerText = '🔗 Mở Discord';
    styleButton(btnDiscord);
    btnDiscord.style.marginTop = '10px';
    btnDiscord.onclick = () => {
      window.open('https://discord.com/invite/your-invite-code', '_blank');
    };
    container.appendChild(btnDiscord);

    const status = document.createElement('pre');
    status.id = 'account-status';
    status.style.marginTop = '15px';
    status.style.background = 'rgba(255,255,255,0.1)';
    status.style.padding = '10px';
    status.style.borderRadius = '8px';
    status.style.whiteSpace = 'pre-wrap';
    status.style.fontSize = '12px';
    container.appendChild(status);

    document.body.appendChild(container);
  }

  function styleButton(btn) {
    btn.style.padding = '10px 15px';
    btn.style.background = '#fff';
    btn.style.color = '#1cb0f6';
    btn.style.border = 'none';
    btn.style.borderRadius = '8px';
    btn.style.cursor = 'pointer';
    btn.style.fontWeight = 'bold';
    btn.style.width = '100%';
    btn.onmouseenter = () => btn.style.opacity = '0.9';
    btn.onmouseleave = () => btn.style.opacity = '1';
  }

  function updateStatus(message) {
    const status = document.getElementById('account-status');
    if (status) status.textContent = message;
  }

  window.addEventListener('load', createUI);
})();