Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Lingchu Bot

English | 中文

CI PyPI Downloads Image size License Python NoneBot2 Docs Gitmoji FOSSA Status

Lingchu Bot is an application-side group management bot powered by NoneBot2. It currently focuses on QQ group management through the OneBot V11 adapter while keeping a plugin, platform registry, configuration, storage, permission, and documentation structure that can grow toward broader cross-platform workflows.

Zread Q&A

DeepWiki Q&A

Project status

Lingchu Bot has published its first 0.0.1 formal release. The project is still early and may make breaking changes before 1.0.0, but the current release is intended to be installable, documented, and reproducible through the release workflow.

Useful entry points:

What is in this repository

  • nonebot-plugin-lingchu-bot: the Python package declared in pyproject.toml.
  • src/plugins/nonebot_plugin_lingchu_bot: the core NoneBot plugin, including metadata, startup hooks, platform registry, command handlers, permissions, i18n, repositories, and storage helpers.
  • [tool.nonebot] in pyproject.toml: local plugin loading configuration, installed adapter declarations, and dependency plugin declarations.
  • apps/docs: the Astro / Starlight documentation site, with Chinese and English content.
  • Dockerfile / docker-compose.yml: container runtime flow. The image generates /tmp/bot.py during build through nb-cli; the repository root does not ship a committed local bot.py.
  • scripts/setup.sh: cross-platform initialization script for local development.

Capabilities

Capability Description
Member moderation Mute, unmute, kick, block, unblock, clear blocklist, protect, and unprotect.
Speech management Member mute/unmute, whole-group mute/unmute, and recent message recall.
Group operations Set group name, set group avatar when supported, set member card/title/admin, send announcements when supported, and leave the current group.
Remote management Operate on another group by group ID or fuzzy group name matching, including remote mute/unmute, whole-group mute/unmute, kick, block/unblock, and announcement.
Bot control silence / speak suppress or resume response messages while still allowing commands to execute; boot / shutdown enable or disable command handlers.
Menu system The 菜单 / menu command lists platform-, protocol-, and implementation-filtered submenu entries.
Runtime configuration Plugin-owned TOML files under the localstore configuration directory, plus higher-priority NoneBot / environment overrides.
Permissions and protection UID-based superusers, platform account mapping, command grants, platform runtime role passthrough, blocklist, and protected-subject safeguards.
Message store and API audit Optional recording of events, processing status, bot lifecycle events, and platform API call summaries.
Runtime i18n gettext / Babel catalogs for Simplified Chinese and English feedback text.
Scheduler Periodic tasks and cleanup through nonebot-plugin-apscheduler.

Future cross-platform and non-group-management features depend on later implementation and tests.

Adapter support

The currently implemented platform profile is QQ, and the only active adapter is OneBot V11:

LINGCHUAdapter=~onebot.v11

When LINGCHUAdapter is unset, Lingchu selects ~onebot.v11 by default. The selected adapter must also be loaded and registered by NoneBot; otherwise startup fails with a clear adapter-not-loaded error.

Only OneBot V11 is implemented. Configuring any other adapter ID (such as ~milky, ~qq, or ~onebot.v12) fails startup with PlatformAdapterUnknownError. Configuring multiple known adapters for the same platform fails with PlatformAdapterConflictError.

OneBot V11 currently has default and NapCat implementation paths. Some features are implementation-gated: for example, group announcement and group avatar entries are shown only when the selected implementation supports them, and remote announcement requires NapCat.Onebot >= 4.18.0.

Quick start

Requirements

  • Python 3.13 (pyproject.toml requires >=3.13, <4.0; targets 3.13)
  • uv
  • Git
  • A usable NoneBot runtime and OneBot V11 connection / account setup
  • Node.js 24+ and pnpm for the docs / frontend workspace and the full setup script

Option A — Install via NB-CLI (recommended)

nb plugin install nonebot-plugin-lingchu-bot

This installs the published package from PyPI and registers it with NoneBot. After installation, add nonebot_plugin_lingchu_bot to your NoneBot plugin list or let NB-CLI manage it automatically.

Option B — Use as a local plugin directory

Clone the repository and initialize:

git clone https://github.com/xinvxueyuan/lingchu-bot.git
cd lingchu-bot
chmod +x scripts/setup.sh
./scripts/setup.sh

The setup script checks the operating system and toolchain, installs Python and Node.js dependencies, creates environment files, configures Git hooks, and can optionally install Playwright browsers.

Manual alternative:

uv sync --frozen
pnpm install
pnpm exec husky
cp .env.example .env

To load Lingchu Bot from an existing NoneBot project, point plugin_dirs at the cloned src/plugins directory:

# In the target NoneBot project's pyproject.toml
[tool.nonebot]
plugin_dirs = ["path/to/lingchu-bot/src/plugins"]

Option C — Run in Docker

# docker-compose.yml reads .env.prod; create it from your deployment settings.
cp .env.example .env.prod
docker compose up --build

Before connecting to a real platform, prepare the account, network, reverse WebSocket / HTTP settings, and permissions required by NoneBot and the OneBot V11 implementation you use.

Configuration

Deployment fields are resolved by NoneBot from OS environment variables, its .env files or global configuration, then code defaults. Lingchu does not implement a second dotenv or TOML override layer. Startup does not create deployment configuration or install JSON Schema files.

Online-editable command, menu-trigger, and platform-permission overrides are stored separately in localstore-owned runtime-overrides.toml. Boolean values in NoneBot .env files must use JSON-style lowercase true / false, not Python-style True / False.

Group Setting Purpose
NoneBot Core HOST, PORT NoneBot server host and port.
NoneBot Core NICKNAME Bot nickname(s).
NoneBot Core LOG_LEVEL NoneBot log level.
NoneBot Core COMMAND_START, COMMAND_SEP NoneBot command parsing tokens.
NoneBot Core FASTAPI_DOCS_URL, FASTAPI_REDOC_URL FastAPI docs endpoints; disable in production.
Container Detection LINGCHU_IN_CONTAINERS Whether the bot runs inside a container (config.in_containers).
Lingchu Runtime LINGCHUAdapter / LINGCHU_ADAPTER Select the active adapter; current supported value is ~onebot.v11.
Lingchu Runtime LINGCHU_SUPERUSERS UID-to-platform account mapping for Lingchu superusers.
Lingchu Runtime LINGCHU_LOCALE Runtime locale; available catalogs are zh_CN and en_US.
Lingchu Runtime LINGCHU_SUPERUSER_KEY Superuser key string (superuser_key).
Localstore LOCALSTORE_USE_CWD Store localstore data / config / cache under the project directory when true.
Message Store LINGCHU_MESSAGE_STORE_ENABLED Enable message-store runtime hooks.
Message Store LINGCHU_MESSAGE_STORE_RETENTION_DAYS Retention window for message records; 0 disables day-based expiry.
Message Store LINGCHU_MESSAGE_STORE_SUMMARY_LIMIT Maximum summary length for text / data / result payloads.
Message Store LINGCHU_MESSAGE_STORE_RECORD_API_CALLS Record platform API call summaries.
Message Store LINGCHU_MESSAGE_STORE_CLEANUP_ENABLED Enable expired message cleanup.
Recall LINGCHU_RECALL_MESSAGE_DEFAULT_COUNT Default count for the message recall command (1100).
Protected Subjects LINGCHU_PROTECTED_SUBJECT_FEATURE_KEYS Side-effect command keys blocked when their target user is protected.
Database SQLALCHEMY_DATABASE_URL SQLAlchemy database URL; supports SQLite / PostgreSQL / MySQL / MariaDB / Oracle / SQL Server. Unset uses default SQLite.
Database ALEMBIC_STARTUP_CHECK Set to true in production to enforce schema migration checks on startup.

Example runtime-overrides.toml:

permission_platform_runtime_passthrough = true

[command_trigger_overrides.member_mute]
chinese = "禁言"
english = "mute"

[menu_page_trigger_overrides.member-management]
chinese = "成员管理"
english = "member-management"

Runtime settings are read from the localstore-owned runtime-overrides.toml file. Deployment settings remain in NoneBot environment configuration; there is no project-specific configuration CLI or generated schema step.

Commands at a glance

Main menu:

菜单
menu

Default submenu pages:

  • 成员管理 / member-management
  • 发言管理 / speech-management
  • 群聊管理 / group-chat-management
  • 远程管理 / remote-management
  • 系统管理 / system-management

Examples:

禁言 @用户 [时长秒数] [原因]
mute @user [duration seconds] [reason]

撤回 [@用户] [数量]
recall [@user] [count]

远程禁言 <群号或群名称> @用户 [时长秒数] [原因]
remote-mute <group_id_or_group_name> @user [duration seconds] [reason]

闭嘴 / 说话
silence / speak

开机 / 关机
boot / shutdown

Command trigger language is locale-exclusive. Chinese locales enable Chinese triggers; English locales enable short hyphenated English triggers. They are not enabled at the same time. Full command behavior, permission pre-checks, implementation filters, and remote management details are documented in QQ Commands.

Development and verification

CI checks Ruff, Markdown, Pyright, ty, pytest on multiple database backends, and docs site lint / test. Run the checks relevant to your change before committing.

Ruff:

uv run -m ruff check . --output-format=github
uv run -m ruff format --check .

Type checking:

uv run -m pyright
uv run -m ty check --output-format github

Python tests:

uv run -m pytest

# Optional multi-database testing:
# SQLALCHEMY_DATABASE_URL="postgresql+psycopg://postgres:postgres@localhost:5432/postgres" uv run -m pytest
# SQLALCHEMY_DATABASE_URL="mysql+aiomysql://mysql:mysql@localhost:3306/mymysql" uv run -m pytest

Documentation site:

pnpm --filter docs lint
pnpm --filter docs test
pnpm --filter docs check-types
pnpm --filter docs build

Runtime i18n catalogs:

task i18n

Markdown:

pnpm exec markdownlint-cli2 README.md README-zh.md

Contributing

Issues, tests, documentation, and code improvements are welcome. Please read CONTRIBUTING.md before starting; it describes the current collaboration workflow, GitNexus impact analysis requirements, version validation system, and PR checklist.

When participating in discussions and reviews, please follow CODE_OF_CONDUCT.md. For security-related issues, please refer to SECURITY.md.

License

This project uses a phased open-source license stack (see Repository-Policy.md for the transition rules and trigger date):

  • Current phase — Software: LGPL-3.0-or-later (LICENSE-code). Documentation: GFDL-1.3-or-later (LICENSE-docs). Visual elements: CC0-1.0 (LICENSE-cc0).
  • Future phase (triggered automatically on the earlier of one year after the first public release or the first major version bump) — Software: MIT OR Apache-2.0 (dual, user-elected; see LICENSE-mit and LICENSE-apache). Documentation and visual elements: CC-BY-SA-4.0-or-later (LICENSE-cc-by-sa).

By submitting a contribution, you accept the terms of CLA.md, which grants the Project the rights it needs to execute the transition described above. The transition only applies to contributions submitted on or after the trigger date; contributions made before the trigger date remain under the license that was in effect at the time of submission.

For media file handling, sanitization requirements, REUSE compliance, and the official license texts, see Repository-Policy.md and the LICENSE-* files in the repository root.

Acknowledgments

Lingchu Bot stands on a lot of good open-source shoulders. Thanks especially to these upstream projects and communities:

For complete dependency lists, please refer to pyproject.toml, package.json, apps/docs/package.json, and uv.lock.

License compliance

FOSSA Status

Download files

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

Source Distribution

nonebot_plugin_lingchu_bot-0.5.1.dev4.tar.gz (178.5 kB view details)

Uploaded Source

Built Distribution

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

nonebot_plugin_lingchu_bot-0.5.1.dev4-py3-none-any.whl (240.4 kB view details)

Uploaded Python 3

File details

Details for the file nonebot_plugin_lingchu_bot-0.5.1.dev4.tar.gz.

File metadata

File hashes

Hashes for nonebot_plugin_lingchu_bot-0.5.1.dev4.tar.gz
Algorithm Hash digest
SHA256 78827196df78fd42d2a9bdc1202e3f8c0db78495f5217a7245ef56a6877b980a
MD5 abc7538c348a97173daf933697863365
BLAKE2b-256 aa1c9ec5e4a17d0c1072b7dbc14bd27990f6768dce72649dfe4d9ef06e1258c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for nonebot_plugin_lingchu_bot-0.5.1.dev4.tar.gz:

Publisher: release.yml on xinvxueyuan/lingchu-bot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nonebot_plugin_lingchu_bot-0.5.1.dev4-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_lingchu_bot-0.5.1.dev4-py3-none-any.whl
Algorithm Hash digest
SHA256 7a9705e4422be6874a5a4b7d2ed23e7d459697772cbdffdb42964a6a3e1cce1a
MD5 4a6664becbc4695ab549e5552968344c
BLAKE2b-256 583fa79ae3eac3b40a9dbdd8af0db2c6ec44550619fb3ba5514332e5a3fc717d

See more details on using hashes here.

Provenance

The following attestation bundles were made for nonebot_plugin_lingchu_bot-0.5.1.dev4-py3-none-any.whl:

Publisher: release.yml on xinvxueyuan/lingchu-bot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.7.0

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

This release

0.5.1.dev4 This release

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page