Giter Club home page Giter Club logo

hikari-crescent's Introduction

hikari-crescent

code-style-black mypy pyright ci pre-commit.ci status Pypi

πŸŒ• 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.
  • Easily use a custom context class.
  • 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] (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.

These extensions can be installed with pip.

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.