A discord user-interface extension for discord.py
Project description
discord-ui
A discord.py user-interface extension
pip package
▪
read the docs
▪
examples
Introduction
This is a discord.py ui extension made by 404kuso and RedstoneZockt for using discord's newest ui features like buttons, slash commands and context commands (we got dpy2 supported if you want to keep using our libary)
Our libary overrides some of the functions in dpy, so this lib is easier to use.
The MessageAble.send
function and the Webhook.send
are
both overriden with our own custom method.
discord.ext.commands.Bot
is overriden too, but only if you use dpy 2
in order for our lib to work, so if you (somewhy) wanna check the type of the client, you need to
use isinstance(your_client, discord.ext.commands.Bot)
, because type(your_client)
will be of type OverridenV2Bot
For more information about overriding, take a look at the override module
Installation
# windows
py -m install discord-ui
# linux
python3 -m pip install discord-ui
Docs
You can read the docs here
The docs can include some typos or issues, if so, plz let me know
License
This project is under MIT License
Note
If you want to use slash commands, in the oauth2 invite link generation,
you have to check both bot
and application.commands
fields
Example
This is an example with a slash command, that can create a link button with parameters, a function that will automatically respond to every button and menu with the value they pressed and a command that will send a button example
import discord
from discord.ext import commands
from discord_ui import *
client = commands.Bot(" ")
ui = UI(client)
@ui.slash.subcommand_group(base_names=["generate", "link"], name="button", description="sends a button and a linkbutton", options=[
SlashOption(str, "message content", "the content of the message"),
SlashOption(str, "name", "the name of the button"),
SlashOption(str, "link", "the link for the button"),
SlashOption(str, "emoji", "a emoji appearing before the text")
], guild_ids=["785567635802816595"])
async def command(ctx, message_content="cool, right?", name="click me", link="https://github.com/KusoRedsto/discord-ui", emoji=None):
if not link.startswith("http://") and not link.startswith("https://"):
return await ctx.respond("The link has to start with `http://` or `https://`", hidden=True)
await ctx.respond(content=message_content, components=[LinkButton(link, label=name, emoji=emoji)])
@client.listen("on_ready")
async def on_ready():
print("ready")
@client.listen("on_message"):
async def on_message(message: Message):
if message.content = "!test":
await message.channel.send("hello", components=[
[Button("custom", "hello"), Button("custom_2", "world", "green")]
Button("custom", "yeahhh", "red")
])
@client.listen('on_button_press')
async def on_button(btn: PressedButton, msg: ResponseMessage):
await msg.respond(btn.member.mention + ", you pressed on " + btn.content + " with the custom id of " + btn.custom_id)
@client.listen('on_menu_select')
async def on_select(menu: SelectedMenu, msg: ResponseMessage):
await msg.respond(menu.member.mention + ", you selected " + ', '.join([x.content for x in menu.values]) + " on the menu with the custom id " + menu.custom_id)
client.run(token)
You can find more (and better) examples here
Changelog
-
3.1.0
Added
- discordpy 2 support
We added support for discord.py v2, so you can stay loyal to our libary and use it together with discord.py v2!
- Exceptions
Added own Exceptions for errors
- ParseMethod
You can change the way the extension parses interaction data. You can choose between different Methods
- Auto-defer
The libary will autodefer all interactions public. If you want to change that, take a look at the documentation for this feature
- slashcommand edit check
Slash commands will only be edited if there were some changes, so you won't get a
invalid interaction
error in discord after starting the bot If only permissions were changed, just the permissions will be edited and not the whole command like beforeFixed
- slash commands
I finally fixed the damn slashcommand system, it should work now
- Parsing
The resolving, fetching and pulling from the cache methods should all work
-
3.0.1
Fixed
- small project issues
-
3.0.0
Added
- context commands
Context commands are now available
Changed
- Project name
The project's name was changed from
discord-message-components
todiscord-ui
Extension
is nowUI
-
2.1.0
Added
- Webhook support
You are now able to use webhooks together with message components, to send a webhook message with the components, use the
Components.send_webhook
function. The standart webhook function is also overriden with the new component function- Float type
You can now use
float
as the argument type for a slash command option- Auto empty names
Buttons, LinkButtons and SelectOptions labels are now by default
\u200b
, which is an "empty" charChanged
- Code documentation to more be more informative
Fixed
-
Fixed small code issues (they were already fixed in previous versions, but I just wanna list this here)
-
Docs are now working
-
2.0.2
Fixed
- SelectOption
Select option threw an exception if it was smaller than 1 or higher than 100
-
2.0.0
Added
-
Slashcomamnd support
Slash
class for slash commandsSlash.command
,Slash.subcommand
andSlash.subcommand_groups
are available for creating slash commandsSlashedCommand
andSlashedSubCommand
are there for used slash commands
-
Message
- disable_action_row(row_numbers:
int
|range
, disable:bool
)
disables (enables) component row(s) in the message
- disable_components(disable:
bool
)
disables (enables) all componentss
- disable_action_row(row_numbers:
-
overrides
Messageable.send
returns Message instead of discord.Message and takes components parameteroverride_client
function added
-
interaction.send
, creates followup messages which can be hidden -
Component.listening_component
A listening component with a callback function that will always be executed whenever a component with the specified custom_id was used
Changed
-
Message
- All Message objects don't use the client object anymore
- Message.wait_for now needs the client as the first parameter
Fixed
- Interaction
All interaction responses work now
- A lot of issues I fogor💀
-
-
1.2.2
Fixed
- Docs fixed
-
1.2.1
Fixed
- Small code fixes
-
1.1.2
Fixed
- Small code fixes
-
1.1.1
Added
- Message.edit()
You can now edit messages with button support
- Message.edit()
-
1.1.0
Changed
- Major changes to request code, now using the client's request
ResponseMessage.acknowledge()
->ResponseMessage.defer()
Changed the name of the function + changed
ResponseMessage.acknowledged
->ResponseMessage.deferred
ResponseMessage.defer()
=>await ResponseMessage.defer()
defer
(acknowledge
) is now async and needs to be awaited
Added
- hidden responses
You can now send responses only visible to the user
Fixed
ResponseMessage.respond()
Now doesn't show a failed interaction
-
1.0.5
Fixed
ResponseMessage.respond()
responding now doesn't fail after sending the message, it will now defer the interaction by it self if not already deferred and then send the message
-
1.0.4
Added
ResponseMessage.acknowledged
Whether the message was acknowledged with the
ResponseMessage.acknowledged()
function
Changed
-
ResponseMessage.respond()
=>await ResponseMessage.respond()
respond() function is now async and needs to be awaited
-
ResponseMessage.respond() -> None
=>ResponseMessage.respond() -> Message or None
respond() now returns the sent message or None if ninja_mode is true
-
1.0.3
Added
Button.hash
Buttons have now a custom hash property, generated by the discord api
Contact
You can contact us on discord
RedstoneZockt#2510
! ♥UwU kuso-kun UwU 💕#6969
- a shitty support server
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for discord_ui-3.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6925f988e38e455c949497d36451027bb6f6db2806b372f4860cc5ab92cb71b1 |
|
MD5 | 2df0b7d2a5520cfe9d9273178ad10dce |
|
BLAKE2b-256 | d7c1528491382f62b76666ccd1ecc6148fe98bfd4d93f0d3ebf304cc46e5c156 |