Skip to main content

DSlash

Version: 0.7.2 Code Style: black License: MIT PyPI: dslash Python: ^3.12

THIS PROJECT IS NO LONGER MAINTAINED

Danny has returned from a break, and Discord.py is now being maintained again, with support for slash commands. Nextcord also now has built-in support for slash commands. For new projects, you should use one of these options (or another).

Dslash will continue to receive minimal updates to keep it working, at least for the near future, but it will not receive support for new features.

One change Discord has made since this library stopped being maintained was to remove support for bots configuring permissions for their own commands. In order to avoid breaking bots, Dslash still allows permissions to be configured as before, but will now ignore them. The allow_roles, allow_users, disallow_roles, disallow_users, global_permissions and guild_permissions wrappers, as well as the default_permission and permissions parameters are all deprecated and should not be used.

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 logging
import random
import typing

from dslash import Choices, CommandClient, CommandGroup, CommandSubGroup, subcommand
from nextcord import Embed, Interaction, Member, Role, Attachment

GUILD_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]):
    """Roll a dice.

    :param sides: How many sides (default 6).
    """
    value = random.randint(1, sides or 6)
    await interaction.response.send_message(f"You got: {value}")


@client.group
class Images(CommandGroup):
    """Cute image commands."""

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

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

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

    @subcommand()
    async def upload(self, interaction: Interaction, image: Attachment):
        """Upload a new cute image."""
        print(f"Uploading {image.proxy_url!r}...")
        await interaction.response.send_message("All done!")


@client.group
class Admin(CommandGroup):
    """Admin-only commands."""

    class Roles(CommandSubGroup):
        """Commands to manage roles."""

        @subcommand(name="del")
        async def del_(self, interaction: Interaction, role: Role):
            """Delete a role.

            :param role: The role to delete.
            """
            await role.delete()
            await interaction.response.send_message("Deleted the role.", ephemeral=True)


@client.command()
async def ban(interaction: Interaction, user: Member):
    """Ban a user.

    :param user: The user to ban.
    """
    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):
    """Play rock, paper, scissors.

    :param choice: Your choice.
    """
    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)

Development

As well as Python 3.12+, 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.

Metadata

Release files for dslash 0.7.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dslash 0.7.2
File Size Uploaded
dslash-0.7.2.tar.gz 15.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dslash 0.7.2
File Interpreter ABI Platform
dslash-0.7.2-py3-none-any.whl Python 3 none any Details

Total release size: 32.8 kB

Release files / dslash-0.7.2.tar.gz

Download URL dslash-0.7.2.tar.gz
Size 15.8 kB
Tags Source
SHA-256 checksum
How to use checksums
506e460aca9c8df5e77f12021c00841f5f79a489f2218e2d05b786ad8d8f12ee
BLAKE2b-256 checksum
How to use checksums
95923633b0eb034d0d7dba2d9a8c081ca4915b2340c76f7c724900fef5f159da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.11

Release files / dslash-0.7.2-py3-none-any.whl

Download URL dslash-0.7.2-py3-none-any.whl
Size 17.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
855bf922b718a69084bb3e177b14dcf13611153069692bf557f9b58ad3b7b304
BLAKE2b-256 checksum
How to use checksums
93b2d58d71a0853926d219d77061ceeb1bb2ea6afef5456826730d8126d98dcc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.11

Release history Release notifications | RSS feed

This release

0.7.2 This release

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page