🌕 A command handler for Hikari that keeps your project neat and tidy.
Project description
hikari-crescent
🌕 A command handler for Hikari that keeps your project neat and tidy.
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 or after 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] (functions only) |
Channel. ^ |
List[Channel Types] (classes only) |
Channel. ^ |
hikari.Attachment |
Attachment |
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.
Extensions
Crescent has 2 builtin extensions.
- crescent-ext-cooldowns - Allows you to add sliding window rate limits to your commands.
- crescent-ext-tasks - Schedules background tasks using loops or cronjobs.
These extensions can be installed with pip.
- crescent-ext-docstrings - Lets you use docstrings to write descriptions for commands and options.
Support
Contact Lunarmagpie❤#0001
on Discord or create an issue. All questions are welcome!
Contributing
Create an issue for your feature. There aren't any guidelines 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.2.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4be12e50facad3f85f5d625c0d88f02484af86356569f3e09b504e37439e23bb |
|
MD5 | 08fb3d8340e36d567757d7eeba5d75a2 |
|
BLAKE2b-256 | e9111b89a06c2ea38b925dd008a6290db051848f1e39fe004100b39d5568d6b5 |