← back to browse
goat command

accountswitch

No description

0
views
0
likes
0
installs
raw source

const fs = require("fs-extra");
const path = require("path");

module.exports = {
	config: {
		name: "accountswitch",
		version: "2.4.75",
		author: "ST",
		countDown: 5,
		role: 2,
		description: {
			en: "Manage and switch between primary and secondary accounts in two account mode"
		},
		category: "owner",
		guide: {
			en: "   {pn} status - Check current account status\n"
				+ "   {pn} switch - Switch to the other account\n"
				+ "   {pn} primary - Force switch to primary account\n"
				+ "   {pn} secondary - Force switch to secondary account\n"
				+ "   {pn} test secondary - Test secondary account login\n"
				+ "   {pn} enable - Enable two account mode\n"
				+ "   {pn} disable - Disable two account mode\n"
				+ "   {pn} autoswitch on/off - Enable/disable auto switch on error"
		}
	},

	langs: {
		en: {
			twoIdModeDisabled: "⚠️ Two account mode is currently disabled.\nUse `{pn} enable` to enable it first.",
			currentStatus: "📊 Account Status\n━━━━━━━━━━━━━━━━━━\n• Mode: Two Account Mode %1\n• Current Account: %2\n• Switch Count: %3\n• Auto Switch on Error: %4\n\n💡 Primary Account: %5\n💡 Secondary Account: %6",
			enabled: "ENABLED ✅",
			disabled: "DISABLED ❌",
			configured: "Configured ✅",
			notConfigured: "Not Configured ❌",
			switching: "🔄 Switching to %1 account...\n⏳ Bot will restart in 3 seconds",
			primary: "PRIMARY",
			secondary: "SECONDARY",
			testingSecondary: "🔬 Testing secondary account login...\n⏳ Please wait...",
			testSuccess: "✅ Secondary account login test successful!\n📧 Account: %1\n🔑 Cookies saved to account.txt2",
			testFailed: "❌ Secondary account login test failed!\n⚠️ Error: %1",
			modeEnabled: "✅ Two account mode has been enabled\n💡 Configure accounts in config.json under twoIdMode",
			modeDisabled: "❌ Two account mode has been disabled\n💡 Bot will use normal single account mode",
			alreadyOnAccount: "⚠️ Bot is already using %1 account",
			secondaryNotConfigured: "⚠️ Secondary account is not configured in config.json\n💡 Please configure email and password under twoIdMode.secondaryAccount",
			autoSwitchEnabled: "✅ Auto-switch on error has been enabled\n💡 Bot will automatically switch to secondary account on MQTT errors",
			autoSwitchDisabled: "❌ Auto-switch on error has been disabled\n💡 Bot will not automatically switch accounts on errors"
		}
	},

	ST: async function ({ args, message, getLang, api }) {
		const { config } = global.GoatBot;
		const twoIdMode = config.twoIdMode;

		if (!args[0]) {
			return message.SyntaxError();
		}

		const action = args[0].toLowerCase();

		// Status command
		if (action === "status") {
			const currentAccount = global.GoatBot.currentAccount || "primary";
			const switchCount = global.GoatBot.accountSwitchCount || 0;
			const modeStatus = twoIdMode && twoIdMode.enable ? getLang("enabled") : getLang("disabled");
			const autoSwitch = twoIdMode && twoIdMode.autoSwitchOnError ? "Enabled ✅" : "Disabled ❌";
			
			const primaryConfigured = config.botAccount && config.botAccount.email ? 
				getLang("configured") : getLang("notConfigured");
			const secondaryConfigured = twoIdMode && twoIdMode.secondaryAccount && 
				twoIdMode.secondaryAccount.email && twoIdMode.secondaryAccount.password ? 
				getLang("configured") : getLang("notConfigured");

			return message.reply(getLang("currentStatus", modeStatus, currentAccount.toUpperCase(), switchCount, autoSwitch, primaryConfigured, secondaryConfigured));
		}

		// Enable/Disable commands
		if (action === "enable") {
			if (!config.twoIdMode) {
				config.twoIdMode = {
					enable: true,
					autoSwitchOnError: true,
					secondaryAccount: {
						email: "",
						password: "",
						twoFactorCode: "",
						userAgent: ""
					}
				};
			} else {
				config.twoIdMode.enable = true;
			}
			fs.writeFileSync(global.client.dirConfig, JSON.stringify(config, null, 2));
			return message.reply(getLang("modeEnabled"));
		}

		if (action === "disable") {
			if (!config.twoIdMode) {
				config.twoIdMode = { enable: false };
			} else {
				config.twoIdMode.enable = false;
			}
			fs.writeFileSync(global.client.dirConfig, JSON.stringify(config, null, 2));
			return message.reply(getLang("modeDisabled"));
		}

		// Auto-switch commands
		if (action === "autoswitch") {
			if (!args[1] || !["on", "off"].includes(args[1].toLowerCase())) {
				return message.reply("⚠️ Please specify 'on' or 'off' for auto-switch");
			}
			
			if (!config.twoIdMode) {
				config.twoIdMode = { enable: false, autoSwitchOnError: false };
			}
			
			config.twoIdMode.autoSwitchOnError = args[1].toLowerCase() === "on";
			fs.writeFileSync(global.client.dirConfig, JSON.stringify(config, null, 2));
			
			return message.reply(config.twoIdMode.autoSwitchOnError ? 
				getLang("autoSwitchEnabled") : getLang("autoSwitchDisabled"));
		}

		// Check if two account mode is enabled for other commands
		if (!twoIdMode || !twoIdMode.enable) {
			return message.reply(getLang("twoIdModeDisabled").replace("{pn}", "accountswitch"));
		}

		// Switch command
		if (action === "switch") {
			const currentAccount = global.GoatBot.currentAccount || "primary";
			const targetAccount = currentAccount === "primary" ? "secondary" : "primary";
			
			// Check if secondary account is configured when switching to it
			if (targetAccount === "secondary" && (!twoIdMode.secondaryAccount || 
				!twoIdMode.secondaryAccount.email || !twoIdMode.secondaryAccount.password)) {
				return message.reply(getLang("secondaryNotConfigured"));
			}
			
			global.GoatBot.currentAccount = targetAccount;
			if (!global.GoatBot.accountSwitchCount) {
				global.GoatBot.accountSwitchCount = 0;
			}
			global.GoatBot.accountSwitchCount++;
			
			await message.reply(getLang("switching", getLang(targetAccount)));
			
			setTimeout(() => {
				process.exit(2); // Restart bot
			}, 3000);
			return;
		}

		// Primary command
		if (action === "primary") {
			const currentAccount = global.GoatBot.currentAccount || "primary";
			if (currentAccount === "primary") {
				return message.reply(getLang("alreadyOnAccount", getLang("primary")));
			}
			
			global.GoatBot.currentAccount = "primary";
			if (!global.GoatBot.accountSwitchCount) {
				global.GoatBot.accountSwitchCount = 0;
			}
			global.GoatBot.accountSwitchCount++;
			
			await message.reply(getLang("switching", getLang("primary")));
			
			setTimeout(() => {
				process.exit(2); // Restart bot
			}, 3000);
			return;
		}

		// Secondary command
		if (action === "secondary") {
			const currentAccount = global.GoatBot.currentAccount || "primary";
			if (currentAccount === "secondary") {
				return message.reply(getLang("alreadyOnAccount", getLang("secondary")));
			}
			
			if (!twoIdMode.secondaryAccount || !twoIdMode.secondaryAccount.email || 
				!twoIdMode.secondaryAccount.password) {
				return message.reply(getLang("secondaryNotConfigured"));
			}
			
			global.GoatBot.currentAccount = "secondary";
			if (!global.GoatBot.accountSwitchCount) {
				global.GoatBot.accountSwitchCount = 0;
			}
			global.GoatBot.accountSwitchCount++;
			
			await message.reply(getLang("switching", getLang("secondary")));
			
			setTimeout(() => {
				process.exit(2); // Restart bot
			}, 3000);
			return;
		}

		// Test secondary account
		if (action === "test" && args[1] && args[1].toLowerCase() === "secondary") {
			if (!twoIdMode.secondaryAccount || !twoIdMode.secondaryAccount.email || 
				!twoIdMode.secondaryAccount.password) {
				return message.reply(getLang("secondaryNotConfigured"));
			}

			await message.reply(getLang("testingSecondary"));

			try {
				const { getBotAccountCookies } = require("../../bot/login/botacc.js");
				const loginResult = await getBotAccountCookies({
					email: twoIdMode.secondaryAccount.email,
					password: twoIdMode.secondaryAccount.password,
					userAgent: twoIdMode.secondaryAccount.userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
				}, twoIdMode.secondaryAccount.twoFactorCode || null);

				if (loginResult.cookies && loginResult.cookies.length > 0) {
					// Save to account.txt2
					const secondaryAccountPath = path.normalize(`${process.cwd()}/account.txt2`);
					fs.writeFileSync(secondaryAccountPath, JSON.stringify(loginResult.cookies, null, 2));
					return message.reply(getLang("testSuccess", twoIdMode.secondaryAccount.email));
				} else {
					return message.reply(getLang("testFailed", "Invalid credentials or network error"));
				}
			} catch (error) {
				return message.reply(getLang("testFailed", error.message));
			}
		}

		return message.SyntaxError();
	}
};

View raw file