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.
Files changed (210) hide show
  1. hikari_arc-2.2.0/.github/workflows/ci.yml +67 -0
  2. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/workflows/docs.yml +1 -1
  3. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/workflows/publish.yml +1 -1
  4. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/PKG-INFO +4 -3
  5. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/client.py +3 -3
  6. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/custom/emoji.py +1 -1
  7. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/slash.py +58 -18
  8. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/about.py +1 -1
  9. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/changelog.md +11 -2
  10. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/command_groups.md +12 -1
  11. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/pyproject.toml +14 -14
  12. hikari_arc-2.2.0/uv.lock +1877 -0
  13. hikari_arc-2.1.0/.github/workflows/ci.yml +0 -67
  14. hikari_arc-2.1.0/uv.lock +0 -1684
  15. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.editorconfig +0 -0
  16. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.gitattributes +0 -0
  17. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/FUNDING.yml +0 -0
  18. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  19. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.github/ISSUE_TEMPLATE/suggestion.yml +0 -0
  21. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.gitignore +0 -0
  22. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/.gitignore +0 -0
  23. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/externalDependencies.xml +0 -0
  24. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/hikari-arc.iml +0 -0
  25. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
  26. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/modules.xml +0 -0
  27. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.idea/vcs.xml +0 -0
  28. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.vscode/extensions.json +0 -0
  29. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.vscode/python.code-snippets +0 -0
  30. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.vscode/settings.json +0 -0
  31. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/.vscode/tasks.json +0 -0
  32. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/CONTRIBUTING.md +0 -0
  33. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/LICENSE +0 -0
  34. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/README.md +0 -0
  35. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/__init__.py +0 -0
  36. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/__main__.py +0 -0
  37. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/__init__.py +0 -0
  38. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/client.py +0 -0
  39. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/command.py +0 -0
  40. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/concurrency_limiting.py +0 -0
  41. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/error_handler.py +0 -0
  42. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/hookable.py +0 -0
  43. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/limiter.py +0 -0
  44. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/option.py +0 -0
  45. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/abc/plugin.py +0 -0
  46. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/__init__.py +0 -0
  47. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/message.py +0 -0
  48. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/__init__.py +0 -0
  49. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/attachment.py +0 -0
  50. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/bool.py +0 -0
  51. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/channel.py +0 -0
  52. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/custom/__init__.py +0 -0
  53. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/custom/color.py +0 -0
  54. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/custom/member.py +0 -0
  55. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/float.py +0 -0
  56. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/int.py +0 -0
  57. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/mentionable.py +0 -0
  58. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/role.py +0 -0
  59. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/str.py +0 -0
  60. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/option/user.py +0 -0
  61. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/command/user.py +0 -0
  62. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/context/__init__.py +0 -0
  63. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/context/autocomplete.py +0 -0
  64. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/context/base.py +0 -0
  65. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/errors.py +0 -0
  66. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/events.py +0 -0
  67. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/ext/__init__.py +0 -0
  68. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/extension.py +0 -0
  69. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/__init__.py +0 -0
  70. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/deprecation.py +0 -0
  71. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/options.py +0 -0
  72. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/sigparse.py +0 -0
  73. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/sync.py +0 -0
  74. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/types.py +0 -0
  75. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/internal/version.py +0 -0
  76. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/locale.py +0 -0
  77. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/plugin.py +0 -0
  78. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/py.typed +0 -0
  79. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/__init__.py +0 -0
  80. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/concurrency_limiter.py +0 -0
  81. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/hooks/__init__.py +0 -0
  82. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/hooks/basic.py +0 -0
  83. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/hooks/limiters.py +0 -0
  84. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/loops.py +0 -0
  85. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/arc/utils/ratelimiter.py +0 -0
  86. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/README.md +0 -0
  87. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/client.md +0 -0
  88. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/command.md +0 -0
  89. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/concurrency_limiting.md +0 -0
  90. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/error_handler.md +0 -0
  91. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/hooks.md +0 -0
  92. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/index.md +0 -0
  93. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/limiter.md +0 -0
  94. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/option.md +0 -0
  95. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/abc/plugin.md +0 -0
  96. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/client.md +0 -0
  97. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/index.md +0 -0
  98. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/message.md +0 -0
  99. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/option.md +0 -0
  100. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/slash.md +0 -0
  101. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/command/user.md +0 -0
  102. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/context.md +0 -0
  103. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/errors.md +0 -0
  104. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/events.md +0 -0
  105. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/index.md +0 -0
  106. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/localization.md +0 -0
  107. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/plugin.md +0 -0
  108. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/concurrency_limiter.md +0 -0
  109. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/hooks/basic.md +0 -0
  110. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/hooks/limiters.md +0 -0
  111. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/index.md +0 -0
  112. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/loops.md +0 -0
  113. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/api_reference/utils/ratelimiter.md +0 -0
  114. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/app_commands.webp +0 -0
  115. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-darkmode.png +0 -0
  116. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-darkmode.svg +0 -0
  117. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-darkmode@2x.png +0 -0
  118. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-lightmode.png +0 -0
  119. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-lightmode.svg +0 -0
  120. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/composed-lightmode@2x.png +0 -0
  121. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-darkmode.png +0 -0
  122. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-darkmode.svg +0 -0
  123. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-darkmode@2x.png +0 -0
  124. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-lightmode.png +0 -0
  125. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-lightmode.svg +0 -0
  126. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/logo-lightmode@2x.png +0 -0
  127. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-darkmode.png +0 -0
  128. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-darkmode.svg +0 -0
  129. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-darkmode@2x.png +0 -0
  130. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-lightmode.png +0 -0
  131. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-lightmode.svg +0 -0
  132. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/branding/name-lightmode@2x.png +0 -0
  133. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/context_menu.png +0 -0
  134. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/ephemeral.png +0 -0
  135. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-1.webp +0 -0
  136. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-2.webp +0 -0
  137. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-3.webp +0 -0
  138. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-4.webp +0 -0
  139. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/getting-started/image-5.webp +0 -0
  140. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/installation_contexts.png +0 -0
  141. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/inter_flow_dark.png +0 -0
  142. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/inter_flow_light.png +0 -0
  143. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/subcommands.png +0 -0
  144. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-0.png +0 -0
  145. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-1.png +0 -0
  146. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-2.png +0 -0
  147. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-3.png +0 -0
  148. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-4.png +0 -0
  149. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/typing/image-5.png +0 -0
  150. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/assets/user_install.png +0 -0
  151. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/getting_started.md +0 -0
  152. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/concurrency_limiting.md +0 -0
  153. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/context_menu.md +0 -0
  154. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/dependency_injection.md +0 -0
  155. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/error_handling.md +0 -0
  156. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/events.md +0 -0
  157. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/hikari_fundamentals.md +0 -0
  158. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/hooks.md +0 -0
  159. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/index.md +0 -0
  160. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/installation_contexts.md +0 -0
  161. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/interactions.md +0 -0
  162. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/loops.md +0 -0
  163. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/options.md +0 -0
  164. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/plugins_extensions.md +0 -0
  165. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/startup_shutdown.md +0 -0
  166. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/guides/typing.md +0 -0
  167. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/index.md +0 -0
  168. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/docs/stylesheets/additional_coloring.css +0 -0
  169. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/README.md +0 -0
  170. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/basic.py +0 -0
  171. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/context_menu.py +0 -0
  172. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/custom_client.py +0 -0
  173. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/dependency_injection.py +0 -0
  174. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/error_handling.py +0 -0
  175. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/extension_example/bot.py +0 -0
  176. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/extension_example/extensions/bar.py +0 -0
  177. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/extension_example/extensions/foo.py +0 -0
  178. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/hooks.py +0 -0
  179. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/limiters.py +0 -0
  180. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/limiting_concurrency.py +0 -0
  181. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/localization.py +0 -0
  182. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/loops.py +0 -0
  183. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/gateway/options.py +0 -0
  184. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/basic.py +0 -0
  185. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/context_menu.py +0 -0
  186. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/custom_client.py +0 -0
  187. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/dependency_injection.py +0 -0
  188. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/error_handling.py +0 -0
  189. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/extension_example/bot.py +0 -0
  190. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/extension_example/extensions/bar.py +0 -0
  191. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/extension_example/extensions/foo.py +0 -0
  192. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/hooks.py +0 -0
  193. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/limiters.py +0 -0
  194. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/limiting_concurrency.py +0 -0
  195. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/localization.py +0 -0
  196. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/loops.py +0 -0
  197. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/examples/rest/options.py +0 -0
  198. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/mkdocs.yml +0 -0
  199. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/noxfile.py +0 -0
  200. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/mock_client.py +0 -0
  201. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_client.py +0 -0
  202. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_command.py +0 -0
  203. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_context_command.py +0 -0
  204. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_di.py +0 -0
  205. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_extension/extension.py +0 -0
  206. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_extension/test_main.py +0 -0
  207. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_inheritance.py +0 -0
  208. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_options.py +0 -0
  209. {hikari_arc-2.1.0 → hikari_arc-2.2.0}/tests/test_sigparse.py +0 -0
  210. {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
@@ -30,7 +30,7 @@ jobs:
30
30
  - name: Install uv
31
31
  uses: astral-sh/setup-uv@v5
32
32
  with:
33
- version: "0.6.4"
33
+ version: "0.7.6"
34
34
  python-version: "3.11"
35
35
 
36
36
  - name: Build docs via nox
@@ -11,7 +11,7 @@ jobs:
11
11
  - uses: actions/checkout@v4
12
12
  - uses: astral-sh/setup-uv@v5
13
13
  with:
14
- version: "0.6.4"
14
+ version: "0.7.6"
15
15
  python-version: "3.13"
16
16
  - name: publish
17
17
  run: |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hikari-arc
3
- Version: 2.1.0
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.2.1
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.2.1; extra == 'rest'
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
- await self.app.event_manager.dispatch(StartedEvent(self))
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
- await self.app.event_manager.dispatch(StoppingEvent(self))
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 color, got {value!r}."
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, LocaleResponse
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.name_localizations or self.description_localizations or self._client is None:
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
- if not self._client._provided_locales or not self._client._command_locale_provider:
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 _request_option_locale(self, client: Client[t.Any], command: CommandProto) -> None:
555
- super()._request_option_locale(client, command)
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
- for subcommand in self.children.values():
558
- subcommand._request_option_locale(client, command)
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 _request_option_locale(self, client: Client[t.Any], command: CommandProto) -> None:
709
- super()._request_option_locale(client, command)
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, command)
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.
@@ -1,6 +1,6 @@
1
1
  import typing as t
2
2
 
3
- __version__: t.Final[str] = "2.1.0"
3
+ __version__: t.Final[str] = "2.2.0"
4
4
 
5
5
  # MIT License
6
6
  #
@@ -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
  ![Permissions Subcommands](../assets/subcommands.png){ 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.2.1"]
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.2.1"]
30
+ rest = ["hikari[server]>=2.3.3"]
31
31
 
32
32
  [dependency-groups]
33
33
  dev = [
34
- "nox>=2025.2.9",
34
+ "nox>=2025.11.12",
35
35
  "pyright==1.1.397",
36
- "pytest>=8.3",
37
- "pytest-asyncio>=0.26",
38
- "ruff>=0.11",
36
+ "pytest>=9.0",
37
+ "pytest-asyncio>=1.3",
38
+ "ruff>=0.14",
39
39
  "slotscheck>=0.19",
40
- "typing-extensions>=4.13",
41
- "uv>=0.6",
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>=25.1.0",
46
- "griffe-inherited-docstrings>=1.1.1",
45
+ "black>=26.1.0",
46
+ "griffe-inherited-docstrings>=1.1.2",
47
47
  "mkdocs>=1.6.1",
48
- "mkdocs-glightbox>=0.4.0",
49
- "mkdocs-material[imaging]>=9.6.11",
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]