← Back to Plugins
Tools

Nonebot Plugin To Skill

ssttkkl By ssttkkl 👁 52 views ▲ 0 votes

Convert NoneBot2 plugins into OpenClaw skills - Documentation and best practices

GitHub

README

# NoneBot2-to-Skill Converter

将 NoneBot2 插件转换为 OpenClaw Skill 的转换指南和工具。

## 简介

本项目提供了详细的文档和最佳实践,用于将 NoneBot2 聊天机器人插件转换为独立的 OpenClaw CLI 工具。

## 特性

- 🔄 完整的转换工作流指南
- 📋 命令提取和转换模式
- 🛠️ 代码重构最佳实践
- 📦 Skill 结构生成
- 🧪 测试和验证方法

## 支持的转换模式

| NoneBot2 Matcher | CLI 转换方式 |
|-----------------|-------------|
| `on_command` | `argparse` + 异步函数 |
| `on_regex` | 正则参数验证 |
| `on_message` | 显式文本检查 |
| `on_startswith/endswith` | 参数验证 |
| `on_fullmatch` | `choices` 限制 |

## 转换示例

### 转换前 (NoneBot2)

```python
from nonebot import on_command
from nonebot.adapters import Message
from nonebot.params import CommandArg

ping = on_command("ping")

@ping.handle()
async def handle_ping(args: Message = CommandArg()):
    msg = args.extract_plain_text()
    await ping.finish(f"Pong! {msg}")
```

### 转换后 (CLI)

```python
import argparse
import asyncio

async def ping(message=None):
    print(f"Pong! {message}" if message else "Pong!")

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("message", nargs="?")
    args = parser.parse_args()
    asyncio.run(ping(args.message))

if __name__ == "__main__":
    main()
```

## 完整案例

- [Majsoul CLI](https://github.com/ssttkkl/majsoul-query-skill) - 从 nonebot-plugin-majsoul 转换

## 使用说明

详细的转换流程请参考 `SKILL.md`,包含:

1. 项目结构识别
2. 命令提取方法
3. 代码转换模式
4. Skill 类型判断
5. 包管理器配置
6. 测试验证

## 依赖管理

推荐使用 `uv` 作为包管理器:

```bash
# 初始化项目
uv init

# 添加依赖
uv add httpx pydantic

# 安装依赖
uv sync
```

## License

MIT License
tools

Comments

Sign in to leave a comment

Loading comments...