webamp/experiments/tweetBot/discord_hooks.py
2018-05-23 20:14:06 +01:00

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)