[project] name = "qqbotsdk" version = "0.1.0" description = "QQ 官方机器人 Python SDK(WebSocket / Webhook)" license = "MIT" license-files = ["LICENSE"] readme = "README.md" authors = [ { name = "snowy-yang", email = "102860110+snowy-yang@users.noreply.github.com" }, ] requires-python = ">=3.13" dependencies = [ "aiohttp>=3.14.3", "cryptography>=50.0.1", "loguru>=0.7.3", "pyee>=14.0.0", "python-dotenv>=1.2.3", "ujson>=6.0.0", ] [project.scripts] qqbotsdk = "qqbotsdk:main" [build-system] requires = ["uv_build>=0.12.7,<0.13.0"] build-backend = "uv_build" [dependency-groups] dev = ["pyright>=1.1.411", "pytest>=8.3.0", "pytest-asyncio>=0.24.0", "ruff>=0.16.5"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] [tool.ruff] target-version = "py313" line-length = 88 indent-width = 4 [tool.ruff.lint] select = [ "E", # pycodestyle errors "F", # Pyflakes "I", # isort "N", # pep8-naming "W", # pycodestyle warnings "UP", # pyupgrade "B", # flake8-bugbear "C4", # flake8-comprehensions "SIM", # flake8-simplify ] ignore = [ "E501", # line too long "B008", # do not perform function calls in argument defaults ] [tool.ruff.lint.pydocstyle] convention = "google" [tool.ruff.lint.isort] known-first-party = ["qqbotsdk"] [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = ["S"] [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" [tool.pyright] typeCheckingMode = "standard" pythonVersion = "3.13" include = ["src"] exclude = ["**/__pycache__", "**/.*", "**/node_modules", ".venv"] reportMissingImports = true reportMissingTypeStubs = false reportUnknownParameterType = false reportUnknownVariableType = false reportUnknownMemberType = false