cross-posted from: https://lemmy.world/post/647097

You’ll need to update the praw.Reddit() parameters and set booleans to True based on what you want to have cleared.

This also overwrites your comments with nonsense content seeing as Reddit doesn’t really delete your comments if nobody forces them

Sorry about the amateurish Python, this isn’t my go-to language

import praw

#Update all values set to XXXXXX and set boolean values to True for whatever you'd like to clear

reddit = praw.Reddit(
    client_id="XXXXXX",
    client_secret="XXXXXX",
    user_agent="script running locally", #required for PRAW but not sure content matters
    username="XXXXXX",
    password="XXXXXX"
)

#booleans
delete_posts = False
delete_comments = False
delete_saved = False
clear_votes = False
unsubscribe = False

def get_posts():
    return reddit.user.me().submissions.new(limit=100)

def get_comments():
    return reddit.user.me().comments.new(limit=100)

def get_subscriptions():
    return reddit.user.subreddits()

def get_saved_items():
    return reddit.user.me().saved(limit=100)

def get_upvoted():
    return reddit.user.me().upvoted(limit=100)

def get_downvoted():
    return reddit.user.me().downvoted(limit=100)

while(clear_votes):
    count = 0
    upvotes = get_upvoted()
    downvotes = get_downvoted()
    for vote in upvotes:
        try:
            vote.clear_vote()
            count += 1
            print('Clearing vote for: ', vote)
        except Exception as e:
            print('Could not clear vote due to: ', e, '(this is normal for archived posts)')
            continue
    for vote in downvotes:
        try:
            vote.clear_vote()
            count += 1
            print('Clearing vote for: ', vote)
        except Exception as e:
            print('Could not clear vote due to: ', e, '(this is normal for archived posts)')
            continue
    if(count == 0):
        clear_votes = False

while(delete_saved):
    count = 0
    saved_items = get_saved_items()
    for item in saved_items:
        item.unsave()
        count += 1
        print('Unsaved item ID: ', item)
    if(count == 0):
        delete_saved = False


while(delete_posts):
    count = 0
    posts = get_posts()
    for post in posts:
        print("Deleting submission: ", post)
        post.delete()
        count += 1
    if(count == 0): 
        delete_posts = False 


#Replace comments with nonsense data first as Reddit only "marks comments as" deleted
while(delete_comments):
    count = 0
    comments = reddit.user.me().comments.new(limit=1000)
    print("Replacing comments with nonsense data")
    for comment in comments:
       comment.edit('So long and thanks for all the fish')
    print("Deleting comments")
    for comment in comments:
        comment.delete()
        count+=1
    if (count == 0):
        delete_comments = False

while(unsubscribe):
    count = 0
    subscriptions = get_subscriptions()
    for subreddit in subscriptions:
        subreddit.unsubscribe()
        count += 1
        print('Unsubscribed from: ', subreddit.display_name)
    if (count == 0):
        unsubscribe = False

print('--finished--')
  • cyberpunk007@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    When does API access shut down? Also how do we know they won’t just flag and detect this and roll back the comments?