[tool.poetry]
name = "nonebot-bison"
version = "0.9.5"
description = "Subscribe message from social medias"
authors = ["felinae98 <felinae225@qq.com>"]
license = "MIT"
homepage = "https://github.com/felinae98/nonebot-bison"
keywords = ["nonebot", "nonebot2", "qqbot"]
readme = "README.md"
include = ["nonebot_bison/admin_page/dist/**/*"]
classifiers = [
  "Development Status :: 4 - Beta",
  "Operating System :: POSIX :: Linux",
  "Operating System :: Microsoft :: Windows",
  "Operating System :: MacOS",
  "Programming Language :: Python :: 3.10",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
  "Programming Language :: Python :: Implementation :: CPython",
  "License :: OSI Approved :: MIT License",
]

[tool.poetry.dependencies]
python = ">=3.10,<4.0.0"
beautifulsoup4 = ">=4.12.3"
feedparser = "^6.0.11"
httpx = ">=0.27.2"
nonebot2 = { extras = ["fastapi"], version = "^2.3.3" }
nonebot-adapter-onebot = "^2.4.5"
nonebot-plugin-htmlrender = ">=0.3.5"
nonebot-plugin-datastore = ">=1.3.0,<2.0.0"
nonebot-plugin-apscheduler = ">=0.5.0"
nonebot-plugin-send-anything-anywhere = ">=0.7.1,<0.7.2"
pillow = ">=11.0.0,<11.1"
pyjwt = "^2.9.0"
python-socketio = "^5.11.4"
tinydb = "^4.8.0"
qrcode = "^7.4.2"
pydantic = ">=2.9.2,<3.0.0,!=2.5.0,!=2.5.1"
lxml = ">=5.3.0"
yarl = ">=1.11.1"
hishel = "^0.0.30"
expiringdictx = "^1.1.0"
rapidfuzz = "^3.9.7"

[tool.poetry.group.dev.dependencies]
ipdb = "^0.13.13"
nonemoji = "^0.1.4"
nb-cli = "^1.4.2"
pre-commit = "^4.0.1"
ruff = "^0.8.2"

[tool.poetry.group.test.dependencies]
flaky = "^3.8.1"
nonebug = "^0.3.7"
nonebug-saa = "^0.4.1"
pytest = ">=8.3.3,<9.0.0"
pytest-asyncio = ">=0.24.0,<0.24.1"
pytest-cov = ">=6.0.0,<7"
pytest-mock = "^3.14.0"
pytest-xdist = { extras = ["psutil"], version = "^3.6.1" }
respx = ">=0.21.1,<0.22"
freezegun = "^1.5.1"

[tool.poetry.group.docker]
optional = true

[tool.poetry.group.docker.dependencies]
nb-cli = "^1.4.2"
nonebot2 = { extras = ["fastapi", "aiohttp"], version = "^2.3.3" }
nonebot-adapter-red = "^0.9.0"
nonebot-adapter-qq = "^1.5.1"
poetry-core = "^1.9.0"

[tool.poetry.extras]
cli = ["anyio", "click", "typing-extensions"]
yaml = ["pyyaml"]
all = ["anyio", "click", "typing-extensions", "pyyaml"]

[tool.poetry.plugins.nb_scripts]
bison = "nonebot_bison.script.cli:main"

[build-system]
requires = ["poetry-core>=1.9.0"]
build-backend = "poetry.core.masonry.api"

[tool.pytest.ini_options]
markers = [
  "compare: compare fetching result with rsshub",
  "render: render img by chrome",
  "external: use external resources",
]
asyncio_mode = "auto"

[tool.ruff]
line-length = 120
target-version = "py310"

[tool.ruff.lint]
select = [
  "F",     # Pyflakes
  "W",     # pycodestyle warnings
  "E",     # pycodestyle errors
  "I",     # isort
  "UP",    # pyupgrade
  "ASYNC", # flake8-async
  "C4",    # flake8-comprehensions
  "T10",   # flake8-debugger
  "T20",   # flake8-print
  "PYI",   # flake8-pyi
  "PT",    # flake8-pytest-style
  "Q",     # flake8-quotes
  "TID",   # flake8-tidy-imports
  "RUF",   # Ruff-specific rules
]
ignore = [
  "E402",   # module-import-not-at-top-of-file
  "UP037",  # quoted-annotation
  "RUF001", # ambiguous-unicode-character-string
  "RUF002", # ambiguous-unicode-character-docstring
  "RUF003", # ambiguous-unicode-character-comment
]

[tool.ruff.format]
line-ending = "lf"

[tool.ruff.lint.isort]
force-sort-within-sections = true
known-first-party = ["nonebot_bison", "tests/*"]
extra-standard-library = ["typing_extensions"]

[tool.ruff.lint.flake8-pytest-style]
fixture-parentheses = false
mark-parentheses = false

[tool.ruff.lint.pyupgrade]
keep-runtime-typing = true

[tool.nonebot]
adapters = [
  { name = "OneBot V11", module_name = "nonebot.adapters.onebot.v11" },
]
plugins = ["nonebot_bison"]
plugin_dirs = ["extra_plugins"]
builtin_plugins = ["echo"]

[tool.pyright]
typeCheckingMode = "basic"
reportShadowedImports = false
disableBytesTypePromotions = true
pythonVersion = "3.10"
pythonPlatform = "All"
executionEnvironments = [
  { root = "./tests", extraPaths = [
    "./",
  ] },
  { root = "./" },
]
defineConstant = { PYDANTIC_V2 = true }

[[tool.poetry.source]]
name = "offical-source"
url = "https://pypi.org/simple/"
priority = "primary"