nonebot-plugin-lingchu-bot 0.5.1.dev3__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.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/PKG-INFO +1 -1
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/pyproject.toml +1 -1
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/pyproject.toml.orig +1 -1
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/CLA.md +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-apache +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-cc-by-sa +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-cc0 +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-code +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-docs +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/LICENSE-mit +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/README.md +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/Repository-Policy.md +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/_lingchu_bot_contracts/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/_lingchu_bot_contracts/runtime_settings.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/permissions/platforms.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/platforms/__init__.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → 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.1.dev3 → 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.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/platforms/registry.py +0 -0
- {nonebot_plugin_lingchu_bot-0.5.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → 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.1.dev3 → nonebot_plugin_lingchu_bot-0.5.1.dev4}/src/plugins/nonebot_plugin_lingchu_bot/start/startup.py +0 -0
|
@@ -121,7 +121,7 @@ class Config(DeploymentSettings):
|
|
|
121
121
|
|
|
122
122
|
"""
|
|
123
123
|
|
|
124
|
-
core_version: str = "0.5.1.
|
|
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
|
):
|