execute discord webhooks
Project description
python-discord-webhook
Execute Discord Webhooks (also has async support)
Install
Install via pip:
pip install discord-webhook
Examples
- Basic Webhook
- Manage Being Rate Limited
- Multiple Webhook Urls
- Embedded Content
- Edit Webhook Message
- Delete Webhook Message
- Send Files
- Remove Embeds and Files
- Allowed Mentions
- Use Proxies
- Timeout
- Async Support
Basic Webhook
from discord_webhook import DiscordWebhook
webhook = DiscordWebhook(url='your webhook url', content='Webhook Message')
response = webhook.execute()
Manage being Rate Limited
from discord_webhook import DiscordWebhook
# if rate_limit_retry is True then in the event that you are being rate
# limited by Discord your webhook will automatically be sent once the
# rate limit has been lifted
webhook = DiscordWebhook(url='your webhook url', rate_limit_retry=True,
content='Webhook Message')
response = webhook.execute()
Multiple Webhook URLs
from discord_webhook import DiscordWebhook
webhook_urls = ['webhook url 1', 'webhook url 2']
webhook = DiscordWebhook(url=webhook_urls, content='Webhook Message')
response = webhook.execute()
Webhook with Embedded Content
from discord_webhook import DiscordWebhook, DiscordEmbed
webhook = DiscordWebhook(url='your webhook url')
# create embed object for webhook
# you can set the color as a decimal (color=242424) or hex (color='03b2f8') number
embed = DiscordEmbed(title='Your Title', description='Lorem ipsum dolor sit', color='03b2f8')
# add embed object to webhook
webhook.add_embed(embed)
response = webhook.execute()
from discord_webhook import DiscordWebhook, DiscordEmbed
webhook = DiscordWebhook(url='your webhook url')
# create embed object for webhook
embed = DiscordEmbed(title='Your Title', description='Lorem ipsum dolor sit', color='03b2f8')
# set author
embed.set_author(name='Author Name', url='author url', icon_url='author icon url')
# set image
embed.set_image(url='your image url')
# set thumbnail
embed.set_thumbnail(url='your thumbnail url')
# set footer
embed.set_footer(text='Embed Footer Text', icon_url='URL of icon')
# set timestamp (default is now)
embed.set_timestamp()
# add fields to embed
embed.add_embed_field(name='Field 1', value='Lorem ipsum')
embed.add_embed_field(name='Field 2', value='dolor sit')
# add embed object to webhook
webhook.add_embed(embed)
response = webhook.execute()
This is another example with embedded content
from discord_webhook import DiscordWebhook, DiscordEmbed
webhook = DiscordWebhook(url='your webhook url', username="New Webhook Username")
embed = DiscordEmbed(title='Embed Title', description='Your Embed Description', color='03b2f8')
embed.set_author(name='Author Name', url='https://github.com/lovvskillz', icon_url='https://avatars0.githubusercontent.com/u/14542790')
embed.set_footer(text='Embed Footer Text')
embed.set_timestamp()
embed.add_embed_field(name='Field 1', value='Lorem ipsum')
embed.add_embed_field(name='Field 2', value='dolor sit')
embed.add_embed_field(name='Field 3', value='amet consetetur')
embed.add_embed_field(name='Field 4', value='sadipscing elitr')
webhook.add_embed(embed)
response = webhook.execute()
By Default, The Embed fields are placed side by side. We can arrange them in a new line by setting inline=False
as follows:
from discord_webhook import DiscordWebhook, DiscordEmbed
webhook = DiscordWebhook(url="your webhook url", username="New Webhook Username")
embed = DiscordEmbed(
title="Embed Title", description="Your Embed Description", color='03b2f8'
)
embed.set_author(
name="Author Name",
url="https://github.com/lovvskillz",
icon_url="https://avatars0.githubusercontent.com/u/14542790",
)
embed.set_footer(text="Embed Footer Text")
embed.set_timestamp()
# Set `inline=False` for the embed field to occupy the whole line
embed.add_embed_field(name="Field 1", value="Lorem ipsum", inline=False)
embed.add_embed_field(name="Field 2", value="dolor sit", inline=False)
embed.add_embed_field(name="Field 3", value="amet consetetur")
embed.add_embed_field(name="Field 4", value="sadipscing elitr")
webhook.add_embed(embed)
response = webhook.execute()
Edit Webhook Messages
from discord_webhook import DiscordWebhook
from time import sleep
webhook = DiscordWebhook(url='your webhook url', content='Webhook content before edit')
sent_webhook = webhook.execute()
webhook.content = 'After Edit'
sleep(10)
sent_webhook = webhook.edit(sent_webhook)
Delete Webhook Messages
from discord_webhook import DiscordWebhook
from time import sleep
webhook = DiscordWebhook(url='your webhook url', content='Webhook Content')
sent_webhook = webhook.execute()
sleep(10)
webhook.delete(sent_webhook)
Send Files
from discord_webhook import DiscordWebhook
webhook = DiscordWebhook(url='your webhook url', username="Webhook with files")
# send two images
with open("path/to/first/image.jpg", "rb") as f:
webhook.add_file(file=f.read(), filename='example.jpg')
with open("path/to/second/image.jpg", "rb") as f:
webhook.add_file(file=f.read(), filename='example2.jpg')
response = webhook.execute()
You can use uploaded attachments in Embeds:
from discord_webhook import DiscordWebhook, DiscordEmbed
webhook = DiscordWebhook(url='your webhook url')
with open("path/to/image.jpg", "rb") as f:
webhook.add_file(file=f.read(), filename='example.jpg')
embed = DiscordEmbed(title='Embed Title', description='Your Embed Description', color='03b2f8')
embed.set_thumbnail(url='attachment://example.jpg')
webhook.add_embed(embed)
response = webhook.execute()
Remove Embeds and Files
from discord_webhook import DiscordWebhook, DiscordEmbed
webhook = DiscordWebhook(url='your webhook url')
with open("path/to/image.jpg", "rb") as f:
webhook.add_file(file=f.read(), filename='example.jpg')
embed = DiscordEmbed(title='Embed Title', description='Your Embed Description', color='03b2f8')
embed.set_thumbnail(url='attachment://example.jpg')
webhook.add_embed(embed)
response = webhook.execute(remove_embeds=True, remove_files=True)
# webhook.files and webhook.embeds will be empty after webhook is executed
# You could also manually call the functions webhook.remove_files() and webhook.remove_embeds()
.remove_file()
removes the given file
from discord_webhook import DiscordWebhook
webhook = DiscordWebhook(url='your webhook url', username="Webhook with files")
# send two images
with open("path/to/first/image.jpg", "rb") as f:
webhook.add_file(file=f.read(), filename='example.jpg')
with open("path/to/second/image.jpg", "rb") as f:
webhook.add_file(file=f.read(), filename='example2.jpg')
# remove 'example.jpg'
webhook.remove_file('example.jpg')
# only 'example2.jpg' is sent to the webhook
response = webhook.execute()
Allowed Mentions
Look into the Discord Docs for examples and for more explanation
This example would only ping user 123
and 124
but not everyone else.
from discord_webhook import DiscordWebhook
content = "@everyone say hello to our new friends <@123> and <@124>"
allowed_mentions = {
"users": ["123", "124"]
}
webhook = DiscordWebhook(url='your webhook url', content=content, allowed_mentions=allowed_mentions)
response = webhook.execute()
Use Proxies
from discord_webhook import DiscordWebhook
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
webhook = DiscordWebhook(url='your webhook url', content='Webhook Message', proxies=proxies)
response = webhook.execute()
or
from discord_webhook import DiscordWebhook
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
webhook = DiscordWebhook(url='your webhook url', content='Webhook Message')
webhook.set_proxies(proxies)
response = webhook.execute()
Use CLI
usage: discord_webhook [-h] -u URL [URL ...] -c CONTENT [--username USERNAME]
[--avatar_url AVATAR_URL]
Trigger discord webhook(s).
optional arguments:
-h, --help show this help message and exit
-u URL [URL ...], --url URL [URL ...]
Webhook(s) url(s)
-c CONTENT, --content CONTENT
Message content
--username USERNAME override the default username of the webhook
--avatar_url AVATAR_URL
override the default avatar of the webhook
Timeout
from requests.exceptions import Timeout
from discord_webhook import DiscordWebhook, DiscordEmbed
# We will set ridiculously low timeout threshold for testing purposes
webhook = DiscordWebhook(url='your webhook url', timeout=0.1)
# You can also set timeout later using
# webhook.timeout = 0.1
embed = DiscordEmbed(title='Embed Title', description='Your Embed Description', color='03b2f8')
webhook.add_embed(embed)
# Handle timeout exception
try:
response = webhook.execute()
except Timeout as err:
print(f'Oops! Connection to Discord timed out: {err}')
Async support
In order to use the async version, you need to install the package using:
pip install discord-webhook[async]
Example usage:
import asyncio
from discord_webhook import AsyncDiscordWebhook
async def send_webhook(message):
webhook = AsyncDiscordWebhook(url='your webhook url',
content=message)
await webhook.execute()
async def main():
await asyncio.gather(
send_webhook('Async webhook message 1'),
send_webhook('Async webhook message 2'),
) # sends both messages asynchronously
asyncio.run(main())
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
discord-webhook-0.16.1.tar.gz
(13.8 kB
view hashes)
Built Distribution
Close
Hashes for discord_webhook-0.16.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 321278bfc976331c0f78250dfa393be310f61f04a61c4b4bc7ec61dff65ae22f |
|
MD5 | dca4062c630eb3df8827fe08d255eba3 |
|
BLAKE2b-256 | fe6e06b5dfa03cb7a2f0b8397e3a9dda52f7120e70e74d540e986e9daf553ea6 |