From 7c8f008dc5187214fd7c8c9b55937ae42b6e36ea Mon Sep 17 00:00:00 2001 From: David Trail Date: Sat, 11 May 2013 20:20:41 +0100 Subject: [PATCH] Improved code layout, support for editing but not deleting, lorem ipsum! And some subtle Github advertising ;) --- CHANGELOG.rst | 10 ++++++++++ shreddit | 46 +++++++++++++++++++++++----------------------- shreddit.cfg | 4 ++++ 3 files changed, 37 insertions(+), 23 deletions(-) create mode 100644 CHANGELOG.rst diff --git a/CHANGELOG.rst b/CHANGELOG.rst new file mode 100644 index 0000000..54a23cd --- /dev/null +++ b/CHANGELOG.rst @@ -0,0 +1,10 @@ +2.0 +-------- +Started doing a changelog! + +2.1 +-------- +If you have the "lorem ipsum" module then your text will be edited with +a randomly generated piece of text. This prevents Reddit from (for example) +not actually deleting things if they edit the comment to a static value +before deleting. diff --git a/shreddit b/shreddit index 46b572d..7823d17 100755 --- a/shreddit +++ b/shreddit @@ -1,14 +1,16 @@ #!/usr/bin/env python2 import praw +from praw.objects import Comment, Submission import ConfigParser import argparse from datetime import datetime, timedelta +from re import sub try: from loremipsum import get_sentence except: - get_sentence = '''I have been Shreddited for privacy!''' + get_sentence = lambda: '''I have been Shreddited for privacy!\nhttps://github.com/x89/Shreddit/''' parser = argparse.ArgumentParser() parser.add_argument('-c', '--config', help="config file to use instead of shreddit.cfg") @@ -27,12 +29,13 @@ sort = config.get('main', 'sort') verbose = config.getboolean('main', 'verbose') clear_vote = config.getboolean('main', 'clear_vote') trial_run = config.getboolean('main', 'trial_run') +edit_only = config.getboolean('main', 'edit_only') item = config.get('main', 'item') _user = config.get('main', 'username') _pass = config.get('main', 'password') -r = praw.Reddit(user_agent="Shreddit-PRAW 2.0") +r = praw.Reddit(user_agent="Shreddit-PRAW 2.1") if _user and _pass: r.login(_user, _pass) @@ -40,18 +43,16 @@ else: r.login() if verbose: - print "Logged in as %s" % r.user - -before_time = datetime.now() - timedelta(hours=hours) + print "Logged in as {0}".format(r.user) if verbose: - print "Deleting messages before %s" % before_time + print "Deleting messages before {0}.".format(datetime.now() - timedelta(hours=hours)) whitelist = [y.strip().lower() for y in whitelist.split(',')] whitelist_ids = [y.strip().lower() for y in whitelist_ids.split(',')] if verbose: - print "Keeping messages from subreddits %s" % ', '.join(whitelist) + print "Keeping messages from subreddits {0}".format(', '.join(whitelist)) things = [] if item == "comments": @@ -64,32 +65,31 @@ else: raise Exception("Your deletion section is wrong") for thing in things: - thing_time = datetime.fromtimestamp(thing.created) - - #print "%s, %s, %s" % (thing_time, before_time, thing_time < before_time) + thing_time = datetime.fromtimestamp(thing.created_utc) + before_time = datetime.utcnow() - timedelta(hours=hours) if thing.id in whitelist_ids: continue if thing_time > before_time: + print '#', thing_time, '----', before_time continue - + if str(thing.subreddit).lower() in whitelist: continue - if item == "submitted" or item == "overview": - if verbose: - print "Deleting: %s" % thing - thing.delete() - elif item == "comments": - if verbose: - print 'Deleting: [%s]: "%s"' % (thing.subreddit, thing.body[:20]) + if not trial_run: if clear_vote: thing.clear_vote() - if trial_run: - thing.edit(get_sentence) + if isinstance(thing, Submission): if verbose: - print "Edited comment with {0}".format(get_sentence) - thing.delete() + print u'Deleting submission: #{0} {1}'.format(thing.id, thing.url) + elif isinstance(thing, Comment): + replacement_text = get_sentence() if verbose: - print "Comment deleted." + print 'Editing and deleting /r/{3}/ #{0} with:\n\t"{1}" to\n\t"{2}"'.format( + thing.id, sub(r'[\t\r\n]', ' ', thing.body.encode('ascii', 'ignore')[:78]), + replacement_text[:78], thing.subreddit) + thing.edit(replacement_text) + if not edit_only: + thing.delete() diff --git a/shreddit.cfg b/shreddit.cfg index 3cd6601..407fa66 100644 --- a/shreddit.cfg +++ b/shreddit.cfg @@ -38,3 +38,7 @@ whitelist_ids = abcdef # If you set this then no editing or deleting will be done # but the output from the program will be shown as an example trial_run = True + +# Don't delete but *do* edit, could prove... interesting to see a comment +# with 5000 upvotes and it's just a lorem ipsum! +edit_only = True