auto-account-machine/src/tools/account-register/index.js
2025-11-18 23:02:49 +08:00

172 lines
4.3 KiB
JavaScript

/**
* Account Register Tool - 账号注册工具入口
*/
const fs = require('fs');
const path = require('path');
const AccountDataGenerator = require('../../shared/libs/account-generator');
const logger = require('../../shared/logger');
const { OUTPUT_FORMATS } = require('./config');
const TOOL_NAME = 'account-register';
class AccountRegister {
constructor() {
this.sites = new Map();
this.dataGen = new AccountDataGenerator();
this.loadSites();
}
/**
* 加载所有网站脚本
*/
loadSites() {
const sitesDir = path.join(__dirname, 'sites');
try {
const files = fs.readdirSync(sitesDir);
files.forEach(file => {
if (file.endsWith('.js')) {
const siteName = file.replace('.js', '');
try {
const SiteClass = require(path.join(sitesDir, file));
this.sites.set(siteName, SiteClass);
logger.debug(TOOL_NAME, `Loaded site: ${siteName}`);
} catch (error) {
logger.warn(TOOL_NAME, `Failed to load site ${siteName}: ${error.message}`);
}
}
});
} catch (error) {
logger.warn(TOOL_NAME, `Failed to load sites: ${error.message}`);
}
}
/**
* 执行注册
*/
async execute(options) {
const { site, dryRun, format } = options;
try {
if (!site) {
logger.error(TOOL_NAME, '请指定网站名称');
this.listSites();
process.exit(1);
}
const SiteClass = this.sites.get(site);
if (!SiteClass) {
logger.error(TOOL_NAME, `未知的网站: ${site}`);
this.listSites();
process.exit(1);
}
const siteInstance = new SiteClass();
if (dryRun) {
// 干运行模式:只生成数据
logger.info(TOOL_NAME, '干运行模式:只生成账号数据');
const account = siteInstance.generateData(options);
const formatter = OUTPUT_FORMATS[format || 'simple'];
console.log('\n' + formatter.formatter(account) + '\n');
logger.success(TOOL_NAME, '账号数据生成完成');
} else {
// 真正执行注册
logger.info(TOOL_NAME, `开始注册 ${site} 账号...`);
const result = await siteInstance.register(options);
if (result.success) {
logger.success(TOOL_NAME, '注册流程完成');
if (options.output) {
// 保存到文件
fs.writeFileSync(
options.output,
JSON.stringify(result.account, null, 2)
);
logger.success(TOOL_NAME, `账号数据已保存到: ${options.output}`);
}
}
}
} catch (error) {
logger.error(TOOL_NAME, error.message);
process.exit(1);
}
}
/**
* 只生成数据(不执行注册)
*/
generate(options) {
logger.info(TOOL_NAME, '生成账号数据...');
const account = this.dataGen.generateAccount({
name: options.name,
email: options.email,
username: options.username,
password: options.password,
phone: options.phone,
includeCard: options.includeCard
});
const formatter = OUTPUT_FORMATS[options.format || 'simple'];
console.log('\n' + formatter.formatter(account) + '\n');
}
/**
* 列出支持的网站
*/
listSites() {
const sites = Array.from(this.sites.keys());
if (sites.length === 0) {
console.log('\n暂无可用网站\n');
return;
}
console.log('\n支持的网站:\n');
sites.forEach(site => {
console.log(` ${site}`);
});
console.log('');
}
/**
* 列出支持的格式
*/
listFormats() {
console.log('\n支持的输出格式:\n');
for (const [key, config] of Object.entries(OUTPUT_FORMATS)) {
console.log(` ${key.padEnd(15)} - ${config.name}`);
}
console.log('');
}
}
module.exports = {
name: TOOL_NAME,
alias: 'register',
description: '自动注册账号',
execute: async (options) => {
const tool = new AccountRegister();
await tool.execute(options);
},
listSites: () => {
const tool = new AccountRegister();
tool.listSites();
},
listFormats: () => {
const tool = new AccountRegister();
tool.listFormats();
},
generate: (options) => {
const tool = new AccountRegister();
tool.generate(options);
}
};