A discord message component handler for discord.py
Project description
https://pypi.org/project/discord-message-components/
Introduction
This is a discord.py message component extension made by 404kuso and RedstoneZockt, which you can use until discord.py v2.0 is out
We also added override support for the discord.ext.commands.Bot
client, so you don't have to initialize everything on your own
To override the standart Bot client, add the following to your code
from discord.ext import commands
from discord_message_components import override_client
override_client()
client = commands.Bot(...)
This will add .components
and .slash
to the client, and you don't need the
extension = Extension(client)
thing anymore
And the standart TextChannel.send
function is automatically overridden
We got some features for you like send buttons, send select menus, receive a press or selection and edit messages with buttons and selection menus and everything is compatible with discord.py
Installation
# windows
py -m install discord-message-components
# linux
python3 -m pip install discord-message-components
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_message_components import *
client = commands.Bot(" ")
extension = Extension(client)
@extension.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-message-components", 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
-
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
- ! DaKuso#4214
- 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-message-components-2.1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa7125798a728c3c1da11846744f6dcf72521fb52ef0416c4e36c2947fa10583 |
|
MD5 | 28a5440091fd9d760675dd67f9030e67 |
|
BLAKE2b-256 | e2339d5040c2426fd0c2bc8a98c999e9b7e87c217887c640fc16de659b59a961 |
Hashes for discord_message_components-2.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3595189e45d0ff7b939d0ae74eb4f8b2169bb528058cd5479ec75e0a5a7a425d |
|
MD5 | 9faf23d494b9edc8ccb9413fe7cb672a |
|
BLAKE2b-256 | 3cecff561ab835b3866df23a9496a5e81bbeaa102902d9f8d1421ae108ac2913 |