A component handler for hikari, aimed at making the creation & management of Discord UI components easy.
Tip
Like what you see? Check out arc, a command handler with a focus on type-safety and correctness.
To install miru, run the following command:
pip install -U hikari-miru
To check if miru has successfully installed or not, run the following:
python3 -m miru
# On Windows you may need to run:
py -m miru
import hikari
import miru
# REST bots are also supported
bot = hikari.GatewayBot(token="...")
# Wrap the bot in a miru client
client = miru.Client(bot)
class MyView(miru.View):
@miru.button(label="Rock", emoji="\N{ROCK}", style=hikari.ButtonStyle.PRIMARY)
async def rock_button(self, ctx: miru.ViewContext, button: miru.Button) -> None:
await ctx.respond("Paper!")
@miru.button(label="Paper", emoji="\N{SCROLL}", style=hikari.ButtonStyle.PRIMARY)
async def paper_button(self, ctx: miru.ViewContext, button: miru.Button) -> None:
await ctx.respond("Scissors!")
@miru.button(label="Scissors", emoji="\N{BLACK SCISSORS}", style=hikari.ButtonStyle.PRIMARY)
async def scissors_button(self, ctx: miru.ViewContext, button: miru.Button) -> None:
await ctx.respond("Rock!")
@miru.button(emoji="\N{BLACK SQUARE FOR STOP}", style=hikari.ButtonStyle.DANGER, row=1)
async def stop_button(self, ctx: miru.ViewContext, button: miru.Button) -> None:
self.stop() # Stop listening for interactions
@bot.listen()
async def buttons(event: hikari.GuildMessageCreateEvent) -> None:
# Ignore bots or webhooks pinging us
if not event.is_human:
return
me = bot.get_me()
# If the bot is mentioned
if me.id in event.message.user_mentions_ids:
view = MyView() # Create a new view
# Send the view as message components
await event.message.respond("Rock Paper Scissors!", components=view)
client.start_view(view) # Attach to the client & start it
bot.run()
To get started with miru
, see the documentation, or the examples.
miru has two extensions built-in:
ext.nav
- To make it easier to build navigators (sometimes called paginators).ext.menu
- To make it easier to create nested menus.
Check the corresponding documentation and the examples on how to use them.
For general usage help or questions, see the #miru
channel in the hikari discord, if you have found a bug or have a feature request, feel free to open an issue!
See Contributing