Comment

class praw.models.Comment(reddit, id=None, url=None, _data=None)

A class that represents a Reddit comment.

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.

Attribute

Description

author

Provides an instance of Redditor.

body

The body of the comment, as Markdown.

body_html

The body of the comment, as HTML.

created_utc

Time the comment was created, represented in Unix Time.

distinguished

Whether or not the comment is distinguished.

edited

Whether or not the comment has been edited.

id

The ID of the comment.

is_submitter

Whether or not the comment author is also the author of the submission.

likes

The user’s current vote status on the comment: True if upvoted, False if downvoted, and None if not voted or not logged in.

link_id

The submission ID that the comment belongs to.

parent_id

The ID of the parent comment (prefixed with t1_). If it is a top-level comment, this returns the submission ID instead (prefixed with t3_).

permalink

A permalink for the comment. Comment objects from the inbox have a context attribute instead.

replies

Provides an instance of CommentForest.

saved

Whether or not the comment is saved.

score

The number of upvotes for the comment.

stickied

Whether or not the comment is stickied.

submission

Provides an instance of Submission. The submission that the comment belongs to.

subreddit

Provides an instance of Subreddit. The subreddit that the comment belongs to.

subreddit_id

The subreddit ID that the comment belongs to.

Parameters:
__init__(reddit, id=None, url=None, _data=None)

Initialize a Comment instance.

Parameters:
Return type:

None

block()

Block the user who sent the item.

Note

This method pertains only to objects which were retrieved via the inbox.

Example usage:

comment = reddit.comment("dkk4qjd")
comment.block()

# or, identically:

comment.author.block()
Return type:

None

clear_vote()

Clear the authenticated user’s vote on the object.

Note

Votes must be cast by humans. That is, API clients proxying a human’s action one-for-one are OK, but bots deciding how to vote on content or amplifying a human’s vote are not. See the reddit rules for more details on what constitutes vote manipulation. [Ref]

Example usage:

submission = reddit.submission("5or86n")
submission.clear_vote()

comment = reddit.comment("dxolpyc")
comment.clear_vote()
Return type:

None

collapse()

Mark the item as collapsed.

Note

This method pertains only to objects which were retrieved via the inbox.

Example usage:

inbox = reddit.inbox()

# select first inbox item and collapse it message = next(inbox)
message.collapse()

See also

uncollapse()

Return type:

None

delete()

Delete the object.

Example usage:

comment = reddit.comment("dkk4qjd")
comment.delete()

submission = reddit.submission("8dmv8z")
submission.delete()
Return type:

None

disable_inbox_replies()

Disable inbox replies for the item.

Note

This can only apply to items created by the authenticated user.

Example usage:

comment = reddit.comment("dkk4qjd")
comment.disable_inbox_replies()

submission = reddit.submission("8dmv8z")
submission.disable_inbox_replies()
Return type:

None

downvote()

Downvote the object.

Note

Votes must be cast by humans. That is, API clients proxying a human’s action one-for-one are OK, but bots deciding how to vote on content or amplifying a human’s vote are not. See the reddit rules for more details on what constitutes vote manipulation. [Ref]

Example usage:

submission = reddit.submission("5or86n")
submission.downvote()

comment = reddit.comment("dxolpyc")
comment.downvote()

See also

upvote()

Return type:

None

edit(body)

Replace the body of the object with body.

Parameters:

body (str) – The Markdown formatted content for the updated object.

Return type:

Comment | Submission

Returns:

The current instance after updating its attributes.

Example usage:

comment = reddit.comment("dkk4qjd")

# construct the text of an edited comment
# by appending to the old body:
edited_body = comment.body + "Edit: thanks for the gold!"
comment.edit(edited_body)
enable_inbox_replies()

Enable inbox replies for the item.

Note

This can only apply to items created by the authenticated user.

Example usage:

comment = reddit.comment("dkk4qjd")
comment.enable_inbox_replies()

submission = reddit.submission("8dmv8z")
submission.enable_inbox_replies()
Return type:

None

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.

static id_from_url(url)

Get the ID of a comment from the full URL.

Return type:

str

Parameters:

url (str)

property is_root: bool

Return True when the comment is a top-level comment.

mark_read()

Mark a single inbox item as read.

Note

This method pertains only to objects which were retrieved via the inbox.

Example usage:

inbox = reddit.inbox.unread()

for message in inbox:
    # process unread messages
    ...

See also

mark_unread()

To mark the whole inbox as read with a single network request, use Inbox.mark_all_read()

Return type:

None

mark_unread()

Mark the item as unread.

Note

This method pertains only to objects which were retrieved via the inbox.

Example usage:

inbox = reddit.inbox(limit=10)

for message in inbox:
    # process messages
    ...

See also

mark_read()

Return type:

None

mod()

Provide an instance of CommentModeration.

Example usage:

comment = reddit.comment("dkk4qjd")
comment.mod.approve()
Return type:

CommentModeration

parent()

Return the parent of the comment.

The returned parent will be an instance of either Comment, or Submission.

If this comment was obtained through a Submission, then its entire ancestry should be immediately available, requiring no extra network requests. However, if this comment was obtained through other means, e.g., reddit.comment("COMMENT_ID"), or reddit.inbox.comment_replies, then the returned parent may be a lazy instance of either Comment, or Submission.

Lazy comment example:

comment = reddit.comment("cklhv0f")
parent = comment.parent()
# 'replies' is empty until the comment is refreshed
print(parent.replies)  # Output: []
parent.refresh()
print(parent.replies)  # Output is at least: [Comment(id="cklhv0f")]

Warning

Successive calls to parent() may result in a network request per call when the comment is not obtained through a Submission. See below for an example of how to minimize requests.

If you have a deeply nested comment and wish to most efficiently discover its top-most Comment ancestor you can chain successive calls to parent() with calls to refresh() at every 9 levels. For example:

ancestor = reddit.comment("dkk4qjd")
refresh_counter = 0
while not ancestor.is_root:
    ancestor = ancestor.parent()
    if refresh_counter % 9 == 0:
        ancestor.refresh()
    refresh_counter += 1
print(f"Top-most Ancestor: {ancestor}")

The above code should result in 5 network requests to Reddit. Without the calls to refresh() it would make at least 31 network requests.

Return type:

Comment | Submission

classmethod parse(data, reddit)

Return an instance of cls from data.

Parameters:
Return type:

PRAWBase

refresh()

Refresh the comment’s attributes.

If using Reddit.comment() this method must be called in order to obtain the comment’s replies.

Example usage:

comment = reddit.comment("dkk4qjd")
comment.refresh()
Return type:

Comment

property replies: CommentForest

Provide an instance of CommentForest.

This property may return an empty list if the comment has not been refreshed with refresh()

Sort order and reply limit can be set with the reply_sort and reply_limit attributes before replies are fetched, including any call to refresh():

comment.reply_sort = "new"
comment.refresh()
replies = comment.replies

Note

The appropriate values for reply_sort include "confidence", "controversial", "new", "old", "q&a", and "top".

reply(body)

Reply to the object.

Parameters:

body (str) – The Markdown formatted content for a comment.

Return type:

Comment | Message | None

Returns:

A Comment or Message object for the newly created comment or message or None if Reddit doesn’t provide one.

Raises:

prawcore.exceptions.Forbidden when attempting to reply to some items, such as locked submissions/comments or non-replyable messages.

A None value can be returned if the target is a comment or submission in a quarantined subreddit and the authenticated user has not opt-ed into viewing the content. When this happens the comment will be successfully created on Reddit and can be retried by drawing the comment from the user’s comment history.

Example usage:

submission = reddit.submission("5or86n")
submission.reply("reply")

comment = reddit.comment("dxolpyc")
comment.reply("reply")
report(reason)

Report this object to the moderators of its subreddit.

Parameters:

reason (str) – The reason for reporting.

Raises:

RedditAPIException if reason is longer than 100 characters.

Return type:

None

Example usage:

submission = reddit.submission("5or86n")
submission.report("report reason")

comment = reddit.comment("dxolpyc")
comment.report("report reason")
save(*, category=None)

Save the object.

Parameters:

category (str | None) – The category to save to. If the authenticated user does not have Reddit Premium this value is ignored by Reddit (default: None).

Return type:

None

Example usage:

submission = reddit.submission("5or86n")
submission.save(category="view later")

comment = reddit.comment("dxolpyc")
comment.save()

See also

unsave()

property submission: Submission

Return the Submission object this comment belongs to.

uncollapse()

Mark the item as uncollapsed.

Note

This method pertains only to objects which were retrieved via the inbox.

Example usage:

inbox = reddit.inbox()

# select first inbox item and uncollapse it
message = next(inbox)
message.uncollapse()

See also

collapse()

Return type:

None

unsave()

Unsave the object.

Example usage:

submission = reddit.submission("5or86n")
submission.unsave()

comment = reddit.comment("dxolpyc")
comment.unsave()

See also

save()

Return type:

None

upvote()

Upvote the object.

Note

Votes must be cast by humans. That is, API clients proxying a human’s action one-for-one are OK, but bots deciding how to vote on content or amplifying a human’s vote are not. See the reddit rules for more details on what constitutes vote manipulation. [Ref]

Example usage:

submission = reddit.submission("5or86n")
submission.upvote()

comment = reddit.comment("dxolpyc")
comment.upvote()

See also

downvote()

Return type:

None