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
A script that writes automatic instagram comments under a post

Send automatic messages under a post on instagram Instagram will rate limit you after some time. From there on you can only post 1 comment every 40 se

Maximilian Freitag 3 Apr 28, 2022
A pypi package that helps in generating discord bots.

A pypi package that helps in generating discord bots.

KlevrHQ 3 Nov 17, 2021
McTrade is a bot exploiting Binance API, open source! built in python !

Open Source Crypto Trading Bot using Binance API Report Bug · Request Feature Table of Contents About The Project Built With Getting Started Prerequis

Raphael Cohen 5 Jul 17, 2022
Bot Realm of the Mad God Exalt (ROTMG). (Auto_nexus, Auto_HP, Auto_Loot)

Bot_ROTMG Bot Realm of the Mad God Exalt (ROTMG). (Auto_nexus, Auto_HP, Auto_Loot) *Este projeto visa apenas o aprendizado, quem faz mal uso é o único

Guilherme Silva Uchoa 1 Oct 30, 2021
Administration Panel for Control FiveM Servers From Discord

FiveM Discord Administration Panel Version 1.0.0 If you would like to report an issue or request a feature. Join our Discord or create an issue. Contr

NIma 9 Jun 17, 2022
Tomli is a Python library for parsing TOML. Tomli is fully compatible with TOML v1.0.0.

Tomli A lil' TOML parser Table of Contents generated with mdformat-toc Intro Installation Usage Parse a TOML string Parse a TOML file Handle invalid T

Taneli Hukkinen 313 Dec 26, 2022
Console BeautifulDiscord theme manager

BeautifulDiscord theme manager Console script for downloading & managing Discord .css themes via BeautifulDiscord. Setup Simply run # Linux/MacOS pip3

1 Dec 15, 2022
A free sniper bot built to work with PancakeSwap: Router V2

Pancakeswap Sniper Bot PancakeSwap sniper bot. Automated sniping bot to snipe crypto coin launches. How it works The sniping bot can be used in three

89 Aug 06, 2022
Python wrapper for eBay API

python-ebay - Python Wrapper for eBay API This project intends to create a simple python wrapper around eBay APIs. Development and Download Sites The

Roopesh 99 Nov 16, 2022
Sample code helps get you started with a simple Python web service using AWS Lambda and Amazon API Gateway

Welcome to the AWS CodeStar sample web service This sample code helps get you started with a simple Python web service using AWS Lambda and Amazon API

0 Jan 20, 2022
A Telegram Bot Plays With Words!!!

TheWordzBot ➠ I Can Turn Text Into Audio ➠ I Can Get Results From Dictionary ➠ I Can Make Google Search For You ➠ I Can Suggest Strong Passwords For Y

RAVEEN KUMAR 8 Feb 28, 2022
A Telegram bot for remotely managing Binance Trade Bot

Binance Trade Bot Manager Telegram A Telegram bot for remotely managing Binance Trade Bot. If you have feature requests please open an issue on this r

Lorenzo Callegari 乐子睿 350 Jan 01, 2023
YuuScource - A Discord bot made with Pycord

Yuu A Discord bot made with Pycord Features Not much lol • Easy to use commands

kekda 9 Feb 17, 2022
A combination between python-flask, that fetch and send data from league client during champion select thanks to LCU

A combination between python-flask, that fetch data and send from league client during champion select thanks to LCU and compare picked champs to the gamesDataBase that we need to collect using my ot

Anas Hamrouni 1 Jan 19, 2022
This is a simple bot that can be used to upload images to a third-party cloud (image hosting). Currently, only the imgbb.com website supports the bot. I Will do future updates

TGImageHosting This is a simple bot that can be used to upload images to a third party cloud (image hosting). Currently, only the imgbb.com website su

Abhijith N T 0 Dec 26, 2021
Simple Telegram Bot for generating BalckPearl BBCode Templates

blackpearl-bbcode-bot Simple Telegram Bot for generating BlackPearl BBCode Templates Written in Pyrogram Features - 🎉 IMDB Info fetching from files -

D. Luffy 5 Oct 19, 2022
Simple screen recorder

Kooha Simple screen recorder Description Kooha is a simple screen recorder built with GTK. It allows you to record your screen and also audio from you

Dave Patrick 1.2k Jan 03, 2023
“ Hey there 👋 I'm Daisy „ AI based Advanced Group Management Bot Suit For All Your Needs ❤️.. Source Code of @Daisyxbot

Project still under heavy development Everything will be changed in the release “ Hey there 👋 I'm Daisy „ AI based Advanced telegram Group Management

TeamDaisyX 43 Nov 12, 2022
This repo contains a small project i've done using PILLOW module in python

This repo contains a small project i've done using PILLOW module in python. I wrote an automated script which generates more than 5k+ unique nfts with 0 hassle in less time.

SasiVatsal 11 Nov 05, 2022