/** * Username Generator - 用户名生成器 */ const { randomInt } = require('../../../shared/utils'); class UsernameGenerator { constructor() { this.adjectives = [ 'quick', 'bright', 'swift', 'clever', 'smart', 'cool', 'happy', 'lucky', 'brave', 'wise', 'silent', 'dark', 'golden', 'silver', 'mystic' ]; this.nouns = [ 'wolf', 'fox', 'eagle', 'tiger', 'dragon', 'phoenix', 'lion', 'bear', 'falcon', 'hawk', 'ninja', 'wizard', 'warrior', 'knight', 'hunter' ]; } /** * 生成用户名 * @param {Object} options - 选项 * @returns {string} */ generate(options = {}) { const { pattern, minLength, maxLength } = options; if (pattern) { return this.generateFromPattern(pattern); } // 默认生成策略 const type = options.type || 'random'; switch (type) { case 'word': return this.generateWordBased(); case 'random': return this.generateRandom(minLength, maxLength); case 'numeric': return this.generateNumeric(); default: return this.generateWordBased(); } } /** * 基于模式生成 * @param {string} pattern - 模式,如 "user_{random}", "player_{number}" * @returns {string} */ generateFromPattern(pattern) { return pattern .replace('{random}', Math.random().toString(36).substring(2, 10)) .replace('{number}', randomInt(1000, 9999).toString()) .replace('{timestamp}', Date.now().toString().slice(-8)); } /** * 生成基于单词的用户名 * @returns {string} */ generateWordBased() { const adj = this.adjectives[randomInt(0, this.adjectives.length - 1)]; const noun = this.nouns[randomInt(0, this.nouns.length - 1)]; const number = randomInt(10, 999); return `${adj}${noun}${number}`; } /** * 生成随机字符串用户名 * @param {number} minLength - 最小长度 * @param {number} maxLength - 最大长度 * @returns {string} */ generateRandom(minLength = 8, maxLength = 12) { const length = randomInt(minLength, maxLength); let username = ''; const chars = 'abcdefghijklmnopqrstuvwxyz0123456789'; // 首字母必须是字母 username += chars.charAt(randomInt(0, 25)); // 其余字符 for (let i = 1; i < length; i++) { username += chars.charAt(randomInt(0, chars.length - 1)); } return username; } /** * 生成数字用户名 * @returns {string} */ generateNumeric() { return `user${randomInt(100000, 999999)}`; } /** * 批量生成 * @param {number} count - 数量 * @param {Object} options - 选项 * @returns {Array} */ generateBatch(count, options = {}) { const usernames = []; for (let i = 0; i < count; i++) { usernames.push(this.generate(options)); } return usernames; } } module.exports = UsernameGenerator;