1
This commit is contained in:
105
telegram_bot.py
105
telegram_bot.py
@@ -118,6 +118,7 @@ class ProvisionerBot:
|
|||||||
("list", self.cmd_list),
|
("list", self.cmd_list),
|
||||||
("config", self.cmd_config),
|
("config", self.cmd_config),
|
||||||
("fingerprint", self.cmd_fingerprint),
|
("fingerprint", self.cmd_fingerprint),
|
||||||
|
("concurrent", self.cmd_concurrent),
|
||||||
("run", self.cmd_run),
|
("run", self.cmd_run),
|
||||||
("run_all", self.cmd_run_all),
|
("run_all", self.cmd_run_all),
|
||||||
("resume", self.cmd_resume),
|
("resume", self.cmd_resume),
|
||||||
@@ -247,6 +248,7 @@ class ProvisionerBot:
|
|||||||
BotCommand("stop", "停止当前任务"),
|
BotCommand("stop", "停止当前任务"),
|
||||||
# 配置管理
|
# 配置管理
|
||||||
BotCommand("fingerprint", "开启/关闭随机指纹"),
|
BotCommand("fingerprint", "开启/关闭随机指纹"),
|
||||||
|
BotCommand("concurrent", "开启/关闭并发处理"),
|
||||||
BotCommand("include_owners", "开启/关闭 Owner 入库"),
|
BotCommand("include_owners", "开启/关闭 Owner 入库"),
|
||||||
BotCommand("reload", "重载配置文件"),
|
BotCommand("reload", "重载配置文件"),
|
||||||
# 清理管理
|
# 清理管理
|
||||||
@@ -307,6 +309,8 @@ class ProvisionerBot:
|
|||||||
|
|
||||||
<b>⚙️ 配置管理:</b>
|
<b>⚙️ 配置管理:</b>
|
||||||
/fingerprint - 开启/关闭随机指纹
|
/fingerprint - 开启/关闭随机指纹
|
||||||
|
/concurrent - 开启/关闭并发处理
|
||||||
|
/concurrent <n> - 设置并发数 (1-10)
|
||||||
/include_owners - 开启/关闭 Owner 入库
|
/include_owners - 开启/关闭 Owner 入库
|
||||||
/reload - 重载配置文件 (无需重启)
|
/reload - 重载配置文件 (无需重启)
|
||||||
/clean - 清理 team.json 和 tracker 数据
|
/clean - 清理 team.json 和 tracker 数据
|
||||||
@@ -347,15 +351,15 @@ class ProvisionerBot:
|
|||||||
/team_fingerprint - 开启/关闭随机指纹
|
/team_fingerprint - 开启/关闭随机指纹
|
||||||
/team_register - 开始自动订阅注册
|
/team_register - 开始自动订阅注册
|
||||||
|
|
||||||
<b><EFBFBD> AutoGPTPlus:</b>
|
<b>🔧 AutoGPTPlus:</b>
|
||||||
/autogptplus - ChatGPT 订阅自动化管理面板
|
/autogptplus - ChatGPT 订阅自动化管理面板
|
||||||
|
|
||||||
<b><EFBFBD>💡 示例:</b>
|
<b>💡 示例:</b>
|
||||||
<code>/list</code> - 查看所有待处理账号
|
<code>/list</code> - 查看所有待处理账号
|
||||||
<code>/run 0</code> - 处理第一个 Team
|
<code>/run 0</code> - 处理第一个 Team
|
||||||
|
<code>/concurrent 4</code> - 开启 4 并发处理
|
||||||
<code>/gptmail_add my-api-key</code> - 添加 Key
|
<code>/gptmail_add my-api-key</code> - 添加 Key
|
||||||
<code>/iban_add DE123...,DE456...</code> - 添加 IBAN
|
<code>/iban_add DE123...,DE456...</code> - 添加 IBAN"""
|
||||||
<code>/domain_add @example.com</code> - 添加域名"""
|
|
||||||
await update.message.reply_text(help_text, parse_mode="HTML")
|
await update.message.reply_text(help_text, parse_mode="HTML")
|
||||||
|
|
||||||
@admin_only
|
@admin_only
|
||||||
@@ -487,6 +491,8 @@ class ProvisionerBot:
|
|||||||
@admin_only
|
@admin_only
|
||||||
async def cmd_config(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
async def cmd_config(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
"""查看当前系统配置"""
|
"""查看当前系统配置"""
|
||||||
|
from config import CONCURRENT_ENABLED, CONCURRENT_WORKERS
|
||||||
|
|
||||||
# 授权服务地址
|
# 授权服务地址
|
||||||
if AUTH_PROVIDER == "s2a":
|
if AUTH_PROVIDER == "s2a":
|
||||||
auth_url = S2A_API_BASE or "未配置"
|
auth_url = S2A_API_BASE or "未配置"
|
||||||
@@ -507,6 +513,12 @@ class ProvisionerBot:
|
|||||||
# 随机指纹状态
|
# 随机指纹状态
|
||||||
fingerprint_status = "✅ 已开启" if BROWSER_RANDOM_FINGERPRINT else "❌ 未开启"
|
fingerprint_status = "✅ 已开启" if BROWSER_RANDOM_FINGERPRINT else "❌ 未开启"
|
||||||
|
|
||||||
|
# 并发处理状态
|
||||||
|
if CONCURRENT_ENABLED:
|
||||||
|
concurrent_status = f"✅ 已开启 ({CONCURRENT_WORKERS} 并发)"
|
||||||
|
else:
|
||||||
|
concurrent_status = "❌ 未开启"
|
||||||
|
|
||||||
lines = [
|
lines = [
|
||||||
"<b>⚙️ 系统配置</b>",
|
"<b>⚙️ 系统配置</b>",
|
||||||
"",
|
"",
|
||||||
@@ -520,6 +532,7 @@ class ProvisionerBot:
|
|||||||
"",
|
"",
|
||||||
"<b>🌐 浏览器</b>",
|
"<b>🌐 浏览器</b>",
|
||||||
f" 随机指纹: {fingerprint_status}",
|
f" 随机指纹: {fingerprint_status}",
|
||||||
|
f" 并发处理: {concurrent_status}",
|
||||||
"",
|
"",
|
||||||
"<b>👥 账号设置</b>",
|
"<b>👥 账号设置</b>",
|
||||||
f" 每 Team 账号数: {ACCOUNTS_PER_TEAM}",
|
f" 每 Team 账号数: {ACCOUNTS_PER_TEAM}",
|
||||||
@@ -530,6 +543,7 @@ class ProvisionerBot:
|
|||||||
"",
|
"",
|
||||||
"<b>💡 提示:</b>",
|
"<b>💡 提示:</b>",
|
||||||
"/fingerprint - 切换随机指纹",
|
"/fingerprint - 切换随机指纹",
|
||||||
|
"/concurrent - 切换并发处理",
|
||||||
"/include_owners - 切换 Owner 入库",
|
"/include_owners - 切换 Owner 入库",
|
||||||
"/s2a_config - 配置 S2A 参数",
|
"/s2a_config - 配置 S2A 参数",
|
||||||
]
|
]
|
||||||
@@ -621,6 +635,89 @@ class ProvisionerBot:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
await update.message.reply_text(f"❌ 修改配置失败: {e}")
|
await update.message.reply_text(f"❌ 修改配置失败: {e}")
|
||||||
|
|
||||||
|
@admin_only
|
||||||
|
async def cmd_concurrent(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
|
"""切换并发处理开关或设置并发数"""
|
||||||
|
import tomli_w
|
||||||
|
from config import CONCURRENT_ENABLED, CONCURRENT_WORKERS
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 读取当前配置
|
||||||
|
with open(CONFIG_FILE, "rb") as f:
|
||||||
|
import tomllib
|
||||||
|
config = tomllib.load(f)
|
||||||
|
|
||||||
|
# 确保 concurrent section 存在
|
||||||
|
if "concurrent" not in config:
|
||||||
|
config["concurrent"] = {"enabled": False, "workers": 4}
|
||||||
|
|
||||||
|
# 解析参数
|
||||||
|
args = context.args if context.args else []
|
||||||
|
|
||||||
|
if not args:
|
||||||
|
# 无参数: 切换开关
|
||||||
|
current = config["concurrent"].get("enabled", False)
|
||||||
|
new_value = not current
|
||||||
|
config["concurrent"]["enabled"] = new_value
|
||||||
|
|
||||||
|
# 写回文件
|
||||||
|
with open(CONFIG_FILE, "wb") as f:
|
||||||
|
tomli_w.dump(config, f)
|
||||||
|
|
||||||
|
workers = config["concurrent"].get("workers", 4)
|
||||||
|
status = "✅ 已开启" if new_value else "❌ 已关闭"
|
||||||
|
|
||||||
|
await update.message.reply_text(
|
||||||
|
f"<b>⚡ 并发处理</b>\n\n"
|
||||||
|
f"状态: {status}\n"
|
||||||
|
f"并发数: {workers}\n\n"
|
||||||
|
f"开启后将同时启动 {workers} 个浏览器实例并行处理账号\n\n"
|
||||||
|
f"<b>💡 设置并发数:</b>\n"
|
||||||
|
f"<code>/concurrent 4</code> - 设置为 4 并发\n\n"
|
||||||
|
f"使用 /reload 立即生效",
|
||||||
|
parse_mode="HTML"
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
# 有参数: 设置并发数
|
||||||
|
try:
|
||||||
|
workers = int(args[0])
|
||||||
|
if workers < 1 or workers > 10:
|
||||||
|
await update.message.reply_text("❌ 并发数范围: 1-10")
|
||||||
|
return
|
||||||
|
|
||||||
|
config["concurrent"]["workers"] = workers
|
||||||
|
config["concurrent"]["enabled"] = True # 设置并发数时自动开启
|
||||||
|
|
||||||
|
# 写回文件
|
||||||
|
with open(CONFIG_FILE, "wb") as f:
|
||||||
|
tomli_w.dump(config, f)
|
||||||
|
|
||||||
|
await update.message.reply_text(
|
||||||
|
f"<b>⚡ 并发处理</b>\n\n"
|
||||||
|
f"状态: ✅ 已开启\n"
|
||||||
|
f"并发数: {workers}\n\n"
|
||||||
|
f"将同时启动 {workers} 个浏览器实例并行处理账号\n\n"
|
||||||
|
f"💡 使用 /reload 立即生效",
|
||||||
|
parse_mode="HTML"
|
||||||
|
)
|
||||||
|
|
||||||
|
except ValueError:
|
||||||
|
await update.message.reply_text(
|
||||||
|
"❌ 无效的并发数\n\n"
|
||||||
|
"用法:\n"
|
||||||
|
"/concurrent - 切换开关\n"
|
||||||
|
"/concurrent 4 - 设置为 4 并发"
|
||||||
|
)
|
||||||
|
|
||||||
|
except ImportError:
|
||||||
|
await update.message.reply_text(
|
||||||
|
"❌ 缺少 tomli_w 依赖\n"
|
||||||
|
"请运行: uv add tomli_w"
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
await update.message.reply_text(f"❌ 修改配置失败: {e}")
|
||||||
|
|
||||||
@admin_only
|
@admin_only
|
||||||
async def cmd_reload(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
async def cmd_reload(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
"""重载配置文件"""
|
"""重载配置文件"""
|
||||||
|
|||||||
Reference in New Issue
Block a user