Skip to main content

Typed commands for discord.py

Project description

discord-ext-typed-commands

License Unit tests CodeQL Analysis pre-commit Checked with mypy Code style: black

This package contains a discord.py extension to provide classes to more easily use typed commands

Installation

pip install discord-ext-typed-commands

NOTE: Because discord.py uses namespace packages for its extensions, mypy must be configured to use namespace packages either with the --namespace-packages command line flag, or by setting namespace_packages = True in your mypy configuration file. See the import discovery section of the mypy documentation for more details.

Usage

The most common usage will be in connection with discord.py-stubs in order to allow bot authors to use the command classes from discord.py while also using the generics defined in the stubs:

from typing import Any, Type, TypeVar, Union, cast, overload

import discord
from discord.ext import typed_commands

OtherContextType = TypeVar('OtherContextType', bound=typed_commands.Context)


class MyContext(typed_commands.Context):
    async def send_with_hello(self, text: str) -> None:
        await self.send(f'Hello! {text}')


class MyCog(typed_commands.Cog[MyContext]):
    @typed_commands.command()
    async def speak(self, ctx: MyContext, text: str) -> None:
        await ctx.send_with_hello(text)


class MyBot(typed_commands.Bot[MyContext]):
    @overload
    async def get_context(self, message: discord.Message) -> MyContext:
        ...

    @overload
    async def get_context(
        self, message: discord.Message, *, cls: Type[OtherContextType]
    ) -> OtherContextType:
        ...

    async def get_context(
        self,
        message: discord.Message,
        *,
        cls: Type[OtherContextType] = cast(Any, MyContext),
    ) -> Union[MyContext, OtherContextType]:
        return await super().get_context(message, cls=cls)


my_bot = MyBot('$')
my_bot.add_cog(MyCog())
my_bot.run('...')

NOTE: Because it is not a runtime dependency, discord.py-stubs will need to be explicitly installed to type check a bot while it is being developed. It is recommended that the stubs be added as a development dependency using your preferred method of package management.

Development

Make sure you have poetry installed.

poetry install
poetry run pre-commit install --hook-type pre-commit --hook-type post-checkout

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

discord-ext-typed-commands-1.0.3.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file discord-ext-typed-commands-1.0.3.tar.gz.

File metadata

  • Download URL: discord-ext-typed-commands-1.0.3.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.4.0-1032-azure

File hashes

Hashes for discord-ext-typed-commands-1.0.3.tar.gz
Algorithm Hash digest
SHA256 9bffb46dfc93b50356624bfe7756a4f0dad3a8933ffc160c9a44babaa7bc194d
MD5 ab22e130e952e3d2f1dd54b7ac46797c
BLAKE2b-256 decf5c9dfab1cb22e66de1c6af5ec662d73ccffd15f86ee23aa0f5f4e7eaac87

See more details on using hashes here.

Provenance

File details

Details for the file discord_ext_typed_commands-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for discord_ext_typed_commands-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8d19e01bef9b256df7506d735ca7a42e4ecb49f8a68fc4536d4221e1921d8c5c
MD5 424812c31aee01fec555b940a1caa186
BLAKE2b-256 d5ba0354a5bca1481c5aed309e9766ca10446b127918d83f8c79d1038d231fa2

See more details on using hashes here.

Provenance

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