Skip to content

v4.0.0 - REST Bot support

Compare
Choose a tag to compare
@hypergonial hypergonial released this 18 Jan 15:58
· 125 commits to main since this release
87cfae8

This is a major breaking release, adding REST bot support, dependency injection, removing global state from the library, and generally cleaning up old mistakes and weirdness that accumulated over the past 2 years.

Alongside this release comes overhauled documentation, with improved navigation, layout & search and extended examples. If you are looking for the v3 docs, you can find them here.

Tip

If you already have an application that depends on v3 of miru, see the migration guide.

  • BREAKING: Raised the minimum supported Python version to 3.10 or greater.

  • BREAKING: Change all @miru decorators to take Context as their first argument and the item (button/select etc..) as their second.

  • BREAKING: Seperate link buttons out of miru.Button as miru.LinkButton.

  • BREAKING: Remove miru.install(). Use miru.Client instead.

  • BREAKING: Remove View.start() and Modal.start(). Use Client.start_view() and Client.start_modal() respectively instead.

  • BREAKING: Remove NavigatorView.send(). Use NavigatorView.build_response() instead and send the builder.

  • BREAKING: Remove Modal.send(). Use Modal.build_response() instead and send the builder.

  • BREAKING: Remove Menu.send(). Use Menu.build_response() instead and send the builder.

  • BREAKING: Remove miru.ModalInteractionCreateEvent and miru.ComponentInteractionCreateEvent. Use the unhandled interaction hooks instead.

  • BREAKING: Made ViewItem.callback only accept positional arguments. This is to allow renaming the context variable's name when overriding it in subclasses. This should not affect most people.

  • BREAKING: Move miru.Context to miru.abc.Context.

  • BREAKING: Move miru.SelectBase to miru.abc.SelectBase.

  • DEPRECATION: Passing buttons= to ext.nav.NavigatorView() constructor. Use the newly added items= instead. The buttons= argument will be removed in v4.2.0.

  • Add miru.Client. The client manages the state of all currently running views & modals & routes interactions to them.

  • Add RESTBot support. Simply pass a RESTBot to miru.Client when initializing it.

  • Add first-class support for dependency injection. This allows to better manage state across the library, along with adding better compatibility to arc and Tanjun via Client.from_arc() and Client.from_tanjun() classmethods respectively.

  • Add the ability to configure autodefer at the item level for views. If an item does not specify autodefer, the view's setting will be used.

  • Add the ability to configure if the autodefer should be ephemeral, along with it's response type through AutodeferOptions.

  • Stabilize Context.issued_response. This property returns a boolean that is True if the underlying interaction has already received an initial response.

  • Add response builders for entire responses from views or modals.

  • Add Context.respond_with_builder().

  • Add @Client.set_unhandled_component_interaction_hook and @Client.set_unhandled_modal_interaction_hook. These are called when an interaction is received that is not handled by any running modal or view.

  • Add miru.abc.InteractiveViewItem for all view items that have callbacks. This includes all current miru.abc.ViewItem except miru.LinkButton.