Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- import requests
- import pickle
- import praw
- from time import sleep
- # http://praw.readthedocs.io/en/latest/getting_started/authentication.html
- reddit = praw.Reddit(client_id='your app client id',
- client_secret='your app client secret',
- username='your bot reddit username',
- password='your bot reddit password',
- user_agent='python3:KeyWordNotify:v1 (/u/Arkaon)')
- webhook_url = 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
- # this is the account that will receive the messages
- you = reddit.redditor('your reddit username')
- # scan comments in this subreddit
- subreddit = reddit.subreddit('your subreddit name')
- keywords = ['keyword1', 'keyword2', 'keyword3'] # case insensitive
- ignore_users = ['baduser1', 'baduser2', 'baduser3'] # case SENSITIVE
- # a list of submission ids that you have already been notified for
- already_alerted_submissions = []
- comment_stream = subreddit.stream.comments()
- # a list of submission ids that you have already been notified for
- already_alerted_submissions = []
- comment_stream = subreddit.stream.comments()
- def get_list_from_pickle(filename):
- try:
- with open(filename, 'rb') as fp:
- return pickle.load(fp)
- except:
- with open(filename, 'wb') as fp:
- pickle.dump([], fp)
- return []
- def main():
- alerted_comments = get_list_from_pickle('alerted_comments.pickle')
- try:
- for comment in comment_stream:
- if comment.id in alerted_comments:
- continue
- if comment.author: # if comment author hasn't deleted
- if comment.author.name in ignore_users:
- continue
- for kw in keywords:
- if kw.lower() in comment.body.lower(): # case insensitive check
- alerted_comments.append(comment.id)
- while len(alerted_comments) > 100:
- del alerted_comments[0]
- with open('alerted_comments.pickle', 'wb') as fp:
- pickle.dump(alerted_comments, fp)
- for kw in keywords:
- if kw.lower() in comment.body.lower(): # case insensitive check
- already_alerted_submissions.append(comment.submission.id)
- msg = '[Keyword *{0}* detected](http://www.reddit.com{1})'.format(
- kw, comment.permalink)
- slack_data = {'text': msg, 'mrkdwn': True}
- response = requests.post('https://hooks.slack.com/services/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',
- data=json.dumps(slack_data), headers={'Content-Type': 'application/json'})
- if response.status_code != 200:
- raise ValueError('Request to slack returned an error %s, the response is:\n%s' % (
- response.status_code, response.text))
- except Exception as e:
- print('There was an error: ' + str(e))
- sleep(60) # wait for 60 seconds before restarting
- main()
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment