Skip to main content

NapCat SDK for Python - Fully typed and async ready

Project description

NapCat Logo

NapCat-SDK for Python

Type-SafeAsync-ReadyFramework-Free

PyPI License Python Version Typing

zread Ask DeepWiki QQ Group

Stop guessing parameter types. Let the IDE do the work.

告别查文档,享受 100% 类型覆盖 带来的极致补全体验。


⚡ The "IDE Magic"

这就是为什么你应该选择 NapCat-SDK:

智能 API 补全 + 精准参数提示 原生开发体验 + 零心智负担
API Completion Native Dev

👆 真正的 160+ API 全量类型覆盖,每一次按键都有 IDE 的守护。


✨ Features

  • 🔄 协议自动同步: 基于 OpenAPI 自动构建,与 NapCat 上游定义零时差同步。
  • 🧘 原生无框架: 拒绝框架“黑魔法”,纯粹 Python 语法,零心智负担。
  • 💎 极致类型: 100% 类型覆盖,每一个参数都有定义,享受极致 IDE 补全。
  • 完全异步: 基于 websockets + asyncio 原生开发,无惧高并发。
  • 🔌 双模支持: 完美支持正向 (Client) 与反向 (Server) WebSocket 连接。
  • 📦 极轻量级: 仅依赖 websocketsorjson,极速安装,拒绝臃肿。

📦 Installation

uv add napcat-sdk
# or
pip install napcat-sdk

📸 Quick Look

Code Example

[!IMPORTANT] client.events() 方法已移除,请直接使用 async for event in client 监听事件。 当前截图因录制成本暂未更新,代码示例请以本文文本为准。

🖱️ 点击复制代码文本
import asyncio
from napcat import NapCatClient, GroupMessageEvent, PrivateMessageEvent

async def listen_private(client: NapCatClient):
    print(">> 私聊监听启动")
    async for event in client:
        match event:
            case PrivateMessageEvent():
                print(f"[私信] {event.sender.nickname}: {event.raw_message}")
                await event.send_msg("已阅")
            case _:
                pass

async def listen_group(client: NapCatClient):
    print(">> 群聊监听启动")
    async for event in client:
        match event:
            case GroupMessageEvent():
                print(f"[群消息] {event.group_id}: {event.raw_message}")
                await event.reply("复读")
            case _:
                pass

async def main():
    # 正向 WebSocket 连接(支持自动管理上下文)
    client = NapCatClient(ws_url="ws://localhost:3001", token="123")
    await asyncio.gather(
        listen_private(client),
        listen_group(client)
    )

if __name__ == "__main__":
    asyncio.run(main())

📖 Usage

NapCatClient 支持直接作为异步迭代器使用,并会在迭代开始/结束时自动管理连接生命周期。

🔌 反向 WebSocket 服务端 (Server Mode)

如果你配置 NapCat 主动连接你的程序,请使用 ReverseWebSocketServer

import asyncio
from napcat import ReverseWebSocketServer, NapCatClient, GroupMessageEvent

async def handler(client: NapCatClient):
    """每个新的 WebSocket 连接都会触发此回调"""
    print(f"Bot Connected! Self ID: {client.self_id}")
    
    # 就像 Client 模式一样处理事件
    async for event in client:
        if isinstance(event, GroupMessageEvent):
            print(f"收到群 {event.group_id} 消息: {event.raw_message}")
            await event.reply("服务端已收到")

async def main():
    # 启动服务器监听 8080 端口
    server = ReverseWebSocketServer(handler, host="0.0.0.0", port=8080, token="my-token")
    await server.run_forever()

if __name__ == "__main__":
    asyncio.run(main())
🖼️ 发送富媒体消息 (图片/At/回复)

SDK 提供了强类型的 MessageSegment,告别手动拼接 CQ 码。

from napcat import (
    NapCatClient,
    Text,
    Image,
    At,
)

async def send_rich_media(client: NapCatClient, group_id: int):
    # 构建消息链:@某人 + 文本 + 图片
    message = [
        At(qq="12345678"),
        Text(text=" 来看这张图:"),
        Image(file="https://example.com/image.jpg"),
    ]
    
    # 直接发送列表
    await client.send_group_msg(group_id=group_id, message=message)
🔗 调用 OneBot API (100% 类型提示)

所有 API 方法都直接挂载在 client 上,拥有完整的参数类型检查。

async def managing_bot(client: NapCatClient):
    # 获取登录号信息
    login_info = await client.get_login_info()
    print(f"当前登录: {login_info['nickname']}")

    # 获取群成员列表
    members = await client.get_group_member_list(
        group_id=123456, 
        no_cache=True
    )
    for member in members:
        print(f"成员: {member['card'] or member['nickname']}")
    
    # 动态调用(针对未收录的 API)
    await client.call_action("some_new_action", {"param": 1})

🛠️ Development

本项目使用 uv 进行包管理。

  1. 克隆项目并同步环境:
git clone --recursive https://github.com/faithleysath/napcat-sdk.git
cd napcat-sdk
uv sync
cd NapCatQQ
pnpm install
  1. 同步协议定义: SDK 的核心代码由 OpenAPI 规范自动生成,请运行以下命令重新生成代码:
uv run scripts/schema-codegen.py

这会自动更新 src/napcat/types/messages/generated.pysrc/napcat/types/schemas.pysrc/napcat/client_api.py 以及相关的 __init__.py

  1. 运行测试:
# 运行 tests
uv run pytest src/tests -q

📄 License

MIT License © 2025 faithleysath

Star History Chart

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

napcat_sdk-0.5.0.tar.gz (55.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

napcat_sdk-0.5.0-py3-none-any.whl (72.5 kB view details)

Uploaded Python 3

File details

Details for the file napcat_sdk-0.5.0.tar.gz.

File metadata

  • Download URL: napcat_sdk-0.5.0.tar.gz
  • Upload date:
  • Size: 55.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for napcat_sdk-0.5.0.tar.gz
Algorithm Hash digest
SHA256 5ad1fa8d41d3e5c20e8e650e3b2731bd0e8c39b048aa3d57c739338736f33cdc
MD5 5fc1ede6da5ee8f30f973681bb6e88d6
BLAKE2b-256 1f9b384629bbf2cdb5bbd599a2207bc62a74d98033d6cff00457f0a688d58165

See more details on using hashes here.

File details

Details for the file napcat_sdk-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: napcat_sdk-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 72.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for napcat_sdk-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b76d1c57c3463bf310d22fe2ce4720d55919cffe148eecf3e868445cf73abab4
MD5 3bf79608bfcf3f967ebb833651ebabf1
BLAKE2b-256 38da188f5efe9f3dceaa031c47657b8aa9a0af80080ecfb5bce1ecb5807e8480

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page