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"
"""
"""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
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
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 30d482daf6f1863d3251c896a7e70d0f8f1a7a87615e9b0ed0449125e836b7e8 |
|
MD5 | 7f044fe5c0b0109ba67320eff6883507 |
|
BLAKE2b-256 | 049784f0c5e3fa4a111fefb86f1081722102ff27da5c1c445c270fa0496e0b94 |