Skill: jayxu-d/my-generate-qr-code (version 1.0.0)

--- name: my-generate-qr-code description: 生成二维码/条形码，支持文本、URL、WiFi 配置等内容，可自定义尺寸、颜色并指定保存路径 permissions: 文件写入权限（用于保存二维码图片） --- # Generate QR Code Skill（生成二维码技能） ## 1. Description 当用户需要将文本、URL、WiFi 信息等转换为可视化二维码时，使用此技能生成二维码图片，并保存到指定路径（默认保存到桌面），支持自定义尺寸和颜色。 ## 2. When to use - 用户说：“帮我把 https://openclaw.ai 生成二维码” - 用户说：“生成一个包含 WiFi 信息的二维码，名称：MyWiFi，密码：12345678” - 用户说：“生成黑色二维码，内容是‘Hello OpenClaw’，保存到 D 盘根目录” - 用户说：“帮我做一个 400px 大小的二维码，内容是我的手机号 13800138000” ## 3. How to use 1. 从用户消息中提取核心参数： - 必选：生成内容（文本/URL/WiFi 信息，WiFi 格式需为“WIFI:S:名称;T:类型;P:密码;;”）； - 可选：尺寸（默认 300px）、颜色（默认黑色）、保存路径（默认桌面）； 2. 若用户未指定可选参数，使用默认值； 3. 调用 agent.py 中的 generate_qr 函数执行生成操作； 4. 返回结果：告知用户二维码保存路径，若生成失败，说明具体原因（如路径无权限、内容为空）。 ## 4. Implementation（代码关联说明） - 依赖库：qrcode（生成二维码）、Pillow（图片处理）； - 核心函数：async def generate_qr(text: str, size: int = 300, color: str = "black", save_path: str = None)； - 参数说明： - text：二维码内容（必选）； - size：二维码尺寸（单位 px，默认 300）； - color：填充颜色（默认 black，支持英文颜色名或十六进制色值，如 #FF0000）； - save_path：保存路径（默认桌面，文件名：qr_code.png）。 ## 5. Edge cases - 内容为空：回复“请提供需要生成二维码的内容（如文本、URL、WiFi 信息）”； - 保存路径无权限：回复“指定路径无写入权限，请更换保存路径（如桌面）”； - 未安装依赖库：自动尝试安装 qrcode 和 Pillow，若安装失败，提示用户手动执行“pip install qrcode pillow”； - 特殊字符内容：自动过滤无效字符，确保二维码可正常识别。

path: agent.py
content: 
import qrcode
from PIL import Image
import os
import subprocess
import sys

# 自动安装依赖库（若用户未安装）
def install_dependencies():
    required_packages = ["qrcode", "pillow"]
    for package in required_packages:
        try:
            __import__(package)  # 检查库是否已安装
        except ImportError:
            # 自动安装缺失的库
            subprocess.check_call([sys.executable, "-m", "pip", "install", package])

# 初始化：安装依赖库
install_dependencies()

async def generate_qr(text: str, size: int = 300, color: str = "black", save_path: str = None) -> str:
    """
    生成二维码并保存到指定路径，返回生成结果
    
    参数：
    text: 二维码内容（必选，文本/URL/WiFi 信息等）
    size: 二维码尺寸（px，默认 300）
    color: 填充颜色（默认 black，支持英文或十六进制色值）
    save_path: 保存路径（默认桌面 qr_code.png）
    """
    # 1. 校验必填参数
    if not text or text.strip() == "":
        return "生成失败：请提供需要生成二维码的内容（如文本、URL、WiFi 信息）"
    
    # 2. 处理默认保存路径（适配 Windows/macOS/Linux 多系统）
    if not save_path:
        if sys.platform == "win32":
            # Windows 桌面路径
            save_path = os.path.join(os.environ["USERPROFILE"], "Desktop", "qr_code.png")
        else:
            # macOS/Linux 桌面路径
            save_path = os.path.expanduser("~/Desktop/qr_code.png")
    
    # 3. 生成二维码
    try:
        # 配置二维码参数（version：1-40，box_size：方块大小，border：边框宽度）
        qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_M,  # 中等容错率（30% 错误可识别）
            box_size=10,
            border=4,
        )
        qr.add_data(text.strip())  # 添加二维码内容
        qr.make(fit=True)  # 自动适配内容大小
        
        # 生成图片并调整尺寸
        img = qr.make_image(fill_color=color, back_color="white")
        img = img.resize((size, size), Image.Resampling.LANCZOS)  # 高质量缩放
        
        # 确保保存目录存在（若路径不存在则创建）
        save_dir = os.path.dirname(save_path)
        if not os.path.exists(save_dir):
            os.makedirs(save_dir)
        
        # 保存图片
        img.save(save_path)
        return f"二维码生成成功！已保存到：{save_path}\n提示：若无法找到文件，可复制路径到文件管理器直接打开"
    
    except PermissionError:
        return f"生成失败：无权限写入指定路径（{save_path}），请更换保存路径（如桌面）或提升文件权限"
    except Exception as e:
        return f"生成失败：未知错误 - {str(e)}"



Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)