🌕 A dead simple command handler for Hikari
Project description
hikari-crescent
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
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for hikari_crescent-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0b5590b25af016ffa4ae941ed11748610d600f65be63a8ea63fd7c04c70cc9c |
|
MD5 | d446a7ffea61dad46c54d2e74931f78b |
|
BLAKE2b-256 | fa48517fe1a7109925a955bec4570a9721c2cc6a8427a8bda3781aabaf463731 |