discord.py.
Your ultimate Discord interactions library forAbout | Installation | Examples | Discord | PyPI
About
What is discord-py-interactions?
discord-py-interactions
is, in the simplest terms, a library extension that builds off of the currently existing discord.py API wrapper. While we do use our own basic class code for our own library, a large majority of this library uses discord.py base events in order to make contextualization of interactions relatively easy for us.
When did this begin?
In mid-December of 2020, Discord released the very first type of components, slash commands. These were relatively primitive at the time of their debut, however, over time they slowly came to grew more complex and mutable. This library was created 2 days after the release of slash commands to Discord, and ever since has been actively growing.
What do we currently support?
At this time, we are able to provide you an non-exhaustive list (because Discord are actively creating more interactions at this time) of all components integrated as interactions:
- Slash Commands
- Buttons
- Selects (also known as dropdowns or menus)
Installation
We recommend using pip in order to install our library. You are able to do this by typing the following line below:
pip install -U discord-py-interactions
Examples
Slash Commands
This example shows a very quick and simplistic solution to implementing a slash command.
from discord import Client, Intents, Embed
from discord_slash import SlashCommand, SlashContext
bot = Client(intents=Intents.default())
slash = SlashCommand(bot)
@slash.slash(name="test")
async def test(ctx: SlashContext):
embed = Embed(title="Embed Test")
await ctx.send(embed=embed)
bot.run("discord_token")
Cogs
This example serves as an alternative method for using slash commands in a cog instead.
# bot.py
from discord import Intents
from discord.ext.commands import Bot
from discord_slash import SlashCommand
# Note that command_prefix is a required but essentially unused paramater.
# Setting help_command=False ensures that discord.py does not create a !help command.
# Enabling self_bot ensures that the bot does not try and parse messages that start with "!".
bot = Bot(command_prefix="!", self_bot=True, help_command=False, intents=Intents.default())
slash = SlashCommand(bot)
bot.load_extension("cog")
bot.run("discord_token")
# cog.py
from discord import Embed
from discord.ext.commands import Bot, Cog
from discord_slash import cog_ext, SlashContext
class Slash(Cog):
def __init__(self, bot: Bot):
self.bot = bot
@cog_ext.cog_slash(name="test")
async def _test(self, ctx: SlashContext):
embed = Embed(title="Embed Test")
await ctx.send(embed=embed)
def setup(bot: Bot):
bot.add_cog(Slash(bot))
Buttons
This basic example shows how to easily integrate buttons into your commands. Buttons are not limited to slash commands and may be used in regular discord.py commands as well.
from discord_slash.utils.manage_components import create_button, create_actionrow
from discord_slash.model import ButtonStyle
buttons = [
create_button(style=ButtonStyle.green, label="A green button"),
create_button(style=ButtonStyle.blue, label="A blue button")
]
action_row = create_actionrow(*buttons)
await ctx.send(components=[action_row])
Advanced
For more advanced use, please refer to our official documentation on buttons here.
Selects
This basic example shows how to add selects into our bot. Selects offer the same accessibility as buttons do in premise of limitations.
from discord_slash.utils.manage_components import create_select, create_select_option, create_actionrow
select = create_select(
options=[
create_select_option("Lab Coat", value="coat", emoji="🥼"),
create_select_option("Test Tube", value="tube", emoji="🧪"),
create_select_option("Petri Dish", value="dish", emoji="🧫")
],
placeholder="Choose your option",
min_values=1, # the minimum number of options a user must select
max_values=2 # the maximum number of options a user can select
)
action_row = create_actionrow(select)
await ctx.send(components=[action_row])
Advanced
For more advanced use, please refer to our official documentation on selects here.
Context Menus
This basic example shows how to add a message context menu.
from discord_slash.context import MenuContext
from discord_slash.model import ContextMenuType
@slash.context_menu(target=ContextMenuType.MESSAGE,
name="commandname",
guild_ids=[789032594456576001])
async def commandname(ctx: MenuContext):
await ctx.send(
content=f"Responded! The content of the message targeted: {ctx.target_message.content}",
hidden=True
)
Advanced
For more advanced use, please refer to our official documentation on context menus here.
- The discord-interactions library is based off of API gateway events. If you are looking for a library webserver-based, please consider:
- If you are looking for a similar library for other languages, please refer to here: