Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# Redditor

class praw.models.Redditor(reddit: praw.Reddit, name: Optional[str] = None, fullname: Optional[str] = None, _data: Optional[Dict[str, Any]] = None)

  A class representing the users of Reddit.

  Typical Attributes

  Note

  This table describes attributes that typically belong to objects of this class. PRAW dynamically provides the attributes that Reddit returns via the API. Since those attributes are subject to change on Reddit’s end, PRAW makes no effort to document any new/removed/changed attributes, other than to instruct you on how to discover what is available. As a result, this table of attributes may not be complete. See Determine Available Attributes of an Object for detailed information.

  If you would like to add an attribute to this table, feel free to open a pull request.

  Note

  Shadowbanned accounts are treated the same as non-existent accounts, meaning that they will not have any attributes.

  Note

  Suspended/banned accounts will only return the `name` and `is_suspended` attributes.

  Attribute | Description
  --- | ---
  `comment_karma` | The comment karma for the `Redditor`.
  `comments` | Provide an instance of `SubListing` for comment access.
  `submissions` | Provide an instance of `SubListing` for submission access.
  `created_utc` | Time the account was created, represented in Unix Time.
  `has_verified_email` | Whether or not the `Redditor` has verified their email.
  `icon_img` | The url of the Redditors’ avatar.
  `id` | The ID of the `Redditor`.
  `is_employee` | Whether or not the `Redditor` is a Reddit employee.
  `is_friend` | Whether or not the `Redditor` is friends with the authenticated user.
  `is_mod` | Whether or not the `Redditor` mods any subreddits.
  `is_gold` | Whether or not the `Redditor` has active Reddit Premium status.
  `is_suspended` | Whether or not the `Redditor` is currently suspended.
  `link_karma` | The link karma for the `Redditor`.
  `name` | The Redditor’s username.
  `subreddit` | If the `Redditor` has created a user-subreddit, provides a dictionary of additional attributes. See below.
  `subreddit["banner_img"]` | The URL of the user-subreddit banner.
  `subreddit["name"]` | The fullname of the user-subreddit.
  `subreddit["over_18"]` | Whether or not the user-subreddit is NSFW.
  `subreddit["public_description"]` | The public description of the user-subreddit.
  `subreddit["subscribers"]` | The number of users subscribed to the user-subreddit.
  `subreddit["title"]` | The title of the user-subreddit.

  __init__(reddit: praw.Reddit, name: Optional[str] = None, fullname: Optional[str] = None, _data: Optional[Dict[str, Any]] = None)

    Initialize a `Redditor` instance.

    Parameters:

      - reddit – An instance of `Reddit`.

      - name – The name of the redditor.

      - fullname – The fullname of the redditor, starting with `t2_`.

    Exactly one of `name`, `fullname` or `_data` must be provided.

  block()

    Block the `Redditor`.

    For example, to block `Redditor` u/spez:

        reddit.redditor("spez").block()

    Note

    Blocking a trusted user will remove that user from your trusted list.

    See also

    `trust()`

  comments() → SubListing

    Provide an instance of `SubListing` for comment access.

    For example, to output the first line of all new comments by u/spez try:

        for comment in reddit.redditor("spez").comments.new(limit=None):
            print(comment.body.split("\\n", 1)[0][:79])

  controversial(*, time_filter: str = 'all', **generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Any]

    Return a `ListingGenerator` for controversial items.

    Parameters:

      time_filter – Can be one of: `"all"`, `"day"`, `"hour"`, `"month"`, `"week"`, or `"year"` (default: `"all"`).

    Raises:

      `ValueError` if `time_filter` is invalid.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    This method can be used like:

        reddit.domain("imgur.com").controversial(time_filter="week")
        reddit.multireddit(redditor="samuraisam", name="programming").controversial(
            time_filter="day"
        )
        reddit.redditor("spez").controversial(time_filter="month")
        reddit.redditor("spez").comments.controversial(time_filter="year")
        reddit.redditor("spez").submissions.controversial(time_filter="all")
        reddit.subreddit("all").controversial(time_filter="hour")

  distrust()

    Remove the `Redditor` from your whitelist of trusted users.

    For example, to remove `Redditor` u/spez from your whitelist:

        reddit.redditor("spez").distrust()

    See also

    `trust()`

  downvoted(**generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Union[praw.models.Comment, praw.models.Submission]]

    Return a `ListingGenerator` for items the user has downvoted.

    Returns:

      A `ListingGenerator` object which yields `Comment` or `Submission` objects the user has downvoted.

    Raises:

      `prawcore.Forbidden` if the user is not authorized to access the list.

      Note

      Since this function returns a `ListingGenerator` the exception may not occur until sometime after this function has returned.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    For example, to get all downvoted items of the authenticated user:

        for item in reddit.user.me().downvoted():
            print(item.id)

  friend(*, note: str = None)

    Friend the `Redditor`.

    Parameters:

      note – A note to save along with the relationship. Requires Reddit Premium (default: `None`).

    Calling this method subsequent times will update the note.

    For example, to friend u/spez:

        reddit.redditor("spez").friend()

    To add a note to the friendship (requires Reddit Premium):

        reddit.redditor("spez").friend(note="My favorite admin")

  friend_info() → praw.models.Redditor

    Return a `Redditor` instance with specific friend-related attributes.

    Returns:

      A `Redditor` instance with fields `date`, `id`, and possibly `note` if the authenticated user has Reddit Premium.

    For example, to get the friendship information of `Redditor` u/spez:

        info = reddit.redditor("spez").friend_info
        friend_data = info.date

  classmethod from_data(reddit, data)

    Return an instance of `Redditor`, or `None` from `data`.

  property fullname: str

    Return the object’s fullname.

    A fullname is an object’s kind mapping like `t3` followed by an underscore and the object’s base36 ID, e.g., `t1_c5s96e0`.

  gild(*, months: int = 1)

    Gild the `Redditor`.

    Parameters:

      months – Specifies the number of months to gild up to 36 (default: `1`).

    For example, to gild `Redditor` u/spez for 1 month:

        reddit.redditor("spez").gild(months=1)

  gilded(**generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Any]

    Return a `ListingGenerator` for gilded items.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    For example, to get gilded items in r/test:

        for item in reddit.subreddit("test").gilded():
            print(item.id)

  gildings(**generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Union[praw.models.Comment, praw.models.Submission]]

    Return a `ListingGenerator` for items the user has gilded.

    Returns:

      A `ListingGenerator` object which yields `Comment` or `Submission` objects the user has gilded.

    Raises:

      `prawcore.Forbidden` if the user is not authorized to access the list.

      Note

      Since this function returns a `ListingGenerator` the exception may not occur until sometime after this function has returned.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    For example, to get all gilded items of the authenticated user:

        for item in reddit.user.me().gildings():
            print(item.id)

  hidden(**generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Union[praw.models.Comment, praw.models.Submission]]

    Return a `ListingGenerator` for items the user has hidden.

    Returns:

      A `ListingGenerator` object which yields `Comment` or `Submission` objects the user has hid.

    Raises:

      `prawcore.Forbidden` if the user is not authorized to access the list.

      Note

      Since this function returns a `ListingGenerator` the exception may not occur until sometime after this function has returned.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    For example, to get all hidden items of the authenticated user:

        for item in reddit.user.me().hidden():
            print(item.id)

  hot(**generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Any]

    Return a `ListingGenerator` for hot items.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    This method can be used like:

        reddit.domain("imgur.com").hot()
        reddit.multireddit(redditor="samuraisam", name="programming").hot()
        reddit.redditor("spez").hot()
        reddit.redditor("spez").comments.hot()
        reddit.redditor("spez").submissions.hot()
        reddit.subreddit("all").hot()

  message(*, from_subreddit: Optional[Union[praw.models.Subreddit, str]] = None, message: str, subject: str)

    Send a message to a `Redditor` or a `Subreddit`’s moderators (modmail).

    Parameters:

      - from_subreddit –

        A `Subreddit` instance or string to send the message from. When provided, messages are sent from the subreddit rather than from the authenticated user.

        Note

        The authenticated user must be a moderator of the subreddit and have the `mail` moderator permission.

      - message – The message content.

      - subject – The subject of the message.

    For example, to send a private message to u/spez, try:

        reddit.redditor("spez").message(subject="TEST", message="test message from PRAW")

    To send a message to u/spez from the moderators of r/test try:

        reddit.redditor("spez").message(
            subject="TEST", message="test message from r/test", from_subreddit="test"
        )

    To send a message to the moderators of r/test, try:

        reddit.subreddit("test").message(subject="TEST", message="test PM from PRAW")

  moderated() → List[praw.models.Subreddit]

    Return a list of the redditor’s moderated subreddits.

    Returns:

      A list of `Subreddit` objects. Return `[]` if the redditor has no moderated subreddits.

    Raises:

      `prawcore.ServerError` in certain circumstances. See the note below.

    Note

    The redditor’s own user profile subreddit will not be returned, but other user profile subreddits they moderate will be returned.

    Usage:

        for subreddit in reddit.redditor("spez").moderated():
            print(subreddit.display_name)
            print(subreddit.title)

    Note

    A `prawcore.ServerError` exception may be raised if the redditor moderates a large number of subreddits. If that happens, try switching to read-only mode. For example,

        reddit.read_only = True
        for subreddit in reddit.redditor("reddit").moderated():
            print(str(subreddit))

    It is possible that requests made in read-only mode will also raise a `prawcore.ServerError` exception.

    When used in read-only mode, this method does not retrieve information about subreddits that require certain special permissions to access, e.g., private subreddits and premium-only subreddits.

    See also

    `User.moderator_subreddits()`

  multireddits() → List[praw.models.Multireddit]

    Return a list of the redditor’s public multireddits.

    For example, to to get `Redditor` u/spez’s multireddits:

        multireddits = reddit.redditor("spez").multireddits()

  new(**generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Any]

    Return a `ListingGenerator` for new items.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    This method can be used like:

        reddit.domain("imgur.com").new()
        reddit.multireddit(redditor="samuraisam", name="programming").new()
        reddit.redditor("spez").new()
        reddit.redditor("spez").comments.new()
        reddit.redditor("spez").submissions.new()
        reddit.subreddit("all").new()

  notes() → praw.models.RedditorModNotes

    Provide an instance of `RedditorModNotes`.

    This provides an interface for managing moderator notes for a redditor.

    Note

    The authenticated user must be a moderator of the provided subreddit(s).

    For example, all the notes for u/spez in r/test can be iterated through like so:

        redditor = reddit.redditor("spez")

        for note in redditor.notes.subreddits("test"):
            print(f"{note.label}: {note.note}")

  classmethod parse(data: Dict[str, Any], reddit: praw.Reddit) → Any

    Return an instance of `cls` from `data`.

    Parameters:

      - data – The structured data.

      - reddit – An instance of `Reddit`.

  saved(**generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Union[praw.models.Comment, praw.models.Submission]]

    Return a `ListingGenerator` for items the user has saved.

    Returns:

      A `ListingGenerator` object which yields `Comment` or `Submission` objects the user has saved.

    Raises:

      `prawcore.Forbidden` if the user is not authorized to access the list.

      Note

      Since this function returns a `ListingGenerator` the exception may not occur until sometime after this function has returned.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    For example, to get all saved items of the authenticated user:

        for item in reddit.user.me().saved(limit=None):
            print(item.id)

  stream() → praw.models.reddit.redditor.RedditorStream

    Provide an instance of `RedditorStream`.

    Streams can be used to indefinitely retrieve new comments made by a redditor, like:

        for comment in reddit.redditor("spez").stream.comments():
            print(comment)

    Additionally, new submissions can be retrieved via the stream. In the following example all submissions are fetched via the redditor u/spez:

        for submission in reddit.redditor("spez").stream.submissions():
            print(submission)

  submissions() → SubListing

    Provide an instance of `SubListing` for submission access.

    For example, to output the title’s of top 100 of all time submissions for u/spez try:

        for submission in reddit.redditor("spez").submissions.top(time_filter="all"):
            print(submission.title)

  top(*, time_filter: str = 'all', **generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Any]

    Return a `ListingGenerator` for top items.

    Parameters:

      time_filter – Can be one of: `"all"`, `"day"`, `"hour"`, `"month"`, `"week"`, or `"year"` (default: `"all"`).

    Raises:

      `ValueError` if `time_filter` is invalid.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    This method can be used like:

        reddit.domain("imgur.com").top(time_filter="week")
        reddit.multireddit(redditor="samuraisam", name="programming").top(time_filter="day")
        reddit.redditor("spez").top(time_filter="month")
        reddit.redditor("spez").comments.top(time_filter="year")
        reddit.redditor("spez").submissions.top(time_filter="all")
        reddit.subreddit("all").top(time_filter="hour")

  trophies() → List[praw.models.Trophy]

    Return a list of the redditor’s trophies.

    Returns:

      A list of `Trophy` objects. Return `[]` if the redditor has no trophies.

    Raises:

      `RedditAPIException` if the redditor doesn’t exist.

    Usage:

        for trophy in reddit.redditor("spez").trophies():
            print(trophy.name)
            print(trophy.description)

  trust()

    Add the `Redditor` to your whitelist of trusted users.

    Trusted users will always be able to send you PMs.

    Example usage:

        reddit.redditor("AaronSw").trust()

    Use the `accept_pms` parameter of `Preferences.update()` to toggle your `accept_pms` setting between `"everyone"` and `"whitelisted"`. For example:

        # Accept private messages from everyone:
        reddit.user.preferences.update(accept_pms="everyone")
        # Only accept private messages from trusted users:
        reddit.user.preferences.update(accept_pms="whitelisted")

    You may trust a user even if your `accept_pms` setting is switched to `"everyone"`.

    Note

    You are allowed to have a user on your blocked list and your friends list at the same time. However, you cannot trust a user who is on your blocked list.

    See also

    - `distrust()`

    - `Preferences.update()`

    - `trusted()`

  unblock()

    Unblock the `Redditor`.

    For example, to unblock `Redditor` u/spez:

        reddit.redditor("spez").unblock()

  unfriend()

    Unfriend the `Redditor`.

    For example, to unfriend `Redditor` u/spez:

        reddit.redditor("spez").unfriend()

  upvoted(**generator_kwargs: Union[str, int, Dict[str, str]]) → Iterator[Union[praw.models.Comment, praw.models.Submission]]

    Return a `ListingGenerator` for items the user has upvoted.

    Returns:

      A `ListingGenerator` object which yields `Comment` or `Submission` objects the user has upvoted.

    Raises:

      `prawcore.Forbidden` if the user is not authorized to access the list.

      Note

      Since this function returns a `ListingGenerator` the exception may not occur until sometime after this function has returned.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

    For example, to get all upvoted items of the authenticated user:

        for item in reddit.user.me().upvoted():
            print(item.id)