Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import requests.auth
- import sys
- import time
- import os
- import random
- from pprint import pprint
- from firebase import firebase
- import datetime
- # variables #
- print('setting variables')
- id = id code
- secret = secret code
- userAgent = user agent
- user = user account name
- password = password
- waiting = 60
- url = subreddit url
- fb = firebase.FirebaseApplication('https://dbid.firebaseio.com/', None)
- headers = {'User-agent': userAgent}
- print('variables set')
- # functions #
- class Token:
- def __init__(self):
- self.files = []
- def __enter__(self):
- print('getting token')
- client_auth = requests.auth.HTTPBasicAuth(id, secret) # id and secret
- post_data = {'grant_type': 'password', 'username': user, 'password': password, 'scope': 'submit identity'} # post data to request access token
- headers = {'User-agent': userAgent} # user agent header
- r = requests.post('https://www.reddit.com/api/v1/access_token', auth=client_auth, data=post_data, headers=headers)
- msg = r.json()
- print('token received')
- self.accessToken = msg['access_token']
- return self
- def __exit__(self, exc_type, exc_value, traceback):
- print('revoking token')
- headers = {'User-agent': userAgent}
- post_data = {'token': self.accessToken, 'token_type_hint': 'access_token'}
- client_auth = requests.auth.HTTPBasicAuth(id, secret)
- r = requests.post('https://www.reddit.com/api/v1/revoke_token', auth=client_auth, data=post_data, headers=headers)
- print('token revoked')
- def reply(commentId, text):
- with Token() as token:
- headers = {'Authorization': 'bearer ' + token.accessToken, 'User-Agent': user}
- post_data = {'thing_id': 't1_' + commentId, 'api_type': 'json', 'text': text}
- r = requests.post('https://oauth.reddit.com/api/comment', headers=headers, data=post_data)
- class Events:
- def __init__(self, firebase):
- self.fb = firebase
- def getEvents(self):
- events = self.fb.get('/events', None)
- text = 'event|date\n:--|:--'
- for key in events:
- eventD, eventM, eventY = map(int, events[key]['date'].split('/'))
- eventDate = datetime.datetime(eventY, eventM, eventD)
- if eventDate < datetime.datetime.now():
- text += '\n~~' + key + '~~|~~' + events[key]['date']+'~~'
- else:
- text += '\n'+key+'|'+events[key]['date']
- return text
- def save(self, eventName, date):
- self.fb.put('/events', eventName, {'date': date})
- class Comment:
- def __init__(self, url):
- self.url = url + '?limit=1'
- def getNextComment(self):
- print('getting latest comment')
- headers = {'User-agent': userAgent}
- r = requests.get(self.url, headers=headers)
- rJson = r.json()
- data = rJson['data']['children']
- msg = data[0]
- comment = msg['data']['body']
- commentId = msg['data']['id']
- linkUrl = msg['data']['link_url']
- self.parseComment(comment)
- self.commentId = commentId
- self.linkUrl = linkUrl
- def parseComment(self, command):
- self.command = command
- if len(command) > 0:
- self.commandSplit = comment.split(' ')
- if len(commandSplit) >= 1:
- self.botCommand = commandSplit[0]
- if len(commandSplit) >= 2:
- self.botAction = commandSplit[1]
- def hasCommand():
- class Bot:
- def __init__(self, url, firebase):
- self.url = url
- self.events = Events(firebase)
- def loop():
- comment = Comment(self.url)
- # main loop #
- while 1:
- # main loop code #
- comment.getNextComment()
- if comment.botCommand == '!bot':
- print(comment)
- if comment.botAction == 'roll20':
- rng = random.randint(1,20)
- reply(comment.commentId, 'Rolling d20, the result is: ' +str(rng))
- print('commented to ' +comment.commentId)
- elif comment.botAction == 'create':
- if len(comment.commentSplit) == 4 and '/' in comment.commentSplit[3] :
- dateD, dateM, dateY = map(int, comment.commentSplit[3].split('/'))
- date = datetime.date(dateY, dateM, dateD)
- date = date.strftime('%d/%m/%Y')
- print(date)
- event.save(comment.commentSplit[2], comment.commentSplit[3])
- print('created new event: ' + comment.commentSplit[2])
- else:
- print('wrong comment format')
- elif comment.botAction == 'list':
- text = getEvents()
- reply(comment.commentId, text)
- else:
- print('no comment the bot can use.')
- print('trying again in ' + str(waiting) + 'seconds')
- sys.stdout.flush()
- time.sleep(waiting)
- Bot(url, fb).loop()
Add Comment
Please, Sign In to add comment