Cool idiomatic discord.py embed builder with a lot of features
Project description
Discord EmbedBuilder
Does a lot of shit and simplifies discord's annoying and lengthy embed creation process.
Installation
pip install py-embedbuilder
From there you can just..
Example
import discord
from discord.ext import commands
@bot.command(name="example")
async def example(ctx):
msg = await EmbedBuilder(ctx) \
.set_title("Welcome!") \
.set_description("This is a basic embed") \
.set_color(discord.Color.blue()) \
.send()
or
@bot.command(name="example")
async def example(ctx):
builder = EmbedBuilder(ctx)
messages = await (builder
.set_title("Welcome!")
.set_description("This is a basic embed")
.set_color(discord.Color.blue())
.send())
These both do the exact same thing it's just a matter of preference.
"Quick" explanation of everything you can do
? denotes optional inputs and SHOULD NOT be included in the actual function. If there is no ? it's a required field.
Basic stuff
.set_title("Your title here")
.set_description("Whatever you want to say")
.set_color(discord.Color.red()) # or any color
.set_url("https://example.com") # makes the title clickable
Author details
Author details (author name, author icon url, author url) are incredibly simple.
.set_author("Cheap Credits", ?icon_url="https://example.com/img.png", ?url="https://cheap.ypuf.xyz")
Footer details
.set_footer("Visit my site!", ?icon_url="https://example.com/img.png")
Fields
These are just normal field inputs so it's title, description and then inline: true/false
.add_field("Look at this number", "17", inline=True)
.add_field("Another field", "Some value", inline=False)
Images and thumbnails
.set_thumbnail("https://example.com/small_image.png") # small image in top right
.set_image("https://example.com/big_image.png") # big image at bottom
Files and attachments
.set_file_path("./my_image.png") # attach a local file
.add_file(discord.File("another_file.txt")) # or add discord files directly
Message content (outside the embed)
.set_content("This text appears above the embed")
Timestamps
.set_timestamp() # uses current time
.set_timestamp(some_datetime_object) # or your own time
.set_timezone('America/New_York') # change timezone if needed
For slash commands
Works exactly the same but pass the interaction instead of ctx:
@bot.slash_command()
async def slash_example(interaction):
await EmbedBuilder(interaction) \
.set_title("Slash command embed") \
.set_ephemeral(True) \
.send() # only the user who ran the command can see it
Long descriptions? No problem
If your description is too long, it'll automatically split it into multiple embeds:
really_long_text = "Lorem ipsum..." * 1000
await EmbedBuilder(ctx) \
.set_title("Long ass message") \
.set_description(really_long_text) \
.send() # automatically creates multiple embeds
Pagination for fancy stuff
Want actual page navigation? Enable pagination:
builder = EmbedBuilder(ctx).enable_pagination()
# Add custom pages
builder.add_page(title="Page 1", description="First page content")
builder.add_page(title="Page 2", description="Second page content")
builder.add_page(title="Page 3", description="Third page content")
await builder.send() # creates navigation buttons
Other useful shit
Reply to messages
.set_reply(True) # default behavior (if you're sending to a specific channel it won't reply to the user anyway)
.set_reply(False) # don't reply, just send normally
Auto-delete messages
.set_delete_after(30) # deletes after 30 seconds
Edit existing messages instead of sending new ones
old_message = await ctx.send("Loading...")
await EmbedBuilder(ctx) \
.edit_message(old_message) \
.set_title("Done!") \
.send()
Multiple embeds with gradient colors (because why not)
honestly this doesnt have any proper functionality right now but it will i prmise
await EmbedBuilder(ctx) \
.set_description("Long content that creates multiple embeds") \
.enable_gradient_colors() \
.send() # each embed gets a different color
That's basically it
The library handles all the annoying Discord limits and validation for you. Just chain the methods you want and call .send() at the end.
If something breaks, it'll probably tell you what went wrong instead of just dying silently like Discord's API likes to do.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_embedbuilder-0.1.3.tar.gz.
File metadata
- Download URL: py_embedbuilder-0.1.3.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e37532d3bd04a7406c3ab6acd222e727f4444e9f45155b59ede567e53fe13a09
|
|
| MD5 |
eb47f4f7fc155ad33b8d863466b6d774
|
|
| BLAKE2b-256 |
81d17136bd7f4a2b40d9ffd9c2393818ef28b294a32ab605521b2c15f35642da
|
File details
Details for the file py_embedbuilder-0.1.3-py3-none-any.whl.
File metadata
- Download URL: py_embedbuilder-0.1.3-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d15e048221d99e822b206b1b25986aa6ea9e768c8ccc01cdcf29178be186112
|
|
| MD5 |
60ad47a557791f0d873f7f657d9eaa2d
|
|
| BLAKE2b-256 |
5c42d8ace83640530555819654da01eee97df4ee8c6adbfbaceddaa5f1a925a0
|