An (a)sync wrapper for discord webhooks
To install the library simply use pipenv (or pip, of course).
pipenv install dhooks
from dhooks import Webhook hook = Webhook('url') hook.send("Hello there! I'm a webhook :open_mouth:")
You can easily format and send embeds using this library.
Embed objects from
discord.py are also compatible with this library.
from dhooks import Webhook, Embed hook = Webhook('url') embed = Embed( description='This is the **description** of the embed! :smiley:', color=0x1e0f3, timestamp=True # sets the timestamp to current time ) image1 = 'https://i.imgur.com/rdm3W9t.png' image2 = 'https://i.imgur.com/f1LOr4q.png' embed.set_author(name='Author Goes Here', icon_url=image1) embed.add_field(name='Test Field', value='Value of the field :open_mouth:') embed.add_field(name='Another Field', value='1234 :smile:') embed.set_footer(text='Here is my footer text', icon_url=image1) embed.set_thumbnail(image1) embed.set_image(image2) hook.send(embeds=embed)
You can easily send files as shown.
from dhooks import Webhook, File from io import BytesIO import requests hook = Webhook('url') file = File('path/to/file.png', name='cat.png') # optional name for discord hook.send('Look at this:', file=file)
You can also pass a file-like object:
response = requests.get('https://i.imgur.com/rdm3W9t.png') file = File(BytesIO(response.content), name='wow.png') hook.send('Another one:', file=file)
Get Webhook Info:
You can get some basic information related to the webhook through Discord's API.
The following attributes will be populated with data from discord:
Modify and Delete Webhooks:
You can change the default name and avatar of a webhook easily.
with open('img.png', rb) as f: img = f.read() # bytes hook.modify(name='Bob', avatar=img) hook.delete() # webhook deleted permanently
To asynchronously make requests using
aiohttp, simply use
Webhook.Async to create the object. An example is as follows. Simply use the
await keyword when calling API methods.
from dhooks import Webhook async def main(): hook = Webhook.Async('url') await hook.send('hello') await hook.modify('bob') await hook.get_info() await hook.delete() await hook.close() # close the client session
Alternatively you can use an
async with block (asynchronous context manager) to automatically close the session once finished.
async def main(): async with Webhook.Async('url') as hook: await hook.send('hello')
You can find the full API reference here.
This project is licensed under MIT.
Feel free to contribute to this project, a helping hand is always appreciated.