Slash util - A simple script to add application command support to discord.py v2.0

Overview

slash_util is a simple wrapper around slash commands for discord.py

This is written by an official discord.py helper to try and stop people using third party forks or otherwise. If any help is required, please ping Maya#9000 in one of the help channels. To any other helpers reading this, this script is exempt from rule 14.

Table of contents

Installation

BEFORE ANYTHING You must install discord.py 2.0 from GitHub:

pip install -U git+https://github.com/Rapptz/discord.py

This script will NOT work without it. See this message for more information on discord.py 2.0

  1. Go to the slash_util.py file

  2. Click the following button img

  3. Copy the entire text and paste it into your own file, then proceed to import it into files you need.

Defining parameters

A few different parameter types can be specified in accordance with the discord api.

These parameters may only be used inside slash commands, not within context menu commands.

  • str for strings
  • int or Range[min, max] for ints (see Ranges for more information)
  • float or Range[min, max] for floats (see Ranges for more information)
  • bool for booleans
  • discord.User or discord.Member for members
  • discord.Role for roles

For defining channel parameters, they are documented in Channels

Ranges

Ranges are a way to specify minimum and maximum values for ints and floats. They can be defined inside a type hint, for example:

@slash_util.slash_command()
async def my_command(self, ctx, number: slash_util.Range[0, 10]):
  # `number` will only be an int within this range
  await ctx.send(f"Your number was {number}!", ephemeral=True)

If you specify a float in either parameter, the value will be a float.

Channels

Channels can be defined using discord.TextChannel, VoiceChannel or CategoryChannel. You can specify multiple channel types via typing.Union:

@slash_util.slash_command()
async def my_command(self, ctx, channel: typing.Union[discord.TextChannel, discord.VoiceChannel]):
  await ctx.send(f'{channel.mention} is not a category!', ephemeral=True)

Examples

slash_util defines a bot subclass to automatically handle posting updated commands to discords api. This isn't required but highly recommended to use.

class MyBot(slash_util.Bot):
    def __init__(self):
        super().__init__(command_prefix="!")  # command prefix only applies to message based commands

        self.load_extension("cogs.my_cog")  # important!
        
if __name__ == '__main__':
    MyBot().run("token")

Sample cog:

class MyCog(slash_util.ApplicationCog):
    @slash_util.slash_command()  # sample slash command
    async def slash(self, ctx: slash_util.Context, number: int):
        await ctx.send(f"You selected #{number}!", ephemeral=True)
    
    @slash_util.message_command(name="Quote")  # sample command for message context menus
    async def quote(self, ctx: slash_util.Context, message: discord.Message):  # these commands may only have a single Message parameter
        await ctx.send(f'> {message.clean_content}\n- {message.author}')
    
    @slash_util.user_command(name='Bonk')  # sample command for user context menus
    async def bonk(self, ctx: slash_util.Context, user: discord.Member):  # these commands may only have a single Member parameter
        await ctx.send(f'{ctx.author} BONKS {user} :hammer:')

def setup(bot):
    bot.add_cog(MyCog(bot))

See the api documentation below for more information on attributes, functions and more.

API Documentation

deco @slash_command(**kwargs)

Defines a function as a slash-type application command.

Parameters:

  • name: str
    • The display name of the command. If unspecified, will use the functions name.
  • guild_id: Optional[int]
    • The guild ID this command will belong to. If unspecified, the command will be uploaded globally.
  • description: str
    • The description of the command. If unspecified, will use the functions docstring, or "No description provided" otherwise.
deco @message_command(**kwargs)

Defines a function as a message-type application command.

Parameters:

  • name: str
    • The display name of the command. If unspecified, will use the functions name.
  • guild_id: Optional[int]
    • The guild ID this command will belong to. If unspecified, the command will be uploaded globally.
deco @user_command(**kwargs)

Defines a function as a user-type application command.

Parameters:

  • name: str
    • The display name of the command. If unspecified, will use the functions name.
  • guild_id: Optional[int]
    • The guild ID this command will belong to. If unspecified, the command will be uploaded globally.
deco @describe(**kwargs: str)

Sets the description for the specified parameters of the slash command. Sample usage:

@slash_util.slash_command()
@describe(channel="The channel to ping")
async def mention(self, ctx: slash_util.Context, channel: discord.TextChannel):
    await ctx.send(f'{channel.mention}')

If this decorator is not used, parameter descriptions will be set to "No description provided." instead.

class Range(min: NumT | None, max: NumT)

Defines a minimum and maximum value for float or int values. The minimum value is optional.

async def number(self, ctx, num: slash_util.Range[0, 10], other_num: slash_util.Range[10]):
    ...
class Bot(command_prefix, help_command=<default-help-command>, description=None, **options)

None

Methods:

get_application_command(self, name: str)

Gets and returns an application command by the given name.

Parameters:

  • name: str
    • The name of the command.

Returns:

  • Command
    • The relevant command object
  • None
    • No command by that name was found.

async delete_all_commands(self, guild_id: int | None = None)

Deletes all commands on the specified guild, or all global commands if no guild id was given.

Parameters:

  • guild_id: Optional[str]
    • The guild ID to delete from, or None to delete global commands.

async delete_command(self, id: int, guild_id: int | None = None)

Deletes a command with the specified ID. The ID is a snowflake, not the name of the command.

Parameters:

  • id: int
    • The ID of the command to delete.
  • guild_id: Optional[str]
    • The guild ID to delete from, or None to delete a global command.

async sync_commands(self)

Uploads all commands from cogs found and syncs them with discord. Global commands will take up to an hour to update. Guild specific commands will update immediately.

class Context(bot: BotT, command: Command[CogT], interaction: discord.Interaction)

The command interaction context.

Attributes

Methods:

async send(self, content=..., **kwargs)

Responds to the given interaction. If you have responded already, this will use the follow-up webhook instead. Parameters embed and embeds cannot be specified together. Parameters file and files cannot be specified together.

Parameters:

  • content: str
    • The content of the message to respond with
  • embed: discord.Embed
    • An embed to send with the message. Incompatible with embeds.
  • embeds: List[discord.Embed]
    • A list of embeds to send with the message. Incompatible with embed.
  • file: discord.File
    • A file to send with the message. Incompatible with files.
  • files: List[discord.File]
    • A list of files to send with the message. Incompatible with file.
  • ephemeral: bool
    • Whether the message should be ephemeral (only visible to the interaction user).
    • Note: This field is ignored if the interaction was deferred.

Returns

async def defer(self, *, ephemeral: bool = False) -> None:

Defers the given interaction.

This is done to acknowledge the interaction. A secondary action will need to be sent within 15 minutes through the follow-up webhook.

Parameters:

  • ephemeral: bool
    • Indicates whether the deferred message will eventually be ephemeral. Defaults to False

Returns

  • None

Raises

property cog(self)

The cog this command belongs to.

property guild(self)

The guild this interaction was executed in.

property message(self)

The message that executed this interaction.

property channel(self)

The channel the interaction was executed in.

property author(self)

The user that executed this interaction.

class ApplicationCog(*args: Any, **kwargs: Any)

The cog that must be used for application commands.

Attributes:

Owner
Maya
Maya
An opensource chat service that cares about your privacy.

An opensource chat service that cares about your privacy. Instructions to set up a local testing environment: 1) Clone this repository and navigate to

Aiman Al Masoud 2 Dec 03, 2022
A pypi packages finder telegram bot.

PyPi-Bot A pypi packages information finder telegram bot. Made with Python3 (C) @FayasNoushad Copyright permission under MIT License License - https:

Fayas Noushad 17 Oct 21, 2022
gnosis safe tx builder

Ape Safe: Gnosis Safe tx builder Ape Safe allows you to iteratively build complex multi-step Gnosis Safe transactions and safely preview their side ef

228 Dec 22, 2022
Inline Телеграм бот для отправки GIF-изображений из ВКонтакте

VK GIFS Bot VKGIFSBot - удобный бот для отправки GIF-изображений из ВКонтакте в Телеграмe. Работает это очень просто: бот получает токен ВКонтакте API

Sergievsky Nikita 5 Dec 10, 2022
Discord bot built using Python. through this you can get information about the upcoming matches, scoreboard, live score

IPL-bot This is a Discord bot built using Python. through this you can get information about the upcoming matches, scoreboard, live score, and many mo

0 Dec 23, 2021
A Discord bot coded in Python

Perseverance-Bot By Toricane Replit Code | GitHub Code | Discord Server | Website Perseverance is a multi-purpose bot coded in Python. It has moderati

4 Mar 30, 2022
A Simple Telegram Bot That Can Generate Strong Password With Many Features Written In Python Using Pyrogram

Password-Generator-Bot A Simple Telegram Bot That Can Generate Strong Password With Many Features Written In Python Using Pyrogram Features Random Pas

Muhammed Fazin 17 Dec 23, 2022
Fetch torrent links from nyaa, according to releases by smoke index.

Nyaa - Smoke's index torrent fetcher Description This script parses the local (or online) anime release index (csv format) made by Big Smoke. And uses

Dinank 21 Jun 08, 2022
A tool for transferring server variable values from one intersect gamedata.db to another

Server Variable Transfer Tool Purpose This tool exists for use with the Intersect Engine (Ascension Game Dev GitHub). Its purpose is to UPDATE one sql

AVild 2 Oct 27, 2021
A fast and expressive Craigslist API wrapper

pycraigslist A fast and expressive Craigslist API wrapper. ⚠ As of September 2021, it is believed that Craigslist added a rate-limiter. It is advised

Ira Horecka 24 Dec 28, 2022
Discord raid tool!

GANG Multi Tool Menu: -- YOUTUBE TUTORIAL! Features: Most Advanced Multi Tool! Spammer DM Spammer Friend Spammer Reaction Spam WebhookSpammer Typing

1 Feb 13, 2022
Google Drive, OneDrive and Youtube as covert-channels - Control systems remotely by uploading files to Google Drive, OneDrive, Youtube or Telegram

covert-control Control systems remotely by uploading files to Google Drive, OneDrive, Youtube or Telegram using Python to create the files and the lis

Ricardo Ruiz 52 Dec 06, 2022
A discord http interactions framework built on top of Sanic

snowfin An async discord http interactions framework built on top of Sanic Installing for now just install the package through pip via github # Unix b

kaj 13 Dec 15, 2022
Deezer client for python

Deezer Python Client A friendly Python wrapper around the Deezer API. Installation The package is published on PyPI and can be installed by running: p

Bruno Alla 103 Dec 19, 2022
Simple VK API wrapper for Python

VK Admier: documentation VK Admier is simple VK API wrapper for community bot development. Authorization You should create bot object from Client clas

Egor Light 2 Nov 10, 2022
Pycardano - A lightweight Cardano client in Python

PyCardano PyCardano is a standalone Cardano client written in Python. The librar

151 Dec 31, 2022
This package allows interactions with the BuyCoins API.

The BuyCoins Python library allows interactions with the BuyCoins API from applications written in Python.

Abdulazeez Abdulazeez Adeshina 45 May 23, 2022
You can share your Chegg account for answers using this bot with your friends without getting your account blocked/flagged

Chegg-Answer-Bot You can share your Chegg account for answers using this bot with your friends without getting your account blocked/flagged Reuirement

Ammey Saini 27 Dec 24, 2022
Auxiliator is telegram bot for basic web-application analysis

Auxiliator Auxiliator is telegram bot for basic web-application analysis What for? Sometimes there is no access to your main PC, where you can scan we

Revoltage 13 Dec 26, 2021
Hcl.py is an Amino client for Python

Hcl.py Hcl.py Hcl.py is an Amino client for Python. It provides to access aminoapps Web, app and socket servers. Developed BY Kapidev And Upgraded BY

Oustex 3 Dec 02, 2021