Thanks to discord.py, sending local files as embed images is simple. You have to create an instance of discord.File
class:
# When you know the file exact path, you can pass it.
file = discord.File("/this/is/path/to/my/file.png", filename="file.png")
# When you have the file-like object, then you can pass this instead path.
with open("/this/is/path/to/my/file.png", "rb") as f:
file = discord.File(f)
When using the file-like object, you have to open it in rb
mode. Also, in this case, passing filename
to it is not necessary.
Please note that filename
can't contain underscores. This is a Discord limitation.
discord.Embed
instances have a set_image
method which can be used to set an attachment as an image:
embed = discord.Embed()
# Set other fields
embed.set_image(url="attachment://file.png") # Filename here must be exactly same as attachment filename.
After this, you can send an embed with an attachment to Discord:
await channel.send(file=file, embed=embed)
This example uses discord.TextChannel
for sending, but any instance of discord.abc.Messageable
can be used for sending.