PRAW, an acronym for "Python Reddit API Wrapper", is a python package that allows for simple access to Reddit's API.

Overview

PRAW: The Python Reddit API Wrapper

Latest PRAW Version Supported Python Versions PyPI - Downloads - Monthly Coveralls Coverage Github Actions Coverage Contributor Covenant

PRAW, an acronym for "Python Reddit API Wrapper", is a Python package that allows for simple access to Reddit's API. PRAW aims to be easy to use and internally follows all of Reddit's API rules. With PRAW there's no need to introduce sleep calls in your code. Give your client an appropriate user agent and you're set.

Installation

PRAW is supported on Python 3.6+. The recommended way to install PRAW is via pip.

pip install praw

To install the latest development version of PRAW run the following instead:

pip install --upgrade https://github.com/praw-dev/praw/archive/master.zip

For instructions on installing Python and pip see "The Hitchhiker's Guide to Python" Installation Guides.

Quickstart

Assuming you already have a credentials for a script-type OAuth application you can instantiate an instance of PRAW like so:

import praw
reddit = praw.Reddit(client_id="CLIENT_ID", client_secret="CLIENT_SECRET",
                     password="PASSWORD", user_agent="USERAGENT",
                     username="USERNAME")

With the reddit instance you can then interact with Reddit:

# Create a submission to r/test
reddit.subreddit("test").submit("Test Submission", url="https://reddit.com")

# Comment on a known submission
submission = reddit.submission(url="https://www.reddit.com/comments/5e1az9")
submission.reply("Super rad!")

# Reply to the first comment of a weekly top thread of a moderated community
submission = next(reddit.subreddit("mod").top("week"))
submission.comments[0].reply("An automated reply")

# Output score for the first 256 items on the frontpage
for submission in reddit.front.hot(limit=256):
    print(submission.score)

# Obtain the moderator listing for r/redditdev
for moderator in reddit.subreddit("redditdev").moderator():
    print(moderator)

Please see PRAW's documentation for more examples of what you can do with PRAW.

Discord Bots and Asynchronous Environments

If you plan on using PRAW in an asynchronous environment, (e.g., discord.py, asyncio) it is strongly recommended to use Async PRAW. It is the official asynchronous version of PRAW and its usage is similar and has the same features as PRAW.

PRAW Discussion and Support

For those new to Python, or would otherwise consider themselves a Python beginner, please consider asking questions on the r/learnpython subreddit. There are wonderful people there who can help with general Python and simple PRAW related questions.

Otherwise, there are a few official places to ask questions about PRAW:

r/redditdev is the best place on Reddit to ask PRAW related questions. This subreddit is for all Reddit API related discussion so please tag submissions with [PRAW]. Please perform a search on the subreddit first to see if anyone has similar questions.

Real-time chat can be conducted via the PRAW Slack Organization (please create an issue if that invite link has expired).

Please do not directly message any of the contributors via Reddit, email, or Slack unless they have indicated otherwise. We strongly encourage everyone to help others with their questions.

Please file bugs and feature requests as issues on GitHub after first searching to ensure a similar issue was not already filed. If such an issue already exists please give it a thumbs up reaction. Comments to issues containing additional information are certainly welcome.

Note

This project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Documentation

PRAW's documentation is located at https://praw.readthedocs.io/.

History

August 2010: Timothy Mellor created a github project called reddit_api.

March 2011: The Python package reddit was registered and uploaded to pypi.

December 2011: Bryce Boe took over as maintainer of the reddit package.

June 2012: Bryce renamed the project PRAW and the repository was relocated to the newly created praw-dev organization on GitHub.

February 2016: Bryce began work on PRAW4, a complete rewrite of PRAW.

License

PRAW's source (v4.0.0+) is provided under the Simplified BSD License.

  • Copyright ©, 2016, Bryce Boe

Earlier versions of PRAW were released under GPLv3.

Comments
  • Insufficient support for Multireddits

    Insufficient support for Multireddits

    I've done several searches throughout the repo, and as far as I can tell there aren't any resources for handling Multireddits. I'd love to help develop this if a project manager can get some groundwork started. Any plans? (Is there a to-do file somewhere?)

    Multireddit API

    Feature 
    opened by voussoir 36
  • Moderation streams

    Moderation streams

    Feature Summary and Justification

    This feature provides the ablilty to stream from subreddit.mod methods. Added Moderator stream for the following:

    • edited
    • mod log
    • modqueue
    • reports
    • spam
    • unmoderated
    • unread
    • modmail_conversations
    Feature 
    opened by LilSpazJoekp 35
  • Comment stream dropping comments?

    Comment stream dropping comments?

    Issue Description

    A simple consumer like the below seems to not be processing all comments.

    I observed a drop in total comment throughput with the praw stream sometime around december 2018 and it has never really recovered.

    I have tested by manually making a number of comments and observing that some of them don't get captured by the praw stream.

    IO on the client side is not a limiting factor.

    for comment in reddit.subreddit('all').stream.comments():
       do_something(comment)
    

    System Information

    • PRAW Version: 6.0.0
    • Python Version: 3.7
    • Operating System:
    Bug Documentation Verified Stale Auto-closed - Stale 
    opened by bicubic 33
  • Updating Collection Display Layout

    Updating Collection Display Layout

    Fixes # (provide issue number if applicable)

    Feature Summary and Justification

    Currently, there is no PRAW function to modify a collection's display layout to either:

    • TIMELINE: Best for event or discussion collections
    • GALLERY: Best for image-heavy or meme collections

    This feature allows the user to do just that.

    This pull request provides ... A solution to this problem.

    References

    Other

    • An additional PRAW function will need to be made that sets a display layout type when creating a new collection.
    • Sorry about the duplicate commit message. The second one should have said "Forgot to include unit test".
    opened by jsk56143 28
  • Create a new flair model

    Create a new flair model

    As of right now, flairs are returned as dicts. I was thinking of making them into Flair objects.

    Several questions:

    • How do I make the Reddit instance objectify the dict into this flair object?
    • Should I throw a ClientException when a user tries to edit a flair that it cannot, or just pass.
    • Should the flair() method accept a flair object (current), or both a flair object or an id/text combo?
    Feature 
    opened by PythonCoderAS 28
  • Suggesting a new logo for PRAW

    Suggesting a new logo for PRAW

    Feature Summary and Justification

    PRAW's current logo seemed a bit un-indicative of the package's purpose, I felt. (It would be at home if it were for a LEGO API, though). I feel that the image that should represent PRAW should also represent what it is - Python and Reddit.

    I put together a new logo as a suggestion, one that combines the double-snakes of Python with the antenna of Reddit's Snoo. The background color is #FF4500, better known as "orangered" to long-time Redditors. The font is DIN 1451, chosen to avoid overt resemblance to the Reddit wordmark and font to avoid confusion about officiality.

    I sized this to be the same size as GitHub's social media preview so it can be used for this repository as well. Humbly submitting it for consideration!

    opened by kungming2 28
  • Fixed a bug in RateLimitExceeded with incorrect key to response dict

    Fixed a bug in RateLimitExceeded with incorrect key to response dict

    RateLimitExceeded.init was setting sleep_time to response['ratelimit'] which was throwing a KeyError exception every time I hit it. Swtiched to 'delay' which seemed to fix the functionality.

    If this isn't correct, ignore this, but it fixed my problem and I thought I'd share it.

    If this isn't the correct branch to send the pull request to but the fix should still be pulled, please let me know.

    Bug 
    opened by north1 27
  • Add helper for downloading all submissions in a subreddit between two timestamps (Implements: #337)

    Add helper for downloading all submissions in a subreddit between two timestamps (Implements: #337)

    Hi, I've used this trick quite a lot, so I took some time and implemented a helper for praw. I hope you'll find it useful!

    1. Reddit seems to use created attribute for "timestamp" queries. created seems to be a sort of broken timestamp. I think this is very confusing, and I always forget to convert time.time() output to "reddit timestamp". That's why I chose to make highest_timestamp and lowest_timestamp to be normal unix timestamp(even though it is inconsistent with r.search)

    2. I am not a native speaker, so sorry in advance for possible grammatical errors in the docstring.

    3. The basic algorithm is fairly simple, it just slides a dynamic length window over reddit timestamps and tries to keep 30..99 results within the window. Whenever this condition breaks, it increases or decreases the window length by a factor of 2x. I never really bothered to optimize these parameters, they are good enough for me. Maybe it is a good idea to expose them as function parameters.

    4. Naming! TBH, I am not sure if all_submissions is a good name.

    Any feedback is appereciated!

    opened by eleweek 26
  • AssertionError: comment.parent_id in self._submission._comments_by_id

    AssertionError: comment.parent_id in self._submission._comments_by_id

    Describe the bug When loading all the comments for post 41ntws (and a handful of others), I get this assertion error. I have not had this problem on tons of other posts, just a few. In case it's helpful, here is the complete list of posts I get this error on:

    50slvn
    4wvz6z
    4fmyzj
    41ntws
    41dkav
    3gljgr
    a8ekca
    fz5363
    

    They're all AskReddit posts with pretty high comment counts, but I've downloaded posts with even more comments regularly before with no issue.

    I found that it seems to be breaking when it gets to comment cz3wnj7. Interestingly, going to the parent of that comment gives a weird "there doesn't seem to be anything here" page instead of showing a deleted comment like normal. That probably has something to do with it.

    To Reproduce Steps to reproduce the behavior:

    1. Fetch the post with ID 41ntws
    2. Do comments.replace_more(limit=None)
    3. Wait

    Expected behavior All comments get loaded

    Code/Logs Here is my exact repro code:

    import praw
    import json
    
    credentials = json.load(open("D:/~No Sync/reddit auth.json"))
    reddit = praw.Reddit(client_id=credentials['client_id'], client_secret=credentials['client_secret'], user_agent=credentials['user_agent'], username=credentials['username'], password=credentials['password'])
    post = reddit.submission(url="https://reddit.com/comments/41ntws")
    post.comments.replace_more(limit=None)
    

    Here is my stacktrace:

    Traceback (most recent call last):
      File "D:\Documents\Website Archive\code\test.py", line 7, in <module>
        post.comments.replace_more(limit=None)
      File "C:\Program Files (x86)\Python38-32\lib\site-packages\praw\models\comment_forest.py", line 194, in replace_more
        self._insert_comment(comment)
      File "C:\Program Files (x86)\Python38-32\lib\site-packages\praw\models\comment_forest.py", line 82, in _insert_comment
        assert comment.parent_id in self._submission._comments_by_id, (
    AssertionError: PRAW Error occured. Please file a bug report and include the code that caused the error.
    

    System Info

    • OS: Windows 10
    • Python: 3.8.2
    • PRAW Version: 7.0.0
    Bug 
    opened by tryashtar 25
  • Addition of the ability to set/unset submission as original content

    Addition of the ability to set/unset submission as original content

    Feature Summary and Justification

    Added two methods to the SubmissionModeration class called set_original_content() and unset_original_content(). These methods allows a moderator to set a post as "Original Content (OC)", a tag that is similar to the existing NSFW and Spoiler tags. Note that moderators can mark a post as "OC" on both Old and New Reddit; but submitters have to use New Reddit in order to mark their own posts as such. The feature itself has to be enabled in a subreddit's settings first.

    Though the admin announcement says the tag is only for New Reddit, the feature was backported to Old Reddit and is viewable on the old site as well.

    This endpoint is not officially on the main API page, and the admin response of a year ago was to consider adding it to the API, but that was never done officially. Therefore there is a chance that this endpoint will be deprecated without warning in the future but it currently works and the feature has been fully operational on both desktop versions of Reddit for over a year and a half. The feature does not yet appear on the mobile app.

    A submission with this tag will have another attribute is_original_content set to True. If that submission's OC tag is subsequently removed, its attribute is_original_content will become set to False. Generic submissions may not have is_original_content as an attribute.

    Please note that unlike the NSFW tags, this has not been integrated by Reddit into search. Therefore, while nsfw:true works, oc:true will not return any results from a search query.

    I have also tested this endpoint several times with my bot u/AssistantBOT.

    Timeline

    References

    opened by kungming2 25
  • Add support for users with long passwords and 2FA enabled

    Add support for users with long passwords and 2FA enabled

    Describe the solution you'd like Reddit's suggested solution of passing the 2FA token to /api/v1/access_token as part of the value of the password parameter, i.e 'password' = password+':'+token, doesn't work for users with long passwords because of what appears to be a bug on their end. This isn't a big deal, because instead of using Reddit's suggested method, it also turns out that you can pass the 2FA token to /api/v1/access_token in a separate otp parameter—see below. PRAW or prawcore could be tweaked to handle 2FA tokens if users input their original otp secret at initialization,

    Describe alternatives you've considered Update documentation to inform users with long passwords and 2FA enabled that they're SOL.

    Additional context Someone on /r/redditdev claimed that you couldn't use a password flow with 2FA if the password was >= 72 characters long, and it's true. Setting the password to password:token fails for large passwords, with or without PRAW. Reddit passwords can be up to 500kb long, but bcrypt only cares about the first 72 characters, so I would guess that Reddit has a bug somewhere in their password validation process.

    I used the network inspector while logging into new Reddit, and noticed that the password form had a field for the 2FA token named 'otp'. On a whim, I added 'otp':'xxxxxx' to the POST data of the usual non-PRAW oauth login with Python:

    import pyotp
    import requests
    
    otp_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    otp_token = pyotp.TOTP(otp_secret).now()
    client_auth = requests.auth.HTTPBasicAuth('client_id','client_secret')
    post_data = {
    	"grant_type": "password",
    	"username": username,
    	"password": password,
    	"otp": otp_token
    }
    headers = {"User-Agent": "xxxxxxxxxxxxxxxxxxxxxxxx"}
    response = requests.post(
    	"https://www.reddit.com/api/v1/access_token",
    	auth=client_auth,
    	data=post_data,
    	headers=headers
    )
    

    ...and it worked. response.json() returns the usual set of

    {'access_token': 'xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxx', 'token_type': 'bearer', 'expires_in': 3600, 'scope': '*'}.

    So sure enough, 'otp' is a valid parameter for /api/v1/access_token when using a password with 2FA. If a user passed in the otp_secret at initialization, when it comes time to fetch or refresh bearer tokens, PRAW could then just calculate the 2FA token with pyotp.TOTP(otp_secret).now() (or with an equivalent function) and add that to the rest of the data in the request.

    Feature Stale Auto-closed - Stale 
    opened by MaybeNetwork 24
  • documentation incorrect: muted() → praw.models.reddit.subreddit.SubredditRelationship

    documentation incorrect: muted() → praw.models.reddit.subreddit.SubredditRelationship

    Describe the Bug

    Errors when example code is executed.

    Docs here: https://praw.readthedocs.io/en/stable/code_overview/other/subredditrelationship.html#praw.models.reddit.subreddit.SubredditRelationship

    Desired Result

    Change the docs?

    Relevant Logs

    c:\python39\lib\site-packages\praw\models\reddit\base.py in __getattr__(self, attribute)
         33         if not attribute.startswith("_") and not self._fetched:
         34             self._fetch()
    ---> 35             return getattr(self, attribute)
         36         raise AttributeError(
         37             f"{self.__class__.__name__!r} object has no attribute {attribute!r}"
    
    c:\python39\lib\site-packages\praw\models\reddit\base.py in __getattr__(self, attribute)
         34             self._fetch()
         35             return getattr(self, attribute)
    ---> 36         raise AttributeError(
         37             f"{self.__class__.__name__!r} object has no attribute {attribute!r}"
         38         )
    
    AttributeError: 'Redditor' object has no attribute 'note'
    

    Code to reproduce the bug

    for mute in reddit.subreddit("test").muted():
        print(f"{mute}: {mute.note}")
    

    My code example does not include the Reddit() initialization to prevent credential leakage.

    Yes

    This code has previously worked as intended.

    Yes

    Operating System/Environment

    windoze

    Python Version

    python 3.9.1

    PRAW Version

    7.4.0

    Prawcore Version

    2.3.0

    Anything else?

    Docs here: https://praw.readthedocs.io/en/stable/code_overview/other/subredditrelationship.html#praw.models.reddit.subreddit.SubredditRelationship

    opened by computerologist 4
  • reddit.subreddit.mod.removal_reasons isn't indexed in display order

    reddit.subreddit.mod.removal_reasons isn't indexed in display order

    Describe the Bug

    reddit.subreddit.mod.removal_reasons isn't indexed in display order

    Desired Result

    reddit.subreddit.mod.removal_reasons should be indexed in display order

    Relevant Logs

    No response

    Code to reproduce the bug

    No response

    My code example does not include the Reddit() initialization to prevent credential leakage.

    Yes

    This code has previously worked as intended.

    Yes

    Operating System/Environment

    windows

    Python Version

    python 3.9.1

    PRAW Version

    7.4.0

    Prawcore Version

    2.3.0

    Anything else?

    No response

    opened by computerologist 2
  • submission.edit doesn't preserve photos when I edit a submission with submission.selftext.

    submission.edit doesn't preserve photos when I edit a submission with submission.selftext.

    Describe the Bug

    When I do so, it posts a link to the media instead of embedding the media like it's supposed to. This is the first time trying to edit posts at with PRAW. @LilSpazJoekp said on Reddit I should submit this.

    Desired Result

    Right now I'm trying to get submission.edit() to preserve photos and videos, and once I do I want to be able to add in new photos and or videos when editing posts.

    Relevant Logs

    No response

    Code to reproduce the bug

    import praw
    
    reddit = praw.Reddit("DEFAULT", user_agent="macos:praw:1.0.0 (by /u)") 
    submission = reddit.submission(url="https://www.reddit.com/r/KamenRider/comments/xjw2k2/kamen_rider_geats_episode_other_content_ratings/")
    submission.edit(body=submission.selftext)
    

    My code example does not include the Reddit() initialization to prevent credential leakage.

    Yes

    This code has previously worked as intended.

    No

    Operating System/Environment

    macOS Ventura 13.0

    Python Version

    3.9.13

    PRAW Version

    7.6.1

    Prawcore Version

    2.3.0

    Anything else?

    No response

    opened by Oneechan69 10
  • rules.mod.reorder no longer working

    rules.mod.reorder no longer working

    Describe the Bug

    Attempting to reorder the rules of a subreddit tracebacks because the response is returning None.

    Desired Result

    It looks as though this line should return an iterative function: response = self.subreddit_rules._reddit.post(API_PATH["reorder_subreddit_rules"], data=data)I've tried commenting out the lines that traceback to just see what response is, and response=None

    Relevant Logs

    File "C:\python332\lib\site-packages\praw\models\reddit\rules.py", line 448, in reorder
        for rule in response:
    TypeError: 'NoneType' object is not iterable
    >>>
    

    Code to reproduce the bug

    subreddit = reddit.subreddit("test")
    rules = list(subreddit.rules)
    # reorder them in any means you like, my preferred is:
    new = [rules[1], rules[0], rules[2]]
    subreddit.rules.mod.reorder(new)
    

    My code example does not include the Reddit() initialization to prevent credential leakage.

    Yes

    This code has previously worked as intended.

    No

    Operating System/Environment

    windows

    Python Version

    3.8

    PRAW Version

    7.6.0

    Prawcore Version

    2.3.0

    Anything else?

    No response

    Reddit API Change 
    opened by NathanTech7713 8
  • Add support for bytes formatted images to submit_image and submit_gallery

    Add support for bytes formatted images to submit_image and submit_gallery

    Feature Summary and Justification

    This feature enables a user to upload an image or images each represented as a Bytes Object to Reddit through the submit_image and submit_gallery functions.

    For context, my own use-case involves backblaze.com, particularly this function of their API. To summarize, a successful request to the backblaze API returns images as bytes objects. After looking into PRAW documentation I discovered that I could only submit an image through it by first downloading and saving the file before providing each of the modified functions the filepath(s) of any images I wanted to submit. Given my use case, this would mean I would need my machine to download, save, upload, and then delete any number of images on my system each time I made use of those functions.

    These changes mean an object can be pulled in from a foreign API and passed directly to PRAW for uploading. It skips the awkward saving and deleting steps which should save processing time when scaled.


    The "image_path" input parameter for both functions has been changed to "image". It still accepts image paths--it's only the name of the input parameter that has changed so as to more clearly indicate that Bytes Objects now work too. In the case of submit_gallery, the input can be mixed. So there could be any number of image paths and Bytes Objects submitted to the same gallery.

    References

    Feature Discussion 
    opened by redowul 32
Releases(v7.6.1)
  • v7.6.1(Nov 11, 2022)

    7.6.1 (2022/11/11)

    Changed

    • Revert :meth:~.Comment.edit positional argument deprecation.
    • Revert :meth:~.Comment.reply positional argument deprecation.
    • Revert :meth:~.Message.reply positional argument deprecation.
    • Revert :meth:~.Submission.edit positional argument deprecation.
    • Revert :meth:~.Submission.reply positional argument deprecation.

    Fixed

    • An issue where :class:.ModmailConversation's messages attribute would only contain the latest message.
    Source code(tar.gz)
    Source code(zip)
  • v7.6.0(May 10, 2022)

    7.6.0 (2022/05/10)

    Added

    • :meth:.pin to manage pinned submissions on the authenticated user's profile.
    • :meth:.update_display_layout to update the display layout of posts in a :class:.Collection.
    • :meth:.SubredditCollectionsModeration.create keyword argument display_layout for specifying a display layout when creating a :class:.Collection.
    • :attr:~.Message.parent to get the parent of a :class:.Message.
    • :class:.ModNote to represent a moderator note.
    • :meth:.ModNote.delete to delete a single moderator note.
    • :class:.RedditModNotes to interact with moderator notes from a :class:.Reddit instance. This provides the ability to create and fetch notes for one or more redditors from one or more subreddits.
    • :class:.RedditorModNotes to interact with moderator notes from a :class:.Redditor instance.
    • :meth:.RedditorModNotes.subreddits to obtain moderator notes from multiple subreddits for a single redditor.
    • :class:.SubredditModNotes to interact with moderator notes from a :class:.Subreddit instance.
    • :meth:.SubredditModNotes.redditors to obtain moderator notes for multiple redditors from a single subreddit.
    • :meth:~.BaseModNotes.create to create a moderator note.
    • :attr:.Redditor.notes to interact with :class:.RedditorModNotes.
    • :attr:.SubredditModeration.notes to interact with :class:.SubredditModNotes.
    • :meth:~.ModNoteMixin.create_note create a moderator note from a :class:.Comment or :class:.Submission.
    • :meth:~.ModNoteMixin.author_notes to view the moderator notes for the author of a :class:.Comment or :class:.Submission.

    Changed

    • Drop support for Python 3.6, which is end-of-life on 2021-12-23.
    • :meth:.conversations now returns a :class:.ListingGenerator allowing you to page through more than 100 conversations.

    Deprecated

    • The after argument for :meth:.conversations will now have to be included in the params keyword argument.
    • Positional keyword arguments for applicable functions and methods. Starting with PRAW 8, most functions and methods will no longer support positional arguments. It will encourage more explicit argument passing, enable arguments to be sorted alphabetically, and prevent breaking changes when adding new arguments to existing methods.
    Source code(tar.gz)
    Source code(zip)
  • v7.5.0(Nov 14, 2021)

    7.5.0 (2021/11/13)

    Added

    • Log a warning if a submission's comment_sort attribute is updated after the submission has already been fetched and a warn_comment_sort config setting to turn off the warning.
    • :meth:.user_selectable to get available subreddit link flairs.
    • Automatic RateLimit handling will support errors with millisecond resolution.

    Fixed

    • An import error when using PRAW in environments where libsqlite3-dev is needed to utilize the sqlite3 builtin.
    • Fixed bug where some keyword arguments that are passed to :meth:.Draft.submit would not have an effect.
    Source code(tar.gz)
    Source code(zip)
  • v7.4.0(Jul 30, 2021)

    7.4.0 (2021/07/30)

    Added

    • :meth:~.WikiPage.discussions to obtain site-wide link submissions that link to the WikiPage.
    • :meth:.revert to revert a WikiPage to a specified revision.
    • :meth:.Inbox.mark_all_read to mark all messages as read with one API call.
    • :meth:~.InboxableMixin.unblock_subreddit to unblock a subreddit.
    • :meth:.update_crowd_control_level to update the crowd control level of a post.
    • :meth:.moderator_subreddits, which returns information about the subreddits that the authenticated user moderates, has been restored.
    • The configuration setting refresh_token has been added back. See https://www.reddit.com/r/redditdev/comments/olk5e6/followup_oauth2_api_changes_regarding_refresh/ for more info.

    Deprecated

    • :class:.Reddit keyword argument token_manager.
    Source code(tar.gz)
    Source code(zip)
  • v7.3.0(Jun 17, 2021)

    7.3.0 (2021/06/17)

    Added

    • :class:.UserSubreddit for the subreddit attribute of :class:.Redditor.
    • :meth:.Reddit.username_available checks if a username is available.
    • :meth:.trusted to retrieve a :class:.RedditorList of trusted users.
    • :meth:.trust to add a user to the trusted list.
    • :meth:.distrust to remove a user from the trusted list.
    • :class:.SQLiteTokenManager (may not work on Windows)

    Changed

    • :meth:.Redditor.moderated will now objectify all data returned from the API.
    • The wiki_edit endpoint has been changed from r/{subreddit}/api/wiki/edit/ to r/{subreddit}/api/wiki/edit.
    • :meth:.Redditor.block no longer needs to retrieve a user's fullname.

    Deprecated

    • The subreddit attribute of :class:.Redditor is no longer a dict.
    • Legacy modmail is slated for deprecation by Reddit in June 2021. See https://www.reddit.com/r/modnews/comments/mar9ha/even_more_modmail_improvements/ for more info.

    Fixed

    • Fixed bug where :meth:.WikiPage.edit and :meth:.SubredditWiki.create would fail if passed content and reason parameters that produced a request with a body greater than 500 KiB, even when the parameters did not exceed their respective permitted maximum lengths.
    • Fixed bug where :meth:.Reddit.request could not handle instances of BadRequest\s when the JSON data contained only the keys "reason" and "message".
    • Fixed bug where :meth:.Reddit.request could not handle instances of BadRequest\s when the response did not contain valid JSON data.
    • Fixed bug where :meth:.FullnameMixin.fullname sometimes returned the wrong fullname.
    Source code(tar.gz)
    Source code(zip)
  • v7.2.0(Feb 24, 2021)

    7.2.0 (2021/02/24)

    Added

    • :class:.Reddit keyword argument token_manager.
    • :class:.FileTokenManager and its parent abstract class :class:.BaseTokenManager.

    Deprecated

    • The configuration setting refresh_token is deprecated and its use will result in a :py:class:DeprecationWarning. This deprecation applies in all ways of setting configuration values, i.e., via praw.ini, as a keyword argument when initializing an instance of :class:.Reddit, and via the PRAW_REFRESH_TOKEN environment variable. To be prepared for PRAW 8, use the new :class:.Reddit keyword argument token_manager. See :ref:refresh_token in PRAW's documentation for an example.
    • :meth:.me will no longer return None when called in :attr:.read_only mode starting in PRAW 8. A :py:class:DeprecationWarning will be issued. To switch forward to the PRAW 8 behavior set praw8_raise_exception_on_me=True in your :class:.Reddit call.
    Source code(tar.gz)
    Source code(zip)
Owner
Python Reddit API Wrapper Development
Python Reddit API Wrapper Development
A Telegram bot that add a dynamic caption to musics

Music Channel Manager A Telegram bot that add a dynamic caption to musics Deploy to Heroku What is it ? It manage your music channel. With just adding

13 Oct 18, 2022
A Discord Server Cloner Which Can Clone Any Discord Server In Just Few Minutes

A Discord Server Cloner Which Can Clone Any Discord Server In Just Few Minutes.

samet 4 Jul 23, 2022
Name says it all/Instructions are in README file.

Discord-Webhook-Spammer Name says it all/Instructions are in README file. Setup 1. pip install discord-webhook ( In console, terminal or whatever you

Catto 1 Mar 21, 2022
eBay Scraper Homework 3 With Python

eBay Scraper Homework 3 Description of Code My ebay-dl.py file is programmed with python to download 6 key pieces of information - name, if there are

1 Nov 10, 2021
Tracker to check the covid shot slot availability in India and send mobile alerts via Twilio Messaging Service.

Cowin-Slot-Tracker Tracker to check the covid vaccine slot availability in India and send mobile notifications through Twilio Messaging Service. Requi

invalid username 27 Nov 12, 2022
A multi exploit instagram exploitation framework

Instagram Exploitation Framework About IEF Is an open source Instagram Exploitation Framework with various Exploits that could be used to mod your pro

Instagram Exploitation Framework - BirdSecurity 1 May 23, 2022
A discord program that will send a message to nearly every user in a discord server

Discord Mass DM Scrapes users from a discord server to promote/mass dm Report Bug · Request Feature Features Asynchronous Easy to use Free Auto scrape

dropout 56 Jan 02, 2023
Discord RPC for Notion written in Python

Discord RPC for Notion This is a program that allows you to add your Notion workspace activities to your Discord profile. This project is currently un

Thuliumitation 1 Feb 10, 2022
Pythonic and easy iCalendar library (rfc5545)

ics.py 0.8.0-dev : iCalendar for Humans Original repository (GitHub) - Bugtracker and issues (GitHub) - PyPi package (ics) - Documentation (Read The D

ics.py 513 Jan 02, 2023
A in-development chatbot.

BackBot A in-development chatbot. How the chatbot works This is a simple chatbot that relies on the user input. It already has a (small) set of genera

1 Dec 03, 2021
Herramienta para transferir eventos de Sucuri WAF hacia Azure Data Tables.

Transfiere eventos de Sucuri hacia Azure Data Tables Script para transferir eventos del Sucuri Web Application Firewall (WAF) hacia Azure Data Tables,

CSIRT-RD 1 Dec 22, 2021
Semplice pagina di informazione per sapere se e quando è uscito Joypad, il podcast a tema videoludico di Matteo Bordone (Corri!), Francesco Fossetti (Salta!) e Alessandro Zampini (Spara! per finta).

È uscito Joypad? Semplice pagina di informazione per sapere se e quando è uscito Joypad, il podcast a tema videoludico di Matteo Bordone (Corri!), Fra

Paolo Donadeo 32 Jan 02, 2023
⚡ Yuriko Robot ⚡ - A Powerful, Smart And Simple Group Manager Written with AioGram , Pyrogram and Telethon

⚡ Yuriko Robot ⚡ - A Powerful, Smart And Simple Group Manager Written with AioGram , Pyrogram and Telethon

Øғғɪᴄɪᴀʟ Ⱡᴏɢ [₳ғᴋ] 1 Apr 01, 2022
This is a straightforward python implementation to specifically grab basic infos about IPO companies in China from Sina Stock website.

SinaStockBasicInfoCollect This is a straightforward python implementation to specifically grab basic infos about IPO companies in China from Sina Stoc

CrosSea 1 Dec 09, 2021
An API that allows you to get full information about TikTok videos

TikTok-API An API that allows you to get full information about TikTok videos without using any third party sources and only the TikTok API. ##API onl

FC 13 Dec 20, 2021
M3U Playlist for free TV channels

Free TV This is an M3U playlist for free TV channels around the World. Either free locally (over the air): Or free on the Internet: Plex TV Pluto TV P

Free TV 964 Jan 08, 2023
aws-lambda-scheduler lets you call any existing AWS Lambda Function you have in a future time.

aws-lambda-scheduler aws-lambda-scheduler lets you call any existing AWS Lambda Function you have in the future. This functionality is achieved by dyn

Oğuzhan Yılmaz 57 Dec 17, 2022
Change your discord avatar every x h/d based on a list of images

Discord-Avatar-Autochange Introduction A simple script that automatically keeps changing your discord avatar after a given amount of time based on the

Armin Amiri 5 Apr 30, 2022
Asyncio SDK for Azure Cosmos DB

Asyncio SDK for Azure Cosmos DB. This library is intended to be a very thin asyncio wrapper around the Azure Comsos DB Rest API. It is not intended to have feature parity with the Microsoft Azure SDK

Grant McDonald 4 Dec 04, 2021
Telegram bot to provide links of different types of files you send

File To Link Bot - IDN-C-X Telegram bot to provide links of different types of files you send. WHAT CAN THIS BOT DO Is it a nuisance to send huge file

IDNCoderX 3 Oct 26, 2021