nonebot-plugin-lingchu-bot 0.5.0.dev1__tar.gz → 0.5.1.dev4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/PKG-INFO +1 -1
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/Repository-Policy.md +1 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/pyproject.toml +1 -1
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/pyproject.toml.orig +1 -1
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/__init__.py +10 -4
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/config.py +1 -1
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/__init__.py +1 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/block.py +5 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/common.py +8 -2
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/mute.py +0 -3
- nonebot_plugin_lingchu_bot-0.5.1.dev4/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/protect_notice.py +194 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/remote.py +11 -1
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/i18n/locales/en_US/LC_MESSAGES/messages.mo +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/i18n/locales/en_US/LC_MESSAGES/messages.po +179 -89
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/i18n/locales/zh_CN/LC_MESSAGES/messages.mo +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/i18n/locales/zh_CN/LC_MESSAGES/messages.po +178 -89
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/i18n/messages.pot +168 -85
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/platforms.py +2 -2
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/platforms/__init__.py +4 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/platforms/registry.py +27 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/CLA.md +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-apache +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-cc-by-sa +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-cc0 +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-code +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-docs +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-mit +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/README.md +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/_lingchu_bot_contracts/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/_lingchu_bot_contracts/runtime_settings.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/async_utils.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/bot_state.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/handle_config_defaults/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/handle_config_manager.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/handle_default_values.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/http_security.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/menu_config.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/core/mutable_settings.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/_dialect_compat.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/models/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/models/blocklist.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/models/identity.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/models/message.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/models/registry.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/models/scheduler.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/models/subject_policy.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/orm_crud/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/orm_crud/_base.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/orm_crud/_bulk.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/orm_crud/_single.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/toml_store/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/toml_store/_helpers.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/toml_store/_sync.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/database/toml_store/exceptions.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/menu.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/announcement.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/bot_state.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/handle_defaults.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/kick.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/lifecycle.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/member.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/menu.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/profile.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/default/protect.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/napcat/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/napcat/announcement.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/adapters/onebot11/napcat/profile.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/announcement.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/block.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/bot_state.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/common.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/handle_defaults.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/kick.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/lifecycle.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/member.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/mute.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/profile.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/protect.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/remote.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/qq/commands/triggers.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/telegram/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/telegram/adapters/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/telegram/adapters/default/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/telegram/adapters/default/bot_state.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/telegram/adapters/default/menu.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/telegram/adapters/default/moderation.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/telegram/adapters/default/mute.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/handle/telegram/adapters/default/recall.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/hooks/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/hooks/adapters.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/hooks/handlers/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/hooks/handlers/api_audit.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/hooks/handlers/bot_connection.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/hooks/handlers/lifecycle.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/hooks/handlers/message_store.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/hooks/interfaces.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/i18n/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/i18n/babel.cfg +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/migrations/30f5a01259cd_initial_schema.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/migrations/a1b2c3d4e5f6_permissions_schema.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/migrations/b7c8d9e0f1a2_event_policy_partitions.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/migrations/c3d4e5f6a7b8_scheduler_jobs.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/migrations/cf2c06d51a17_blocklist_unique_constraint.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/migrations/d7e8f9a0b1c2_identity_integrity.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/migrations/f6a7b8c9d0e1_message_protocol_default.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/admin.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/bootstrap.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/config.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/service.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/subject_policy.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/types.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/platforms/qq/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/platforms/qq/permissions.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/platforms/telegram/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/platforms/telegram/permissions.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/repositories/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/repositories/blocklist.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/repositories/message_store.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/repositories/permissions.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/repositories/registry.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/repositories/scheduler_jobs.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/services/message_store.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/services/protocol_restart_feedback.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/services/scheduler.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/start/startup.py +0 -0
{nonebot_plugin_lingchu_bot-0.5.0.dev1 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/Repository-Policy.md
RENAMED
|
@@ -54,6 +54,7 @@ in effect for the relevant contribution at the time of its submission.
|
|
|
54
54
|
|
|
55
55
|
## Release Records
|
|
56
56
|
|
|
57
|
+
- `0.5.0` (2026-08-14): minor release removing the LLM/NovelAI MCP and Pydantic stack, with runtime hardening, dev-data cleanup, and release-flow fixes. Does not trigger the future phase (`0.x`).
|
|
57
58
|
- `0.4.1` (2026-08-03): patch release hardening release/CI infrastructure (Docker runtime reverted to `python:3.13-slim`, tag pushes via fine-grained PAT after workflow merges, Actions DRY refactor). Does not trigger the future phase (`0.x`).
|
|
58
59
|
- `0.0.1` (2026-07-06): first formal 0.x release for the current LGPL/GFDL/CC0 phase. This release does not trigger the future phase because the transition rule treats the first public release example as `1.0.0` and excludes `0.x`.
|
|
59
60
|
|
|
@@ -31,10 +31,7 @@ __plugin_meta__ = PluginMetadata(
|
|
|
31
31
|
config=None,
|
|
32
32
|
supported_adapters=get_supported_adapters(),
|
|
33
33
|
extra={
|
|
34
|
-
"author":
|
|
35
|
-
{"name": "lingchu-bot", "email": "support@xinvstar.xyz"},
|
|
36
|
-
{"name": "xinvxueyuan", "email": "xinvxueyuan@yeah.net"},
|
|
37
|
-
],
|
|
34
|
+
"author": "xinvxueyuan",
|
|
38
35
|
"maintainer": "xinvxueyuan",
|
|
39
36
|
"priority": 50,
|
|
40
37
|
"startup": True,
|
|
@@ -61,6 +58,15 @@ from .start.startup import startup as startup
|
|
|
61
58
|
# Register runtime hooks after business modules because handlers depend on
|
|
62
59
|
# services.message_store and start.startup.
|
|
63
60
|
from . import hooks as hooks
|
|
61
|
+
|
|
62
|
+
# zhenxun 等宿主环境同时注册 150+ 插件的 Alconna 命令,默认上限 200 会被突破。
|
|
63
|
+
# 在 lingchu 自身命令注册前抬高全局上限,避免 ExceedMaxCount。
|
|
64
|
+
from arclet.alconna.config import config as _alconna_config
|
|
65
|
+
|
|
66
|
+
_ALCONNA_COMMAND_MAX_COUNT = 500
|
|
67
|
+
|
|
68
|
+
if getattr(_alconna_config, "command_max_count", 200) < _ALCONNA_COMMAND_MAX_COUNT:
|
|
69
|
+
_alconna_config.command_max_count = _ALCONNA_COMMAND_MAX_COUNT
|
|
64
70
|
# isort: on
|
|
65
71
|
|
|
66
72
|
config = Config.from_nonebot()
|
|
@@ -121,7 +121,7 @@ class Config(DeploymentSettings):
|
|
|
121
121
|
|
|
122
122
|
"""
|
|
123
123
|
|
|
124
|
-
core_version: str = "0.5.
|
|
124
|
+
core_version: str = "0.5.1.dev4"
|
|
125
125
|
data_dir: Path = field(default_factory=get_plugin_data_dir)
|
|
126
126
|
config_dir: Path = field(default_factory=get_plugin_config_dir)
|
|
127
127
|
cache_dir: Path = field(default_factory=get_plugin_cache_dir)
|
|
@@ -38,6 +38,7 @@ from .common import (
|
|
|
38
38
|
CommandAudit,
|
|
39
39
|
bot_id,
|
|
40
40
|
check_bot_privilege,
|
|
41
|
+
check_self_target,
|
|
41
42
|
check_target_privilege,
|
|
42
43
|
default_admin_reason,
|
|
43
44
|
finish_action_error_onebot11,
|
|
@@ -97,6 +98,10 @@ async def _block_member(
|
|
|
97
98
|
|
|
98
99
|
target_user_id, target_name = await resolve_user_onebot11(user, bot, event)
|
|
99
100
|
|
|
101
|
+
# 边界条件检查:不能拉黑自己或机器人
|
|
102
|
+
if not await check_self_target(target_user_id, bot, event, command, "拉黑"):
|
|
103
|
+
return None
|
|
104
|
+
|
|
100
105
|
# 目标用户权限预检
|
|
101
106
|
if not await check_target_privilege(session, bot, event, target_user_id, command):
|
|
102
107
|
return None
|
|
@@ -169,9 +169,15 @@ async def check_self_target(
|
|
|
169
169
|
event: Onebot11GroupMessageEvent,
|
|
170
170
|
cmd_matcher: Any,
|
|
171
171
|
action_name: str,
|
|
172
|
+
*,
|
|
173
|
+
check_self: bool = True,
|
|
172
174
|
) -> bool:
|
|
173
|
-
"""检查是否尝试操作自己或机器人。返回 True 表示通过检查。
|
|
174
|
-
|
|
175
|
+
"""检查是否尝试操作自己或机器人。返回 True 表示通过检查。
|
|
176
|
+
|
|
177
|
+
``check_self=False`` 时跳过"操作自己"的拦截(例如允许解禁自己),
|
|
178
|
+
但仍会拦截对机器人的操作。
|
|
179
|
+
"""
|
|
180
|
+
if check_self and target_user_id == event.user_id:
|
|
175
181
|
msg = await _("不能{action}自己")
|
|
176
182
|
await cmd_matcher.finish(msg.format(action=action_name))
|
|
177
183
|
return False
|
|
@@ -497,9 +497,6 @@ async def onebot11_unmute(
|
|
|
497
497
|
return await member_unmute_cmd.finish(str(e))
|
|
498
498
|
|
|
499
499
|
# 2. 边界条件检查
|
|
500
|
-
if target_user_id == event.user_id:
|
|
501
|
-
return await member_unmute_cmd.finish(await _("不能解禁自己"))
|
|
502
|
-
|
|
503
500
|
bot_self_id = bot_self_id_safe(bot)
|
|
504
501
|
if bot_self_id is not None and target_user_id == bot_self_id:
|
|
505
502
|
return await member_unmute_cmd.finish(await _("不能解禁机器人"))
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"""QQ 群禁言通知监听:自动恢复受白名单保护的用户。
|
|
2
|
+
|
|
3
|
+
OneBot V11 通过 ``GroupBanNoticeEvent`` 上报群禁言/解禁事件。当受保护
|
|
4
|
+
(白名单)用户被任一管理员禁言时,Lingchu 自动调用 ``set_group_ban`` 解禁,
|
|
5
|
+
使保护不依赖 bot 自身命令拦截。
|
|
6
|
+
|
|
7
|
+
规则:
|
|
8
|
+
- 仅处理 ``sub_type == "ban"`` 且 ``duration > 0`` 的禁言;
|
|
9
|
+
- 命中群级或全局保护记录才恢复;
|
|
10
|
+
- QQ 全体禁言期间无法单独解禁个人,通过 bot 自身禁言状态探测并跳过;
|
|
11
|
+
- 超级用户禁言非同级(非超级用户)的受保护用户时强制生效,不自动恢复;
|
|
12
|
+
- 不受"开机/关机"门禁影响,始终生效。
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from datetime import UTC, datetime
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
from nonebot import logger, on_notice, require
|
|
19
|
+
from nonebot.adapters.onebot.v11 import Bot as OneBot11Bot
|
|
20
|
+
from nonebot.adapters.onebot.v11.event import (
|
|
21
|
+
GroupBanNoticeEvent as OneBot11GroupBanNoticeEvent,
|
|
22
|
+
)
|
|
23
|
+
from nonebot.adapters.onebot.v11.exception import ActionFailed as OneBot11ActionFailed
|
|
24
|
+
|
|
25
|
+
require("nonebot_plugin_orm")
|
|
26
|
+
from nonebot_plugin_orm import async_scoped_session, get_session
|
|
27
|
+
|
|
28
|
+
from ......permissions.subject_policy import find_active_subject_policy
|
|
29
|
+
from .common import (
|
|
30
|
+
ONEBOT_V11_ADAPTER_ID,
|
|
31
|
+
QQ_PLATFORM_ID,
|
|
32
|
+
bot_id,
|
|
33
|
+
operator_is_superuser_onebot11,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
protect_restore_notice = on_notice(priority=1, block=True)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
async def _record_protect_restore_audit(
|
|
40
|
+
bot: OneBot11Bot,
|
|
41
|
+
group_id: int,
|
|
42
|
+
user_id: int,
|
|
43
|
+
operator_id: int,
|
|
44
|
+
duration: int,
|
|
45
|
+
) -> None:
|
|
46
|
+
"""后台记录"自动解禁受保护用户"审计。
|
|
47
|
+
|
|
48
|
+
``record_audit_fire_and_forget`` 面向群消息事件(operator 取
|
|
49
|
+
``event.user_id``),而通知事件里 ``event.user_id`` 是被禁言用户,
|
|
50
|
+
操作者是 ``event.operator_id``,因此这里单独写入。
|
|
51
|
+
"""
|
|
52
|
+
from ......database.orm_crud import DatabaseError
|
|
53
|
+
from ......repositories.message_store import AuditEvent, record_api_call
|
|
54
|
+
|
|
55
|
+
data_summary = (
|
|
56
|
+
f"operator={operator_id}, target={user_id}, "
|
|
57
|
+
f"action=protect_auto_unmute, group={group_id}, "
|
|
58
|
+
f"sub_type=ban, duration={duration}"
|
|
59
|
+
)
|
|
60
|
+
try:
|
|
61
|
+
async with get_session() as session:
|
|
62
|
+
await record_api_call(
|
|
63
|
+
session,
|
|
64
|
+
AuditEvent(
|
|
65
|
+
platform_id=QQ_PLATFORM_ID,
|
|
66
|
+
adapter_id=ONEBOT_V11_ADAPTER_ID,
|
|
67
|
+
protocol_id=None,
|
|
68
|
+
bot_id=bot_id(bot),
|
|
69
|
+
api_name="notice:protect_auto_unmute",
|
|
70
|
+
data_summary=data_summary,
|
|
71
|
+
result_summary="success",
|
|
72
|
+
exception_summary=None,
|
|
73
|
+
audit_type="notice",
|
|
74
|
+
),
|
|
75
|
+
)
|
|
76
|
+
except DatabaseError:
|
|
77
|
+
logger.exception(
|
|
78
|
+
"记录受保护用户自动解禁审计失败: group=%s user=%s", group_id, user_id
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _fire_protect_restore_audit(
|
|
83
|
+
bot: OneBot11Bot,
|
|
84
|
+
group_id: int,
|
|
85
|
+
user_id: int,
|
|
86
|
+
operator_id: int,
|
|
87
|
+
duration: int,
|
|
88
|
+
) -> None:
|
|
89
|
+
from ......core.async_utils import fire_and_forget
|
|
90
|
+
|
|
91
|
+
fire_and_forget(
|
|
92
|
+
_record_protect_restore_audit(bot, group_id, user_id, operator_id, duration),
|
|
93
|
+
name="audit:protect_auto_unmute",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
async def _is_whole_group_muted(bot: OneBot11Bot, group_id: int) -> bool:
|
|
98
|
+
"""探测目标群是否处于全体禁言中。
|
|
99
|
+
|
|
100
|
+
QQ 全体禁言会禁言除群主外的所有人(含 bot 自己)。通过 bot 自身在该群
|
|
101
|
+
的 ``shut_up_timestamp`` 是否在未来判断。查询失败时保守返回 False,交由
|
|
102
|
+
后续 ``set_group_ban`` 的 API 结果兜底。
|
|
103
|
+
"""
|
|
104
|
+
try:
|
|
105
|
+
bot_info = await bot.get_group_member_info(
|
|
106
|
+
group_id=group_id,
|
|
107
|
+
user_id=int(bot.self_id),
|
|
108
|
+
no_cache=True,
|
|
109
|
+
)
|
|
110
|
+
except (OneBot11ActionFailed, ValueError, TypeError):
|
|
111
|
+
return False
|
|
112
|
+
shut_up_timestamp = bot_info.get("shut_up_timestamp", 0)
|
|
113
|
+
try:
|
|
114
|
+
muted_until = int(shut_up_timestamp)
|
|
115
|
+
except (TypeError, ValueError):
|
|
116
|
+
return False
|
|
117
|
+
if muted_until <= 0:
|
|
118
|
+
return False
|
|
119
|
+
return muted_until > datetime.now(UTC).timestamp()
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
@protect_restore_notice.handle()
|
|
123
|
+
async def handle_group_ban_notice(
|
|
124
|
+
bot: OneBot11Bot,
|
|
125
|
+
event: OneBot11GroupBanNoticeEvent,
|
|
126
|
+
session: async_scoped_session,
|
|
127
|
+
) -> None:
|
|
128
|
+
"""受白名单保护的用户被禁言时自动解禁。"""
|
|
129
|
+
if event.sub_type != "ban" or event.duration <= 0:
|
|
130
|
+
return
|
|
131
|
+
|
|
132
|
+
protected = await find_active_subject_policy(
|
|
133
|
+
session,
|
|
134
|
+
policy_type="protected",
|
|
135
|
+
platform_id=QQ_PLATFORM_ID,
|
|
136
|
+
adapter_id=ONEBOT_V11_ADAPTER_ID,
|
|
137
|
+
bot_id=bot_id(bot),
|
|
138
|
+
group_id=event.group_id,
|
|
139
|
+
user_id=event.user_id,
|
|
140
|
+
)
|
|
141
|
+
if protected is None:
|
|
142
|
+
return
|
|
143
|
+
|
|
144
|
+
if await _is_whole_group_muted(bot, event.group_id):
|
|
145
|
+
logger.info(
|
|
146
|
+
"全体禁言中,跳过受保护用户自动恢复: group=%s user=%s",
|
|
147
|
+
event.group_id,
|
|
148
|
+
event.user_id,
|
|
149
|
+
)
|
|
150
|
+
return
|
|
151
|
+
|
|
152
|
+
operator_super = await operator_is_superuser_onebot11(session, event.operator_id)
|
|
153
|
+
target_super = await operator_is_superuser_onebot11(session, event.user_id)
|
|
154
|
+
if operator_super and not target_super:
|
|
155
|
+
logger.info(
|
|
156
|
+
"超级用户禁言非同级受保护用户,强制生效: group=%s operator=%s target=%s",
|
|
157
|
+
event.group_id,
|
|
158
|
+
event.operator_id,
|
|
159
|
+
event.user_id,
|
|
160
|
+
)
|
|
161
|
+
return
|
|
162
|
+
|
|
163
|
+
try:
|
|
164
|
+
await bot.set_group_ban(
|
|
165
|
+
group_id=event.group_id, user_id=event.user_id, duration=0
|
|
166
|
+
)
|
|
167
|
+
except OneBot11ActionFailed as error:
|
|
168
|
+
logger.warning(
|
|
169
|
+
"自动解禁受保护用户失败: group=%s user=%s error=%r",
|
|
170
|
+
event.group_id,
|
|
171
|
+
event.user_id,
|
|
172
|
+
error,
|
|
173
|
+
)
|
|
174
|
+
return
|
|
175
|
+
|
|
176
|
+
_fire_protect_restore_audit(
|
|
177
|
+
bot,
|
|
178
|
+
group_id=event.group_id,
|
|
179
|
+
user_id=event.user_id,
|
|
180
|
+
operator_id=event.operator_id,
|
|
181
|
+
duration=event.duration,
|
|
182
|
+
)
|
|
183
|
+
logger.info(
|
|
184
|
+
"已自动解禁受保护用户: group=%s user=%s operator=%s",
|
|
185
|
+
event.group_id,
|
|
186
|
+
event.user_id,
|
|
187
|
+
event.operator_id,
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
__all__: tuple[Any, ...] = (
|
|
192
|
+
"handle_group_ban_notice",
|
|
193
|
+
"protect_restore_notice",
|
|
194
|
+
)
|
|
@@ -387,7 +387,12 @@ async def onebot11_remote_unmute(
|
|
|
387
387
|
|
|
388
388
|
# 4. 边界条件检查
|
|
389
389
|
if not await check_self_target(
|
|
390
|
-
target_user_id,
|
|
390
|
+
target_user_id,
|
|
391
|
+
bot,
|
|
392
|
+
event,
|
|
393
|
+
remote_unmute_cmd,
|
|
394
|
+
"解禁",
|
|
395
|
+
check_self=False,
|
|
391
396
|
):
|
|
392
397
|
return None
|
|
393
398
|
|
|
@@ -648,6 +653,11 @@ async def onebot11_remote_block(
|
|
|
648
653
|
return None
|
|
649
654
|
target_user_id, target_name = user_result
|
|
650
655
|
|
|
656
|
+
if not await check_self_target(
|
|
657
|
+
target_user_id, bot, event, remote_block_cmd, "拉黑"
|
|
658
|
+
):
|
|
659
|
+
return None
|
|
660
|
+
|
|
651
661
|
if not await _check_remote_target_privilege(
|
|
652
662
|
session, bot, event, group_id_int, target_user_id, remote_block_cmd
|
|
653
663
|
):
|