[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "guardden" version = "0.1.0" description = "A comprehensive Discord moderation bot with AI-powered content filtering" readme = "README.md" license = "MIT" requires-python = ">=3.11" authors = [ {name = "GuardDen Team"} ] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] dependencies = [ "discord.py>=2.3.0", "asyncpg>=0.29.0", "pydantic>=2.5.0", "pydantic-settings>=2.1.0", "aiohttp>=3.9.0", "python-dotenv>=1.0.0", "alembic>=1.13.0", "sqlalchemy>=2.0.0", "fastapi>=0.110.0", "uvicorn>=0.27.0", "authlib>=1.3.0", "httpx>=0.27.0", "itsdangerous>=2.1.2", ] [project.optional-dependencies] dev = [ "pytest>=7.4.0", "pytest-asyncio>=0.23.0", "pytest-cov>=4.1.0", "aiosqlite>=0.19.0", "ruff>=0.1.0", "mypy>=1.7.0", "pre-commit>=3.6.0", "safety>=2.3.0", "bandit>=1.7.0", ] ai = [ "anthropic>=0.18.0", "openai>=1.10.0", "pillow>=10.2.0", ] voice = [ "speechrecognition>=3.10.0", "pydub>=0.25.0", ] monitoring = [ "structlog>=23.2.0", "prometheus-client>=0.19.0", "opentelemetry-api>=1.21.0", "opentelemetry-sdk>=1.21.0", "opentelemetry-instrumentation>=0.42b0", "psutil>=5.9.0", "aiohttp>=3.9.0", ] [project.scripts] guardden = "guardden.__main__:main" [tool.setuptools.packages.find] where = ["src"] [tool.ruff] target-version = "py311" line-length = 100 src = ["src", "tests"] [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # Pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade "ARG", # flake8-unused-arguments "SIM", # flake8-simplify ] ignore = [ "E501", # line too long (handled by formatter) "B008", # do not perform function calls in argument defaults ] [tool.ruff.lint.isort] known-first-party = ["guardden"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = "-v --tb=short" [tool.mypy] python_version = "3.11" strict = true warn_return_any = true warn_unused_ignores = true plugins = ["pydantic.mypy"] [[tool.mypy.overrides]] module = ["discord.*", "asyncpg.*"] ignore_missing_imports = true