Skip to main content

🌕 A dead simple command handler for Hikari

Project description

hikari-crescent

code-style-black Mypy Docs pre-commit.ci status Pypi

A simple command handler for Hikari.

Features

  • Simple and intuitive API.
  • Slash, user, and message commands.
  • Supports autocomplete.
  • Error handling for commands, events, and autocomplete.
  • Command groups.
  • Hooks to run function before a command (or any command from a group!)
  • Plugin system to easily split bot into different modules.
  • Makes typehinting easy.

Links

📝 | Docs
📦 | Pypi

Installation

Crescent is supported in python3.8+.

pip install hikari-crescent

Usage

Signature parsing can be used for simple commands.

import crescent

bot = crescent.Bot("YOUR_TOKEN")

# Include the command in your bot - don't forget this
@bot.include
# Create a slash command
@crescent.command
async def say(ctx: crescent.Context, word: str):
    await ctx.respond(word)

bot.run()

Information for arguments can be provided using the Annotated type hint. See this example for more information.

# python 3.9 +
from typing import Annotated as Atd

# python 3.8
from typing_extensions import Annotated as Atd

@bot.include
@crescent.command
async def say(ctx: crescent.Context, word: Atd[str, "The word to say"]) -> None:
    await ctx.respond(word)

Complicated commands, such as commands with many modifiers on options or autocomplete on several options, should use class commands. Class commands allow you to declare a command similar to how you declare a dataclass. The option function takes a type followed by the description then optional information.

@bot.include
@crescent.command(name="say")
class Say:
    word = crescent.option(str, "The word to say")

    async def callback(self, ctx: crescent.Context) -> None:
        await ctx.respond(self.word)

Typing to Option Types Lookup Table

Type Option Type
str Text
int Integer
bool Boolean
float Number
hikari.User User
hikari.Role Role
crescent.Mentionable Role or User
Any Hikari channel type. Channel. The options will be the channel type and its subclasses.
Union[Channel Types] (command only) Channel. ^
List[Channel Types] (classes only) Channel. ^

Error Handling

Errors that are raised by a command can be handled by crescent.catch_command.

class MyError(Exception):
    ...

@bot.include
@crescent.catch_command(MyError)
async def on_err(exc: MyError, ctx: crescent.Context) -> None:
    await ctx.respond("An error occurred while running the command.")

@bot.include
@crescent.command
async def my_command(ctx: crescent.Context):
    raise MyError()

Events

import hikari

@bot.include
@crescent.event
async def on_message_create(event: hikari.MessageCreateEvent):
    if event.message.author.is_bot:
        return
    await event.message.respond("Hello!")

Using crescent's event decorator lets you use crescent's event error handling system.

Support

Contact Lunarmagpie❤#0001 on Discord or create an issue. All questions are welcome!

Contributing

Create a issue for your feature. There aren't any guildlines right now so just don't be rude.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hikari-crescent-0.1.0.tar.gz (27.9 kB view hashes)

Uploaded Source

Built Distribution

hikari_crescent-0.1.0-py3-none-any.whl (35.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page