hikari-arc 2.1.0__tar.gz → 2.2.0__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.
- hikari_arc-2.2.0/.github/workflows/ci.yml +67 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/workflows/docs.yml +1 -1
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/workflows/publish.yml +1 -1
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/PKG-INFO +4 -3
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/client.py +3 -3
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/custom/emoji.py +1 -1
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/slash.py +58 -18
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/about.py +1 -1
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/changelog.md +11 -2
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/command_groups.md +12 -1
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/pyproject.toml +14 -14
- hikari_arc-2.2.0/uv.lock +1877 -0
- hikari_arc-2.1.0/.github/workflows/ci.yml +0 -67
- hikari_arc-2.1.0/uv.lock +0 -1684
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.editorconfig +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.gitattributes +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/FUNDING.yml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/ISSUE_TEMPLATE/suggestion.yml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.gitignore +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/.gitignore +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/externalDependencies.xml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/hikari-arc.iml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/modules.xml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/vcs.xml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.vscode/extensions.json +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.vscode/python.code-snippets +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.vscode/settings.json +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.vscode/tasks.json +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/CONTRIBUTING.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/LICENSE +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/README.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/__main__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/client.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/command.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/concurrency_limiting.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/error_handler.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/hookable.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/limiter.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/option.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/plugin.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/message.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/attachment.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/bool.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/channel.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/custom/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/custom/color.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/custom/member.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/float.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/int.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/mentionable.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/role.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/str.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/user.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/user.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/context/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/context/autocomplete.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/context/base.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/errors.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/events.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/ext/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/extension.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/deprecation.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/options.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/sigparse.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/sync.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/types.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/version.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/locale.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/plugin.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/py.typed +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/concurrency_limiter.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/hooks/__init__.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/hooks/basic.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/hooks/limiters.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/loops.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/ratelimiter.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/README.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/client.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/command.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/concurrency_limiting.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/error_handler.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/hooks.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/index.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/limiter.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/option.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/plugin.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/client.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/index.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/message.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/option.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/slash.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/user.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/context.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/errors.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/events.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/index.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/localization.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/plugin.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/concurrency_limiter.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/hooks/basic.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/hooks/limiters.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/index.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/loops.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/ratelimiter.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/app_commands.webp +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-darkmode.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-darkmode.svg +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-darkmode@2x.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-lightmode.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-lightmode.svg +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-lightmode@2x.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-darkmode.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-darkmode.svg +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-darkmode@2x.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-lightmode.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-lightmode.svg +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-lightmode@2x.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-darkmode.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-darkmode.svg +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-darkmode@2x.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-lightmode.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-lightmode.svg +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-lightmode@2x.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/context_menu.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/ephemeral.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-1.webp +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-2.webp +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-3.webp +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-4.webp +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-5.webp +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/installation_contexts.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/inter_flow_dark.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/inter_flow_light.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/subcommands.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-0.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-1.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-2.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-3.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-4.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-5.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/user_install.png +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/getting_started.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/concurrency_limiting.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/context_menu.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/dependency_injection.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/error_handling.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/events.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/hikari_fundamentals.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/hooks.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/index.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/installation_contexts.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/interactions.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/loops.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/options.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/plugins_extensions.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/startup_shutdown.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/typing.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/index.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/stylesheets/additional_coloring.css +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/README.md +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/basic.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/context_menu.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/custom_client.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/dependency_injection.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/error_handling.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/extension_example/bot.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/extension_example/extensions/bar.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/extension_example/extensions/foo.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/hooks.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/limiters.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/limiting_concurrency.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/localization.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/loops.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/options.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/basic.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/context_menu.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/custom_client.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/dependency_injection.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/error_handling.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/extension_example/bot.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/extension_example/extensions/bar.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/extension_example/extensions/foo.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/hooks.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/limiters.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/limiting_concurrency.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/localization.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/loops.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/options.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/mkdocs.yml +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/noxfile.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/mock_client.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_client.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_command.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_context_command.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_di.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_extension/extension.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_extension/test_main.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_inheritance.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_options.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_sigparse.py +0 -0
- {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_slash.py +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
formatting:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
name: "Run ruff via nox"
|
|
9
|
+
steps:
|
|
10
|
+
- uses: actions/checkout@v6
|
|
11
|
+
- name: Install uv
|
|
12
|
+
uses: astral-sh/setup-uv@v7
|
|
13
|
+
with:
|
|
14
|
+
version: "0.9"
|
|
15
|
+
python-version: "3.14"
|
|
16
|
+
|
|
17
|
+
- name: Run ruff via nox
|
|
18
|
+
run: |
|
|
19
|
+
uv run nox -s format
|
|
20
|
+
|
|
21
|
+
pyright:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
name: "Run pyright via nox"
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v6
|
|
26
|
+
- name: Install uv
|
|
27
|
+
uses: astral-sh/setup-uv@v7
|
|
28
|
+
with:
|
|
29
|
+
version: "0.9"
|
|
30
|
+
python-version: "3.14"
|
|
31
|
+
|
|
32
|
+
- name: Run pyright via nox
|
|
33
|
+
run: |
|
|
34
|
+
uv run nox -s pyright
|
|
35
|
+
|
|
36
|
+
slotscheck:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
name: "Run slotscheck via nox"
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@v6
|
|
41
|
+
- name: Install uv
|
|
42
|
+
uses: astral-sh/setup-uv@v7
|
|
43
|
+
with:
|
|
44
|
+
version: "0.9"
|
|
45
|
+
python-version: "3.14"
|
|
46
|
+
|
|
47
|
+
- name: Run slotscheck via nox
|
|
48
|
+
run: |
|
|
49
|
+
uv run nox -s slotscheck
|
|
50
|
+
|
|
51
|
+
pytest:
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
strategy:
|
|
54
|
+
matrix:
|
|
55
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
56
|
+
fail-fast: false
|
|
57
|
+
|
|
58
|
+
name: Run pytest via nox on Python ${{ matrix.python-version }}
|
|
59
|
+
steps:
|
|
60
|
+
- uses: actions/checkout@v6
|
|
61
|
+
- name: Install uv with Python ${{ matrix.python-version }}
|
|
62
|
+
uses: astral-sh/setup-uv@v7
|
|
63
|
+
with:
|
|
64
|
+
version: "0.9"
|
|
65
|
+
python-version: ${{ matrix.python-version }}
|
|
66
|
+
- run: |
|
|
67
|
+
uv run nox -s pytest
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hikari-arc
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: A command handler for hikari with a focus on type-safety and correctness.
|
|
5
5
|
Project-URL: Homepage, https://arc.hypergonial.com
|
|
6
6
|
Project-URL: Documentation, https://arc.hypergonial.com
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
24
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
25
|
Classifier: Topic :: Software Development :: Libraries
|
|
25
26
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
@@ -27,12 +28,12 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
27
28
|
Requires-Python: >=3.10
|
|
28
29
|
Requires-Dist: alluka<0.4,>=0.3.3
|
|
29
30
|
Requires-Dist: attrs>=25.3.0
|
|
30
|
-
Requires-Dist: hikari>=2.
|
|
31
|
+
Requires-Dist: hikari>=2.3.3
|
|
31
32
|
Provides-Extra: cron
|
|
32
33
|
Requires-Dist: croniter==5.0.1; extra == 'cron'
|
|
33
34
|
Requires-Dist: types-croniter==5.0.1.20241205; extra == 'cron'
|
|
34
35
|
Provides-Extra: rest
|
|
35
|
-
Requires-Dist: hikari[server]>=2.
|
|
36
|
+
Requires-Dist: hikari[server]>=2.3.3; extra == 'rest'
|
|
36
37
|
Description-Content-Type: text/markdown
|
|
37
38
|
|
|
38
39
|
<div align="center">
|
|
@@ -125,11 +125,11 @@ class GatewayClientBase(Client[GatewayBotT]):
|
|
|
125
125
|
|
|
126
126
|
async def _on_gatewaybot_startup(self, event: hikari.StartedEvent) -> None:
|
|
127
127
|
await self._on_startup()
|
|
128
|
-
|
|
128
|
+
self.app.event_manager.dispatch(StartedEvent(self), return_tasks=False)
|
|
129
129
|
|
|
130
130
|
async def _on_gatewaybot_shutdown(self, event: hikari.StoppingEvent) -> None:
|
|
131
131
|
await self._on_shutdown()
|
|
132
|
-
|
|
132
|
+
self.app.event_manager.dispatch(StoppingEvent(self), return_tasks=False)
|
|
133
133
|
|
|
134
134
|
async def _on_gatewaybot_interaction_create(self, event: hikari.InteractionCreateEvent) -> None:
|
|
135
135
|
if isinstance(event.interaction, hikari.CommandInteraction):
|
|
@@ -141,7 +141,7 @@ class GatewayClientBase(Client[GatewayBotT]):
|
|
|
141
141
|
if not self.app.event_manager.get_listeners(CommandErrorEvent):
|
|
142
142
|
return await super()._on_error(ctx, exception)
|
|
143
143
|
|
|
144
|
-
self.app.event_manager.dispatch(CommandErrorEvent(self, ctx, exception))
|
|
144
|
+
self.app.event_manager.dispatch(CommandErrorEvent(self, ctx, exception), return_tasks=False)
|
|
145
145
|
|
|
146
146
|
def subscribe(self, event_type: type[EventT], callback: EventCallbackT[EventT]) -> None:
|
|
147
147
|
"""Subscribe to an event.
|
|
@@ -55,7 +55,7 @@ class EmojiOption(ConverterOption[hikari.Emoji, ClientT, EmojiParams, str]):
|
|
|
55
55
|
return hikari.Emoji.parse(value)
|
|
56
56
|
except ValueError as exc:
|
|
57
57
|
raise OptionConverterFailureError(
|
|
58
|
-
self, value, f"Option '{self.name}' expected a valid
|
|
58
|
+
self, value, f"Option '{self.name}' expected a valid emoji, got {value!r}."
|
|
59
59
|
) from exc
|
|
60
60
|
|
|
61
61
|
@classmethod
|
|
@@ -13,7 +13,7 @@ from arc.errors import AutocompleteError, CommandInvokeError
|
|
|
13
13
|
from arc.internal.options import resolve_options
|
|
14
14
|
from arc.internal.sigparse import parse_command_signature
|
|
15
15
|
from arc.internal.types import ClientT, CommandCallbackT, HookT, PostHookT, ResponseBuilderT, SlashCommandLike
|
|
16
|
-
from arc.locale import CommandLocaleRequest
|
|
16
|
+
from arc.locale import CommandLocaleRequest
|
|
17
17
|
|
|
18
18
|
if t.TYPE_CHECKING:
|
|
19
19
|
from asyncio.futures import Future
|
|
@@ -183,10 +183,13 @@ class SlashCommand(CallableCommandBase[ClientT, hikari.api.SlashCommandBuilder])
|
|
|
183
183
|
|
|
184
184
|
def _request_command_locale(self) -> None:
|
|
185
185
|
"""Request the locale for this command."""
|
|
186
|
-
if self.
|
|
186
|
+
if self._client is None or not self._client._provided_locales or not self._client._command_locale_provider:
|
|
187
187
|
return
|
|
188
188
|
|
|
189
|
-
|
|
189
|
+
for option in self.options.values():
|
|
190
|
+
option._request_option_locale(self._client, self)
|
|
191
|
+
|
|
192
|
+
if self.name_localizations or self.description_localizations:
|
|
190
193
|
return
|
|
191
194
|
|
|
192
195
|
name_locales: dict[hikari.Locale, str] = {}
|
|
@@ -196,8 +199,6 @@ class SlashCommand(CallableCommandBase[ClientT, hikari.api.SlashCommandBuilder])
|
|
|
196
199
|
request = CommandLocaleRequest(self, locale, self.name)
|
|
197
200
|
resp = self._client._command_locale_provider(request)
|
|
198
201
|
|
|
199
|
-
assert isinstance(resp, LocaleResponse)
|
|
200
|
-
|
|
201
202
|
if resp.name is not None and resp.description is not None:
|
|
202
203
|
name_locales[locale] = resp.name
|
|
203
204
|
desc_locales[locale] = resp.description
|
|
@@ -205,9 +206,6 @@ class SlashCommand(CallableCommandBase[ClientT, hikari.api.SlashCommandBuilder])
|
|
|
205
206
|
self.name_localizations: t.Mapping[hikari.Locale, str] = name_locales
|
|
206
207
|
self.description_localizations: t.Mapping[hikari.Locale, str] = desc_locales
|
|
207
208
|
|
|
208
|
-
for option in self.options.values():
|
|
209
|
-
option._request_option_locale(self._client, self)
|
|
210
|
-
|
|
211
209
|
|
|
212
210
|
@attr.define(slots=True, kw_only=True)
|
|
213
211
|
class SlashGroup(CommandBase[ClientT, hikari.api.SlashCommandBuilder]):
|
|
@@ -387,6 +385,9 @@ class SlashGroup(CommandBase[ClientT, hikari.api.SlashCommandBuilder]):
|
|
|
387
385
|
if self.name_localizations or self.description_localizations or self._client is None:
|
|
388
386
|
return
|
|
389
387
|
|
|
388
|
+
for sub in self.children.values():
|
|
389
|
+
sub._request_command_locale(self._client)
|
|
390
|
+
|
|
390
391
|
if not self._client._provided_locales or not self._client._command_locale_provider:
|
|
391
392
|
return
|
|
392
393
|
|
|
@@ -404,9 +405,6 @@ class SlashGroup(CommandBase[ClientT, hikari.api.SlashCommandBuilder]):
|
|
|
404
405
|
self.name_localizations: t.Mapping[hikari.Locale, str] = name_locales
|
|
405
406
|
self.description_localizations: t.Mapping[hikari.Locale, str] = desc_locales
|
|
406
407
|
|
|
407
|
-
for sub in self.children.values():
|
|
408
|
-
sub._request_option_locale(self._client, self)
|
|
409
|
-
|
|
410
408
|
@t.overload
|
|
411
409
|
def include(self) -> t.Callable[[SlashSubCommand[ClientT]], SlashSubCommand[ClientT]]: ...
|
|
412
410
|
|
|
@@ -551,11 +549,32 @@ class SlashSubGroup(SubCommandBase[ClientT, SlashGroup[ClientT]]):
|
|
|
551
549
|
assert self._parent is not None
|
|
552
550
|
await self._parent._handle_exception(ctx, exc)
|
|
553
551
|
|
|
554
|
-
def
|
|
555
|
-
|
|
552
|
+
def _request_command_locale(self, client: Client[t.Any]) -> None:
|
|
553
|
+
if not client._provided_locales or not client._command_locale_provider:
|
|
554
|
+
return
|
|
555
|
+
|
|
556
|
+
for sub in self.children.values():
|
|
557
|
+
sub._request_command_locale(client)
|
|
558
|
+
|
|
559
|
+
if self.name_localizations or self.description_localizations:
|
|
560
|
+
return
|
|
561
|
+
|
|
562
|
+
name_locales = {}
|
|
563
|
+
desc_locales = {}
|
|
564
|
+
|
|
565
|
+
for locale in client._provided_locales:
|
|
566
|
+
request = CommandLocaleRequest(self, locale, self.name)
|
|
567
|
+
resp = client._command_locale_provider(request)
|
|
568
|
+
|
|
569
|
+
if resp.name is not None and resp.description is not None:
|
|
570
|
+
name_locales[locale] = resp.name
|
|
571
|
+
desc_locales[locale] = resp.description
|
|
572
|
+
|
|
573
|
+
self.name_localizations: t.Mapping[hikari.Locale, str] = name_locales
|
|
574
|
+
self.description_localizations: t.Mapping[hikari.Locale, str] = desc_locales
|
|
556
575
|
|
|
557
|
-
|
|
558
|
-
|
|
576
|
+
def _request_option_locale(self, client: Client[t.Any], command: CommandProto) -> None:
|
|
577
|
+
raise RuntimeError("_request_option_locale should not be called on a subgroup. (This is a bug)")
|
|
559
578
|
|
|
560
579
|
@t.overload
|
|
561
580
|
def include(self) -> t.Callable[[SlashSubCommand[ClientT]], SlashSubCommand[ClientT]]: ...
|
|
@@ -705,11 +724,32 @@ class SlashSubCommand(
|
|
|
705
724
|
assert self._parent is not None
|
|
706
725
|
await self._parent._handle_exception(ctx, e)
|
|
707
726
|
|
|
708
|
-
def
|
|
709
|
-
|
|
727
|
+
def _request_command_locale(self, client: Client[t.Any]) -> None:
|
|
728
|
+
if not client._provided_locales or not client._command_locale_provider:
|
|
729
|
+
return
|
|
710
730
|
|
|
711
731
|
for option in self.options.values():
|
|
712
|
-
option._request_option_locale(client,
|
|
732
|
+
option._request_option_locale(client, self)
|
|
733
|
+
|
|
734
|
+
if self.name_localizations or self.description_localizations:
|
|
735
|
+
return
|
|
736
|
+
|
|
737
|
+
name_locales = {}
|
|
738
|
+
desc_locales = {}
|
|
739
|
+
|
|
740
|
+
for locale in client._provided_locales:
|
|
741
|
+
request = CommandLocaleRequest(self, locale, self.name)
|
|
742
|
+
resp = client._command_locale_provider(request)
|
|
743
|
+
|
|
744
|
+
if resp.name is not None and resp.description is not None:
|
|
745
|
+
name_locales[locale] = resp.name
|
|
746
|
+
desc_locales[locale] = resp.description
|
|
747
|
+
|
|
748
|
+
self.name_localizations: t.Mapping[hikari.Locale, str] = name_locales
|
|
749
|
+
self.description_localizations: t.Mapping[hikari.Locale, str] = desc_locales
|
|
750
|
+
|
|
751
|
+
def _request_option_locale(self, client: Client[t.Any], command: CommandProto) -> None:
|
|
752
|
+
raise RuntimeError("_request_option_locale should not be called on a subcommand. (This is a bug)")
|
|
713
753
|
|
|
714
754
|
async def __call__(self, ctx: Context[ClientT], *args: t.Any, **kwargs: t.Any) -> None:
|
|
715
755
|
"""Invoke this subcommand with the given context.
|
|
@@ -9,6 +9,17 @@ hide:
|
|
|
9
9
|
|
|
10
10
|
Here you can find all the changelogs for `hikari-arc`.
|
|
11
11
|
|
|
12
|
+
## 2.2.0
|
|
13
|
+
|
|
14
|
+
- Add Python 3.14 support.
|
|
15
|
+
- Bump `hikari` to `v2.5+`.
|
|
16
|
+
- Fix inconsistent error message in emoji converter.
|
|
17
|
+
|
|
18
|
+
## 2.1.1
|
|
19
|
+
|
|
20
|
+
- Fix breaking change in hikari `v2.3.3` causing events dispatching to fail.
|
|
21
|
+
- Fix option locale provider being invoked for slash subcommands and subgroups instead of the command locale provider.
|
|
22
|
+
|
|
12
23
|
## 2.1.0
|
|
13
24
|
|
|
14
25
|
- Add `poll` to `Context.respond`.
|
|
@@ -90,7 +101,6 @@ async def test(ctx: arc.GatewayContext) -> None:
|
|
|
90
101
|
channel = ctx.channel
|
|
91
102
|
```
|
|
92
103
|
|
|
93
|
-
|
|
94
104
|
## 1.4.0
|
|
95
105
|
|
|
96
106
|
- Add new optiontype with converter for `hikari.Emoji`.
|
|
@@ -186,7 +196,6 @@ In additon to these changes, the [documentation](https://arc.hypergonial.com) go
|
|
|
186
196
|
- Add `@GatewayPlugin.listen`, `GatewayPlugin.subscribe`, `GatewayPlugin.unsubscribe`.
|
|
187
197
|
- Make all first-order decorators work as second-order decorators as well.
|
|
188
198
|
|
|
189
|
-
|
|
190
199
|
## v0.3.0
|
|
191
200
|
|
|
192
201
|
- Add [hooks](./guides/hooks.md).
|
|
@@ -75,6 +75,17 @@ hide:
|
|
|
75
75
|
└─ subcommand
|
|
76
76
|
│
|
|
77
77
|
└─ subgroup
|
|
78
|
+
|
|
79
|
+
----
|
|
80
|
+
|
|
81
|
+
INVALID
|
|
82
|
+
Group cannot contain regular commands, you have to use subcommands when using a group
|
|
83
|
+
|
|
84
|
+
group
|
|
85
|
+
│
|
|
86
|
+
├─ command
|
|
87
|
+
│
|
|
88
|
+
└─ command
|
|
78
89
|
```
|
|
79
90
|
|
|
80
91
|
!!! failure "Caution"
|
|
@@ -157,7 +168,7 @@ Subcommands can be included in either top-level groups or subgroups.
|
|
|
157
168
|
Slash subcommands **must** use the [`@arc.slash_subcommand`][arc.command.slash.slash_subcommand] decorator
|
|
158
169
|
instead of the [`@arc.slash_command`][arc.command.slash.slash_command] decorator.
|
|
159
170
|
|
|
160
|
-
With the following setup, you should get something similar to this:
|
|
171
|
+
With the following setup, you should get something similar to this. The final command name will automatically combine the name used at each tier:
|
|
161
172
|
|
|
162
173
|
<figure markdown>
|
|
163
174
|
{ width="800" }
|
|
@@ -11,11 +11,11 @@ classifiers = [
|
|
|
11
11
|
"Framework :: AsyncIO",
|
|
12
12
|
"Intended Audience :: Developers",
|
|
13
13
|
"Natural Language :: English",
|
|
14
|
-
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
15
14
|
"Programming Language :: Python :: 3.10",
|
|
16
15
|
"Programming Language :: Python :: 3.11",
|
|
17
16
|
"Programming Language :: Python :: 3.12",
|
|
18
17
|
"Programming Language :: Python :: 3.13",
|
|
18
|
+
"Programming Language :: Python :: 3.14",
|
|
19
19
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
20
20
|
"Programming Language :: Python :: 3 :: Only",
|
|
21
21
|
"Topic :: Software Development :: Libraries",
|
|
@@ -23,31 +23,31 @@ classifiers = [
|
|
|
23
23
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
24
24
|
]
|
|
25
25
|
requires-python = ">=3.10"
|
|
26
|
-
dependencies = ["alluka>=0.3.3,<0.4", "attrs>=25.3.0", "hikari>=2.
|
|
26
|
+
dependencies = ["alluka>=0.3.3,<0.4", "attrs>=25.3.0", "hikari>=2.3.3"]
|
|
27
27
|
|
|
28
28
|
[project.optional-dependencies]
|
|
29
29
|
cron = ["croniter==5.0.1", "types-croniter==5.0.1.20241205"]
|
|
30
|
-
rest = ["hikari[server]>=2.
|
|
30
|
+
rest = ["hikari[server]>=2.3.3"]
|
|
31
31
|
|
|
32
32
|
[dependency-groups]
|
|
33
33
|
dev = [
|
|
34
|
-
"nox>=2025.
|
|
34
|
+
"nox>=2025.11.12",
|
|
35
35
|
"pyright==1.1.397",
|
|
36
|
-
"pytest>=
|
|
37
|
-
"pytest-asyncio>=
|
|
38
|
-
"ruff>=0.
|
|
36
|
+
"pytest>=9.0",
|
|
37
|
+
"pytest-asyncio>=1.3",
|
|
38
|
+
"ruff>=0.14",
|
|
39
39
|
"slotscheck>=0.19",
|
|
40
|
-
"typing-extensions>=4.
|
|
41
|
-
"uv>=0.
|
|
40
|
+
"typing-extensions>=4.15",
|
|
41
|
+
"uv>=0.9",
|
|
42
42
|
"colorama>=0.4.6; sys_platform == 'win32'",
|
|
43
43
|
]
|
|
44
44
|
docs = [
|
|
45
|
-
"black>=
|
|
46
|
-
"griffe-inherited-docstrings>=1.1.
|
|
45
|
+
"black>=26.1.0",
|
|
46
|
+
"griffe-inherited-docstrings>=1.1.2",
|
|
47
47
|
"mkdocs>=1.6.1",
|
|
48
|
-
"mkdocs-glightbox>=0.
|
|
49
|
-
"mkdocs-material[imaging]>=9.
|
|
50
|
-
"mkdocstrings-python>=1.16.10",
|
|
48
|
+
"mkdocs-glightbox>=0.5",
|
|
49
|
+
"mkdocs-material[imaging]>=9.7",
|
|
50
|
+
"mkdocstrings-python>=1.16.10,<2.0",
|
|
51
51
|
]
|
|
52
52
|
|
|
53
53
|
[project.urls]
|