Files
autoPlus/bot/handlers/settings.py
2026-01-30 10:48:56 +08:00

97 lines
2.8 KiB
Python

"""
/set 命令处理器 - 用户设置
"""
from telegram import Update
from telegram.ext import ContextTypes
from bot.middlewares.auth import require_auth
DEFAULT_WORKERS = 2
MIN_WORKERS = 1
MAX_WORKERS = 5
def get_user_settings(context: ContextTypes.DEFAULT_TYPE, user_id: int) -> dict:
"""获取用户设置"""
if "user_settings" not in context.bot_data:
context.bot_data["user_settings"] = {}
if user_id not in context.bot_data["user_settings"]:
context.bot_data["user_settings"][user_id] = {
"workers": DEFAULT_WORKERS,
}
return context.bot_data["user_settings"][user_id]
def set_user_setting(
context: ContextTypes.DEFAULT_TYPE, user_id: int, key: str, value: any
) -> None:
"""设置用户配置"""
settings = get_user_settings(context, user_id)
settings[key] = value
@require_auth
async def set_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
"""
处理 /set 命令 - 用户设置
用法:
/set - 查看当前设置
/set workers <数量> - 设置并发数 (1-5)
"""
user_id = update.effective_user.id
settings = get_user_settings(context, user_id)
# 无参数:显示当前设置
if not context.args:
await update.message.reply_text(
f"⚙️ **当前设置**\n\n"
f"👷 并发数: {settings['workers']}\n\n"
f"使用 `/set workers <数量>` 修改并发数 ({MIN_WORKERS}-{MAX_WORKERS})",
parse_mode="Markdown",
)
return
# 解析设置项
setting_name = context.args[0].lower()
if setting_name == "workers":
if len(context.args) < 2:
await update.message.reply_text(
f"❌ 请指定并发数\n\n"
f"用法: `/set workers <数量>`\n"
f"范围: {MIN_WORKERS}-{MAX_WORKERS}",
parse_mode="Markdown",
)
return
try:
workers = int(context.args[1])
if workers < MIN_WORKERS:
workers = MIN_WORKERS
elif workers > MAX_WORKERS:
workers = MAX_WORKERS
set_user_setting(context, user_id, "workers", workers)
await update.message.reply_text(
f"✅ 并发数已设置为 **{workers}**",
parse_mode="Markdown",
)
except ValueError:
await update.message.reply_text(
f"❌ 无效的数值: `{context.args[1]}`",
parse_mode="Markdown",
)
else:
await update.message.reply_text(
f"❌ 未知设置项: `{setting_name}`\n\n"
f"可用设置:\n"
f"• `workers` - 并发数 ({MIN_WORKERS}-{MAX_WORKERS})",
parse_mode="Markdown",
)