Skip to main content

A library which supplements Nextcord by adding support for slash commands.

Project description

DSlash

Version: 0.3.1 Code Style: black License: MIT PyPI: dslash Python: ^3.9

A library which supplements Nextcord (a fork of Discord.py) by adding support for slash commands.

Documentation is still a work in progress, and the library should currently be considered unstable.

You can install it using pip, eg. pip install dslash.

Example

import random
import logging
import traceback
import typing

from nextcord import Embed, Interaction, Member, Role
from dslash import Choices, CommandClient, SlashCommandInvokeError, allow_roles, option


GUILD_ID = ...
ADMIN_ROLE_ID = ...
TOKEN = ...

logging.basicConfig(level=logging.INFO)
client = CommandClient(guild_id=GUILD_ID)


@client.event
async def on_ready():
    print(f'Logged in as {client.user}.')


@client.command()
async def roll(
        interaction: Interaction,
        sides: typing.Optional[int] = option('How many sides (default 6).')):
    """Roll a dice."""
    value = random.randint(1, sides or 6)
    await interaction.response.send_message(f'You got: {value}')


images = client.group('images', 'Cute image commands.')


@images.subcommand()
async def cat(interaction: Interaction):
    """Get a cat image."""
    await interaction.response.send_message(
        embed=Embed().set_image(url='https://cataas.com/cat')
    )


@images.subcommand()
async def dog(interaction: Interaction):
    """Get a dog image."""
    await interaction.response.send_message(
        embed=Embed().set_image(url='https://placedog.net/500?random')
    )


@images.subcommand(name='any')
async def any_(interaction: Interaction):
    """Get any random image."""
    await interaction.response.send_message(
        embed=Embed().set_image(url='https://picsum.photos/600')
    )


admin = client.group(
    'admin',
    'Admin-only commands.',
    default_permission=False,
    permissions=allow_roles(ADMIN_ROLE_ID)
)
roles = admin.subgroup('roles', 'Commands to manage roles.')


@roles.subcommand(name='del')
async def del_(
        interaction: Interaction, role: Role = option('The role to delete.')):
    """Delete a role."""
    await role.delete()
    await interaction.response.send_message('Deleted the role.', ephemeral=True)


@allow_roles(ADMIN_ROLE_ID)
@client.command(default_permission=False)
async def ban(
        interaction: Interaction, user: Member = option('The user to ban.')):
    """Ban a user."""
    await user.ban()
    await interaction.response.send_message('Banned the user.', ephemeral=True)


class RPSChoices(Choices):
    rock = 'Rock'
    paper = 'Paper'
    scissors = 'Scissors'
    gun = 'Gun'


@client.command()
async def rps(interaction: Interaction, choice: RPSChoices = option('Your choice.')):
    """Play rock, paper, scissors."""
    if choice == RPSChoices.gun:
        await interaction.response.send_message("That's cheating!")
    else:
        await interaction.response.send_message(f'You picked {choice.name}.')


client.run(TOKEN)

Planned Features

  • Using docstring conventions for option descriptions.
  • Removing the option() default-as-decorator.
  • Class-based command groups, like nextcord.ext.commands cogs.

Compatibility with nextcord.ext.commands is not planned.

Development

As well as Python 3.9+, this project requires Poetry for development. Click this link for installation instructions, or:

  • *nix (Linux/MacOS)

    curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -

  • Windows Powershell

    (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python -

Once you have Poetry installed:

  1. Create a virtual environment: poetry shell
  2. Install dependencies: poetry install

The following commands are then available:

  • poe format - Run auto-formatting and linting.

Prefix these with poetry run if outside of the Poetry shell.

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

dslash-0.3.1.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

dslash-0.3.1-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file dslash-0.3.1.tar.gz.

File metadata

  • Download URL: dslash-0.3.1.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for dslash-0.3.1.tar.gz
Algorithm Hash digest
SHA256 47d61fdd48ec06126be82e395cb8a7ba1784aaec2854d4ebcc49325915fe5fcc
MD5 8e4664db4ff8636e0b5a5151effb99cf
BLAKE2b-256 2f9eb0c8296249afab60cb00f58c448b26e9e68dee2e23af06abd8c9c00c97a0

See more details on using hashes here.

File details

Details for the file dslash-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: dslash-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for dslash-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 82a475bdc0ef2852b3754d9040f3c7db37674b50e6917a5e51fb5006534d9ff4
MD5 2a6188d15c3d5442a958eece0e0cc1a4
BLAKE2b-256 d71ac49e16f6ba595b64ffd4a1b50c3cba8fbf55d918739a94f1466492a54841

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