mirror of git://git.acid.vegas/tools.git
113 lines
4.9 KiB
Python
113 lines
4.9 KiB
Python
#!/usr/bin/env python
|
|
# hateserv irc bot - developed by acidvegas in python (https://git.acid.vegas/hateserv)
|
|
|
|
import http.client
|
|
import json
|
|
import re
|
|
import urllib.parse
|
|
|
|
from googleapiclient.discovery import build # https://pypi.org/project/google-api-python-client/
|
|
#import tweepy # https://pypi.org/project/tweepy/
|
|
|
|
# API Keys
|
|
google_api_key = 'redacted' # https://console.developers.google.com/
|
|
google_cse_id = 'redacted' # https://cse.google.com/
|
|
twitter_bearer_token = 'redacted'
|
|
twitter_access_token = 'redacted'
|
|
twitter_access_token_secret = 'redacted'
|
|
twitter_client_id = 'redacted'
|
|
twitter_client_secret = 'redacted'
|
|
twitter_api_key = 'redacted'
|
|
twitter_api_secret = 'redacted'
|
|
|
|
def between(source, start, stop):
|
|
data = re.compile(start + '(.*?)' + stop, re.IGNORECASE|re.MULTILINE).search(source)
|
|
return data.group(1) if data else False
|
|
|
|
def geturl(url, endpoint, headers={}):
|
|
conn = http.client.HTTPSConnection(url, timeout=15)
|
|
conn.request('GET', endpoint, headers=headers)
|
|
response = conn.getresponse().read()
|
|
conn.close()
|
|
return response
|
|
|
|
def google(query):
|
|
service = build('customsearch', 'v1', developerKey=google_api_key, cache_discovery=False).cse()
|
|
results = service.list(q=query, cx=google_cse_id, num=10).execute()
|
|
return results['items'] if results else False
|
|
|
|
def netsplit(option, query):
|
|
if option == 'channels':
|
|
data = str(geturl('netsplit.de', '/channels/?chat='+query))
|
|
for i in ('​','<b>','</b>','<span style="color:#000000;">','<strong>','</strong>','<span class="cs-no-topic">'):
|
|
data = data.replace(i, '')
|
|
results = re.findall('<div class="cs-result">(.*?)</div>', data, re.IGNORECASE|re.MULTILINE)
|
|
if results:
|
|
channels = list()
|
|
for item in results:
|
|
channel = between(item, '<span class="cs-channel">', '</span>')
|
|
network = between(item, '<span class="cs-network">', '</span>')
|
|
users = between(item, ' - ', ' users - ')
|
|
if '<span class="cs-details">current topic:' in item:
|
|
topic = between(item, '<span class="cs-details">current topic: </span>', '<br>').replace('</span>','')
|
|
else:
|
|
topic = 'no topic set for channel'
|
|
channels.append({'channel':channel, 'network':network, 'users':users, 'topic':topic})
|
|
return channels
|
|
else:
|
|
return False
|
|
elif option == 'networks':
|
|
data = str(geturl('netsplit.de', '/networks/'))
|
|
results = re.findall('<a class="competitor" href="/networks/(.*?)/" title=', data, re.IGNORECASE|re.MULTILINE)
|
|
return results if results else False
|
|
|
|
def reddit(option, subreddit, id=None):
|
|
if option == 'post':
|
|
data = json.loads(geturl('www.reddit.com', f'/r/{subreddit}/comments/{id}.json', headers={'Accept':'application/json','User-Agent':'HateServ/1.0'}))
|
|
return data[0]['data']['children'][0]['data'] if 'error' not in data else False
|
|
elif option == 'subreddit':
|
|
data = json.loads(geturl('www.reddit.com', f'/r/{subreddit}.json?limit=20', headers={'Accept':'application/json','User-Agent':'HateServ/1.0'}))
|
|
posts = [item['data'] for item in data['data']['children'] if not item['data']['stickied']]
|
|
return posts[:10] if posts else None
|
|
|
|
def github(option, query):
|
|
if option == 'search':
|
|
data = json.loads(geturl('api.github.com', '/search/repositories?q='+query, headers={'Accept':'application/vnd.github.v3+json','User-Agent':'HateServ/1.0'}))
|
|
return data['items'][:10] if data['items'] else False
|
|
elif option == 'repo':
|
|
return json.loads(geturl('api.github.com', '/repos/'+query, headers={'Accept':'application/vnd.github.v3+json','User-Agent':'HateServ/1.0'}))
|
|
elif option == 'user':
|
|
return json.loads(geturl('api.github.com', '/users/'+query, headers={'Accept':'application/vnd.github.v3+json','User-Agent':'HateServ/1.0'}))
|
|
|
|
def youtube(option, query, api_key):
|
|
if option == 'video':
|
|
api = httplib.get_json(f'https://www.googleapis.com/youtube/v3/videos?key={config.api.google_api_key}&part=snippet,statistics&id={id}')
|
|
if api['items']:
|
|
api = api['items'][0]
|
|
data = {}
|
|
data['channel'] = api['snippet']['channelTitle']
|
|
data['description'] = ' '.join(api['snippet']['description'].split())
|
|
data['dislikes'] = api['statistics']['dislikeCount']
|
|
data['likes'] = api['statistics']['likeCount']
|
|
data['title'] = api['snippet']['title']
|
|
data['views'] = api['statistics']['viewCount']
|
|
return data
|
|
else:
|
|
return False
|
|
elif option == 'search':
|
|
service = build('youtube', 'v3', developerKey=api_key).search()
|
|
results = service.list(part='id', type='video', q=query, maxResults=10).execute()
|
|
return results['items'] if results else False
|
|
|
|
def twitter(data):
|
|
# auth = tweepy.OAuthHandler(twitter_consumer_key, twitter_consumer_secret)
|
|
# auth.set_access_token(twitter_access_token, twitter_access_secret)
|
|
# api = tweepy.API(auth)
|
|
# api.update_status(data)
|
|
pass
|
|
|
|
def unreal():
|
|
pass
|
|
|
|
def anope():
|
|
pass |