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
Senditapp.com bot spammer, spam your friends

Sendit Spammer Python ⚠️ I am not responsible for how you use this tool. This tool is against "Sendit" ToS and shall not be used in a production envir

Glaukio 1 Dec 31, 2021
Erhalten Sie wichtige Warnmeldungen des Bevölkerungsschutzes für Gefahrenlagen wie zum Beispiel Gefahrstoffausbreitung oder Unwetter per Programmierschnittstelle.

nina-api Erhalten Sie wichtige Warnmeldungen des Bevölkerungsschutzes für Gefahrenlagen wie zum Beispiel Gefahrstoffausbreitung oder Unwetter per Prog

Bundesstelle für Open Data 68 Dec 19, 2022
Tracks how much money a profile has in their bank and graphs it, as long as they enable the bank api

Tracks how much money a profile has in their bank and graphs it, as long as they enable the bank api. (you could really use this to track anything from the hypixel api)

1 Feb 08, 2022
Exporta archivos masivamente del TEC Digital.

TEC Digital Files Exporter Script que permite exportar los archivos de cursos del TEC Digital del Instituto Tecnológico de Costa Rica, debido al borra

Joseph Vargas 22 Apr 08, 2021
GitHub Actions Poll Mode AutoScaler (GAPMAS)

GitHub Actions Poll Mode AutoScaler, or GAPMAS, is a simple tool that helps you run ephemeral GitHub Actions self-hosted runners on your own infrastructure.

Frode Nordahl 4 Nov 04, 2022
This is a open source discord bot project

pythonDiscordBot This is a open source discord bot project #based on the MAX A video: https://www.youtube.com/watch?v=jHZlvRr9KxM Prerequisites Python

Edson Holanda Teixeira Junior 3 Oct 11, 2021
Get charts, top artists and top songs WITHOUT LastFM API

LastFM Get charts, top artists and top songs WITHOUT LastFM API Usage Get stats (charts) We provide many filters and options to customize. Geo filter

4 Feb 11, 2022
A Powerful Discord Webhook spammer

RocketHook | The discord spammer Some links: Telegram | Github FEATURES 🤖 Hide your ass and be a good robot ! Full proxies support HTTP/S, SOCKS4/5 S

Or 2 Feb 27, 2022
A telegram bot for generate fake details. Written in python using telethon

FakeDataGenerator A telegram bot for generate fake details. Written in python using telethon. Mandatory variables API_HASH Get it from my telegram.org

Oxidised-Man 6 Dec 19, 2021
FTX auto lending bot with python

FTX auto lending bot Get the API key Check my article for step by step + screenshots Setup & Run Install python 3 Install dependency pip install -r re

Patompong Manprasatkul 1 Dec 24, 2021
Create light scenes , voice control, ifttt, fuzzywuzzy speech correction and much more with Tuya light bulbs.

LightBox Features: Auto discover tuya lights Set and create moods (aka: light profiles) Change moods via IFTTT List moods via IFTTT FuzzyWuzzy, speech

Robert Nagtegaal 1 Dec 20, 2021
This Lambda will Pull propagated routes from TGW and update VPC route table

AWS-Transitgateway-Route-Propagation This Lambda will Pull propagated routes from TGW and update VPC route table. Tested on python 3.8 Lambda AWS INST

4 Jan 20, 2022
Send alert to telegram use telegram cli

Run standalone: Rename conf.yml.example to conf.yml Change block cli(Add your api_id and hash) Install requirements.txt Run python AlertManagerTG.py I

Eugene Arkharov 1 Nov 12, 2021
Free and Open Source Group Voice chat music player for telegram ❤️ with button support youtube playback support

Free and Open Source Group Voice chat music player for telegram ❤️ with button support youtube playback support

Sehath Perera 1 Jan 08, 2022
基于nonebot2的twitter推送插件

HanayoriBot(Twitter插件) ✨ 基于NoneBot2的Twitter推送插件,自带百度翻译接口 ✨ 简介 本插件基于NoneBot2与go-cqhttp,可以及时将Twitter用户的最新推文推送至群聊,并且自带基于百度翻译的推文翻译接口,及时跟进你所关注的Vtuber的外网动态。

鹿乃まほろ / Mahoro Kano 16 Feb 12, 2022
Hellomotoot - PSTN Mastodon Client using Mastodon.py and the Twilio API

Hello MoToot PSTN Mastodon Client using Mastodon.py and the Twilio API. Allows f

Lorenz Diener 9 Nov 22, 2022
Kakatua discord music bot

Donate Ayo donasi! Lokal Internasional Ucapan Terima Kasih Tentu saja, donatur Bunga dan talent-talent h!mawari. Semoga rezeki teman-teman semakin lan

1 Oct 30, 2021
A telegram smoot and high quality music player bot.

▪︎ Music Player ▪︎ A smooth telegram music bot with high quality songs ■ [Features] • Fast Starts streaming your inputs while downloading and converti

Simple Boy 3 Feb 05, 2022
This is a free python bot program that crosses you to farm with auto click in space crypto NFT game, having fun :) Creator: Marlon Zanardi

🚀 Space Crypto auto click bot ready-to-use 🚀 This is a free python bot program that crosses you to farm with auto click in space crypto NFT game, ha

170 Dec 20, 2022
A Python library for miHoYo bbs and HoYoLAB Community

A Python library for miHoYo bbs and HoYoLAB Community. genshin 原神签到小助手

384 Jan 05, 2023