Skip to main content

A signature parser for hikari's command handler tanjun.

Project description

tanchi

A signature parser for hikari's command handler tanjun.

Finally be able to define your commands without those bloody decorator chains!

Example

@component.with_slash_command
@tanchi.as_slash_command(default_to_ephemeral=True)
async def command(
    ctx: tanjun.abc.SlashContext,
    integer: int = 0,
    flag: bool = False,
    channel: typing.Optional[hikari.GuildTextChannel] = None,
):
    """Small tanchi command

    Parameters
    ----------
    integer : int
        Any integer value.
    flag : bool
        Whether this flag should be enabled.
    channel : hikari.GuildTextChannel
        The channel to target.
    """

Documentation?

Ordinary Types

All builtin types supported in slash commands (str, int, float, bool) do not need any special care.

option: str

Choices

Choices can either be made with typing.Literal or enum.Enum

option: typing.Literal["Foo", "Bar", "Baz"]
class MyEnum(enum.IntEnum):
    foo = 1
    bar = 2
    baz = 3

option: MyEnum

Ranges

Integer and float options support min and max boundaries. These can be set with tanchi.Range. The type of the option is discerned from the boundaries.

int_option: tanchi.Range[1, 10]
float_option: tanchi.Range[0.0, 1.0]

Channels

Channels types may be enforced with the help of typing.Union. If you want all channel types use hikari.GuildChannel

option: typing.Union[hikari.GuildTextChannel, hikari.GuildNewsChannel]

Converters

Types are implicitly converted if a builtin tanjun converter is available.

option: hikari.Emoji

To provide your own converter you can use tanchi.Converted.

option: tanchi.Converted[int, round]

Autocomplete

Instead of using a decorator, autocompleters can be provided directly in the annotation with tanchi.Autocompleted.

option: tanchi.Autocompleted[autocomplete_callback]

Since converters and autocompletion are often used together you can provide a converter directly.

option: tanchi.Autocompleted[autocomplete_callback, converter_callback]

MyPy compatibility

Because mypy does not respect __class_getitem__ you'll most likely have to use typing.Annotated for some cases.

option: typing.Annotated[int, tanchi.Range(1, 10)]
option: typing.Annotated[int, tanchi.Converted(range)]
option: typing.Annotated[str, tanchi.Autocompleted(autocomplete_callback)]

Docstrings

Tanchi parses descriptions from docstrings.

Examples of all supported formats:

ReST

"""Command description on a single line

Parameters
----------
foo : OptionType
    Description for the option named "foo"
bar:
    Description for the option named "bar"
"""

Google

"""Command description on a single line

Args:
    foo (OptionType): Description for the option named "foo"
    bar: Description for the option named "bar"
"""

Autocompletion Examples

Instead of using context.set_choices you can choose to return options as either a sequence or a mapping.

@tanchi.as_slash_command()
async def command(context: tanjun.abc.SlashContext, option: str) -> None:
    ...

@tanchi.with_autocomplete(command, "option")
def autocomplete_names(context: tanjun.abc.AutocompleteContext, option: str):
    return [word for word in WORDS if option.lower() in word.lower()]

Returning the options is also supported inside Autocompleted

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-tanchi-1.3.5.tar.gz (9.7 kB view details)

Uploaded Source

File details

Details for the file hikari-tanchi-1.3.5.tar.gz.

File metadata

  • Download URL: hikari-tanchi-1.3.5.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.26.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.9.6

File hashes

Hashes for hikari-tanchi-1.3.5.tar.gz
Algorithm Hash digest
SHA256 30d482daf6f1863d3251c896a7e70d0f8f1a7a87615e9b0ed0449125e836b7e8
MD5 7f044fe5c0b0109ba67320eff6883507
BLAKE2b-256 049784f0c5e3fa4a111fefb86f1081722102ff27da5c1c445c270fa0496e0b94

See more details on using hashes here.

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