File size: 3,012 Bytes
8ede856
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
[project]
name = "AstrBot"
version = "4.20.0"
description = "Easy-to-use multi-platform LLM chatbot and development framework"
readme = "README.md"
requires-python = ">=3.12"

keywords = ["Astrbot", "Astrbot Module", "Astrbot Plugin"]

dependencies = [
  "aiocqhttp>=1.4.4",
  "aiodocker>=0.24.0",
  "aiohttp>=3.11.18",
  "aiosqlite>=0.21.0",
  "anthropic>=0.51.0",
  "apscheduler>=3.11.0",
  "beautifulsoup4>=4.13.4",
  "certifi>=2025.4.26",
  "chardet~=5.1.0",
  "loguru>=0.7.2",
  "cryptography>=44.0.3",
  "dashscope>=1.23.2",
  "defusedxml>=0.7.1",
  "deprecated>=1.2.18",
  "dingtalk-stream>=0.22.1",
  "docstring-parser>=0.16",
  "faiss-cpu>=1.12.0",
  "filelock>=3.18.0",
  "google-genai>=1.56.0",
  "lark-oapi>=1.4.15",
  "lxml-html-clean>=0.4.2",
  "mcp>=1.8.0",
  "openai>=1.78.0",
  "ormsgpack>=1.9.1",
  "pillow>=11.2.1",
  "pip>=25.1.1",
  "psutil>=5.8.0,<7.2.0",
  "py-cord>=2.6.1",
  "pydantic>=2.12.5",
  "pydub>=0.25.1",
  "pyjwt>=2.10.1",
  "python-telegram-bot>=22.6",
  "qq-botpy>=1.2.1",
  "quart>=0.20.0",
  "readability-lxml>=0.8.4.1",
  "silk-python>=0.2.6",
  "slack-sdk>=3.35.0",
  "sqlalchemy[asyncio]>=2.0.41",
  "sqlmodel>=0.0.24",
  "telegramify-markdown>=1.0.0",
  "watchfiles>=1.0.5",
  "websockets>=15.0.1",
  "wechatpy>=1.8.18",
  "audioop-lts ; python_full_version >= '3.13'",
  "click>=8.2.1",
  "pypdf>=6.1.1",
  "aiofiles>=25.1.0",
  "rank-bm25>=0.2.2",
  "jieba>=0.42.1",
  "markitdown-no-magika[docx,xls,xlsx]>=0.1.2",
  "xinference-client",
  "tenacity>=9.1.2",
  "shipyard-python-sdk>=0.2.4",
  "shipyard-neo-sdk>=0.2.0",
  "python-socks>=2.8.0",
  "packaging>=24.2",
]

[dependency-groups]
dev = [
  "commitizen>=4.9.1",
  "pytest>=8.4.1",
  "pytest-asyncio>=1.1.0",
  "pytest-cov>=6.2.1",
  "ruff>=0.15.0",
]

[project.scripts]
astrbot = "astrbot.cli.__main__:cli"

[tool.ruff]
exclude = ["astrbot/core/utils/t2i/local_strategy.py", "astrbot/api/all.py", "tests"]
line-length = 88
target-version = "py310"

[tool.ruff.lint]
select = [
  "F",     # Pyflakes
  "W",     # pycodestyle warnings
  "E",     # pycodestyle errors
  "ASYNC", # flake8-async
  "C4",    # flake8-comprehensions
  "Q",     # flake8-quotes
  "I",     # import-order
  "UP",    # pyupgrade
  # "SIM", # flake8-simplify 
]
ignore = [
  "F403",
  "F405",
  "E501",
  "ASYNC230", # TODO: handle ASYNC230 in AstrBot
  "ASYNC240", # TODO: handle ASYNC240 in AstrBot
]

[tool.pyright]
typeCheckingMode = "basic"
pythonVersion = "3.10"
reportMissingTypeStubs = false
reportMissingImports = false
include = ["astrbot"]
exclude = ["dashboard", "node_modules", "dist", "data", "tests"]

[tool.hatch.metadata]
allow-direct-references = true

# Include bundled dashboard dist even though it is not tracked by VCS.
[tool.hatch.build.targets.wheel]
artifacts = ["astrbot/dashboard/dist/**"]

# Custom build hook: builds the Vue dashboard and copies dist into the package.
[tool.hatch.build.hooks.custom]
path = "scripts/hatch_build.py"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"