mirror of
https://github.com/captbaritone/webamp.git
synced 2026-01-24 02:36:00 +00:00
148 lines
3.4 KiB
Python
148 lines
3.4 KiB
Python
import json
|
|
import requests
|
|
import time
|
|
import datetime
|
|
from collections import defaultdict
|
|
|
|
class Webhook:
|
|
def __init__(self, url, **kwargs):
|
|
|
|
"""
|
|
Initialise a Webhook Embed Object
|
|
"""
|
|
|
|
self.url = url
|
|
self.msg = kwargs.get('msg')
|
|
self.color = kwargs.get('color')
|
|
self.title = kwargs.get('title')
|
|
self.title_url = kwargs.get('title_url')
|
|
self.author = kwargs.get('author')
|
|
self.author_icon = kwargs.get('author_icon')
|
|
self.author_url = kwargs.get('author_url')
|
|
self.desc = kwargs.get('desc')
|
|
self.fields = kwargs.get('fields', [])
|
|
self.image = kwargs.get('image')
|
|
self.thumbnail = kwargs.get('thumbnail')
|
|
self.footer = kwargs.get('footer')
|
|
self.footer_icon = kwargs.get('footer_icon')
|
|
self.ts = kwargs.get('ts')
|
|
|
|
|
|
def add_field(self,**kwargs):
|
|
'''Adds a field to `self.fields`'''
|
|
name = kwargs.get('name')
|
|
value = kwargs.get('value')
|
|
inline = kwargs.get('inline', True)
|
|
|
|
field = {
|
|
|
|
'name' : name,
|
|
'value' : value,
|
|
'inline' : inline
|
|
|
|
}
|
|
|
|
self.fields.append(field)
|
|
|
|
def set_desc(self,desc):
|
|
self.desc = desc
|
|
|
|
def set_author(self, **kwargs):
|
|
self.author = kwargs.get('name')
|
|
self.author_icon = kwargs.get('icon')
|
|
self.author_url = kwargs.get('url')
|
|
|
|
def set_title(self, **kwargs):
|
|
self.title = kwargs.get('title')
|
|
self.title_url = kwargs.get('url')
|
|
|
|
def set_thumbnail(self, url):
|
|
self.thumbnail = url
|
|
|
|
def set_image(self, url):
|
|
self.image = url
|
|
|
|
def set_footer(self,**kwargs):
|
|
self.footer = kwargs.get('text')
|
|
self.footer_icon = kwargs.get('icon')
|
|
ts = kwargs.get('ts')
|
|
if ts == True:
|
|
self.ts = str(datetime.datetime.utcfromtimestamp(time.time()))
|
|
else:
|
|
self.ts = str(datetime.datetime.utcfromtimestamp(ts))
|
|
|
|
|
|
def del_field(self, index):
|
|
self.fields.pop(index)
|
|
|
|
@property
|
|
def json(self,*arg):
|
|
'''
|
|
Formats the data into a payload
|
|
'''
|
|
|
|
data = {}
|
|
|
|
data["embeds"] = []
|
|
embed = defaultdict(dict)
|
|
if self.msg: data["content"] = self.msg
|
|
if self.author: embed["author"]["name"] = self.author
|
|
if self.author_icon: embed["author"]["icon_url"] = self.author_icon
|
|
if self.author_url: embed["author"]["url"] = self.author_url
|
|
if self.color: embed["color"] = self.color
|
|
if self.desc: embed["description"] = self.desc
|
|
if self.title: embed["title"] = self.title
|
|
if self.title_url: embed["url"] = self.title_url
|
|
if self.image: embed["image"]['url'] = self.image
|
|
if self.thumbnail: embed["thumbnail"]['url'] = self.thumbnail
|
|
if self.footer: embed["footer"]['text'] = self.footer
|
|
if self.footer_icon: embed['footer']['icon_url'] = self.footer_icon
|
|
if self.ts: embed["timestamp"] = self.ts
|
|
|
|
if self.fields:
|
|
embed["fields"] = []
|
|
for field in self.fields:
|
|
f = {}
|
|
f["name"] = field['name']
|
|
f["value"] = field['value']
|
|
f["inline"] = field['inline']
|
|
embed["fields"].append(f)
|
|
|
|
data["embeds"].append(dict(embed))
|
|
|
|
empty = all(not d for d in data["embeds"])
|
|
|
|
if empty and 'content' not in data:
|
|
print('You cant post an empty payload.')
|
|
if empty: data['embeds'] = []
|
|
|
|
return json.dumps(data, indent=4)
|
|
|
|
|
|
|
|
|
|
def post(self):
|
|
"""
|
|
Send the JSON formated object to the specified `self.url`.
|
|
"""
|
|
|
|
headers = {'Content-Type': 'application/json'}
|
|
|
|
result = requests.post(self.url, data=self.json, headers=headers)
|
|
|
|
if result.status_code == 400:
|
|
print("Post Failed, Error 400")
|
|
else:
|
|
print("Payload delivered successfuly")
|
|
print("Code : "+str(result.status_code))
|
|
time.sleep(2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|