Skip to content
Back to top
View this page

# SubmissionModeration

class praw.models.reddit.submission.SubmissionModeration(submission: praw.models.Submission)

  Provide a set of functions pertaining to `Submission` moderation.

  Example usage:

      submission = reddit.submission("8dmv8z")
      submission.mod.approve()

  __init__(submission: praw.models.Submission)

    Initialize a `SubmissionModeration` instance.

    Parameters:

      submission – The submission to moderate.

  approve()

    Approve a `Comment` or `Submission`.

    Approving a comment or submission reverts a removal, resets the report counter, adds a green check mark indicator (only visible to other moderators) on the website view, and sets the `approved_by` attribute to the authenticated user.

    Example usage:

        # approve a comment:
        comment = reddit.comment("dkk4qjd")
        comment.mod.approve()
        # approve a submission:
        submission = reddit.submission("5or86n")
        submission.mod.approve()

  author_notes(**generator_kwargs) → Generator[praw.models.ModNote, None, None]

    Get the moderator notes for the author of this object in the subreddit it’s posted in.

    Parameters:

      generator_kwargs – Additional keyword arguments are passed in the initialization of the moderator note generator.

    Returns:

      A generator of `ModNote`.

    For example, to list all notes the author of a submission, try:

        for note in reddit.submission("92dd8").mod.author_notes():
            print(f"{note.label}: {note.note}")

  contest_mode(*, state: bool = True)

    Set contest mode for the comments of this submission.

    Parameters:

      state – `True` enables contest mode and `False` disables (default: `True`).

    Contest mode have the following effects:

    - The comment thread will default to being sorted randomly.

    - Replies to top-level comments will be hidden behind “[show replies]” buttons.

    - Scores will be hidden from non-moderators.

    - Scores accessed through the API (mobile apps, bots) will be obscured to “1” for non-moderators.

    Example usage:

        submission = reddit.submission("5or86n")
        submission.mod.contest_mode()

  create_note(*, label: str | None = None, note: str, **other_settings) → praw.models.ModNote

    Create a moderator note on the author of this object in the subreddit it’s posted in.

    Parameters:

      - label – The label for the note. As of this writing, this can be one of the following: `"ABUSE_WARNING"`, `"BAN"`, `"BOT_BAN"`, `"HELPFUL_USER"`, `"PERMA_BAN"`, `"SOLID_CONTRIBUTOR"`, `"SPAM_WARNING"`, `"SPAM_WATCH"`, or `None` (default: `None`).

      - note – The content of the note. As of this writing, this is limited to 250 characters.

      - other_settings – Additional keyword arguments are passed to `create()`.

    Returns:

      The new `ModNote` object.

    For example, to create a note on a `Submission`, try:

        reddit.submission("92dd8").mod.create_note(label="HELPFUL_USER", note="Test note")

  distinguish(*, how: str = 'yes', sticky: bool = False)

    Distinguish a `Comment` or `Submission`.

    Parameters:

      - how – One of `"yes"`, `"no"`, `"admin"`, or `"special"`. `"yes"` adds a moderator level distinguish. `"no"` removes any distinction. `"admin"` and `"special"` require special user privileges to use (default `"yes"`).

      - sticky – `Comment` is stickied if `True`, placing it at the top of the comment page regardless of score. If thing is not a top-level comment, this parameter is silently ignored (default `False`).

    Example usage:

        # distinguish and sticky a comment:
        comment = reddit.comment("dkk4qjd")
        comment.mod.distinguish(sticky=True)
        # undistinguish a submission:
        submission = reddit.submission("5or86n")
        submission.mod.distinguish(how="no")

    See also

    `undistinguish()`

  flair(*, css_class: str = '', flair_template_id: str | None = None, text: str = '')

    Set flair for the submission.

    Parameters:

      - css_class – The css class to associate with the flair html (default: `""`).

      - flair_template_id – The flair template ID to use when flairing.

      - text – The flair text to associate with the `Submission` (default: `""`).

    This method can only be used by an authenticated user who is a moderator of the submission’s `Subreddit`.

    Example usage:

        submission = reddit.submission("5or86n")
        submission.mod.flair(text="PRAW", css_class="bot")

  ignore_reports()

    Ignore future reports on a `Comment` or `Submission`.

    Calling this method will prevent future reports on this `Comment` or `Submission` from both triggering notifications and appearing in the various moderation listings. The report count will still increment on the `Comment` or `Submission`.

    Example usage:

        # ignore future reports on a comment:
        comment = reddit.comment("dkk4qjd")
        comment.mod.ignore_reports()
        # ignore future reports on a submission:
        submission = reddit.submission("5or86n")
        submission.mod.ignore_reports()

    See also

    `unignore_reports()`

  lock()

    Lock a `Comment` or `Submission`.

    Example usage:

        # lock a comment:
        comment = reddit.comment("dkk4qjd")
        comment.mod.lock()
        # lock a submission:
        submission = reddit.submission("5or86n")
        submission.mod.lock()

    See also

    `unlock()`

  nsfw()

    Mark as not safe for work.

    This method can be used both by the submission author and moderators of the subreddit that the submission belongs to.

    Example usage:

        submission = reddit.subreddit("test").submit("nsfw test", selftext="nsfw")
        submission.mod.nsfw()

    See also

    `sfw()`

  remove(*, mod_note: str = '', spam: bool = False, reason_id: str | None = None)

    Remove a `Comment` or `Submission`.

    Parameters:

      - mod_note – A message for the other moderators.

      - spam – When `True`, use the removal to help train the `Subreddit`’s spam filter (default: `False`).

      - reason_id – The removal reason ID.

    If either `reason_id` or `mod_note` are provided, a second API call is made to add the removal reason.

    Example usage:

        # remove a comment and mark as spam:
        comment = reddit.comment("dkk4qjd")
        comment.mod.remove(spam=True)
        # remove a submission
        submission = reddit.submission("5or86n")
        submission.mod.remove()
        # remove a submission with a removal reason
        reason = reddit.subreddit.mod.removal_reasons["110ni21zo23ql"]
        submission = reddit.submission("5or86n")
        submission.mod.remove(reason_id=reason.id)

  send_removal_message(*, message: str, title: str = 'ignored', type: str = 'public') → praw.models.Comment | None

    Send a removal message for a `Comment` or `Submission`.

    Warning

    The object has to be removed before giving it a removal reason. Remove the object with `remove()`. Trying to add a removal reason without removing the object will result in `RedditAPIException` being thrown with an `INVALID_ID` error_type.

    Reddit adds human-readable information about the object to the message.

    Parameters:

      - type – One of `"public"`, `"public_as_subreddit"`, `"private"`, or `"private_exposed"`. `"public"` leaves a stickied comment on the post. `"public_as_subreddit"` leaves a stickied comment on the post with the u/subreddit-ModTeam account. `"private"` sends a modmail message with hidden username. `"private_exposed"` sends a modmail message without hidden username (default: `"public"`).

      - title – The short reason given in the message. Ignored if type is `"public"` or `"public_as_subreddit"`.

      - message – The body of the message.

    Returns:

      The new `Comment` if `type` is `"public"` or `"public_as_subreddit"`.

  set_original_content()

    Mark as original content.

    This method can be used by moderators of the subreddit that the submission belongs to. If the subreddit has enabled the Original Content beta feature in settings, then the submission’s author can use it as well.

    Example usage:

        submission = reddit.subreddit("test").submit("oc test", selftext="original")
        submission.mod.set_original_content()

    See also

    `unset_original_content()`

  sfw()

    Mark as safe for work.

    This method can be used both by the submission author and moderators of the subreddit that the submission belongs to.

    Example usage:

        submission = reddit.submission("5or86n")
        submission.mod.sfw()

    See also

    `nsfw()`

  spoiler()

    Indicate that the submission contains spoilers.

    This method can be used both by the submission author and moderators of the subreddit that the submission belongs to.

    Example usage:

        submission = reddit.submission("5or86n")
        submission.mod.spoiler()

    See also

    `unspoiler()`

  sticky(*, bottom: bool = True, state: bool = True)

    Set the submission’s sticky state in its subreddit.

    Parameters:

      - bottom – When `True`, set the submission as the bottom sticky. If no top sticky exists, this submission will become the top sticky regardless (default: `True`).

      - state – `True` sets the sticky for the submission and `False` unsets (default: `True`).

    Note

    When a submission is stickied two or more times, the Reddit API responds with a 409 error that is raised as a `Conflict` by prawcore. This method suppresses these `Conflict` errors.

    This submission will replace the second stickied submission if one exists.

    For example:

        submission = reddit.submission("5or86n")
        submission.mod.sticky()

  suggested_sort(*, sort: str = 'blank')

    Set the suggested sort for the comments of the submission.

    Parameters:

      sort – Can be one of: `"confidence"`, `"top"`, `"new"`, `"controversial"`, `"old"`, `"random"`, `"qa"`, or `"blank"` (default: `"blank"`).

  undistinguish()

    Remove mod, admin, or special distinguishing from an object.

    Also unstickies the object if applicable.

    Example usage:

        # undistinguish a comment:
        comment = reddit.comment("dkk4qjd")
        comment.mod.undistinguish()
        # undistinguish a submission:
        submission = reddit.submission("5or86n")
        submission.mod.undistinguish()

    See also

    `distinguish()`

  unignore_reports()

    Resume receiving future reports on a `Comment` or `Submission`.

    Future reports on this `Comment` or `Submission` will cause notifications, and appear in the various moderation listings.

    Example usage:

        # accept future reports on a comment:
        comment = reddit.comment("dkk4qjd")
        comment.mod.unignore_reports()
        # accept future reports on a submission:
        submission = reddit.submission("5or86n")
        submission.mod.unignore_reports()

    See also

    `ignore_reports()`

  unlock()

    Unlock a `Comment` or `Submission`.

    Example usage:

        # unlock a comment:
        comment = reddit.comment("dkk4qjd")
        comment.mod.unlock()
        # unlock a submission:
        submission = reddit.submission("5or86n")
        submission.mod.unlock()

    See also

    `lock()`

  unset_original_content()

    Indicate that the submission is not original content.

    This method can be used by moderators of the subreddit that the submission belongs to. If the subreddit has enabled the Original Content beta feature in settings, then the submission’s author can use it as well.

    Example usage:

        submission = reddit.subreddit("test").submit("oc test", selftext="original")
        submission.mod.unset_original_content()

    See also

    `set_original_content()`

  unspoiler()

    Indicate that the submission does not contain spoilers.

    This method can be used both by the submission author and moderators of the subreddit that the submission belongs to.

    For example:

        submission = reddit.subreddit("test").submit("not spoiler", selftext="spoiler")
        submission.mod.unspoiler()

    See also

    `spoiler()`

  update_crowd_control_level(level: int)

    Change the Crowd Control level of the submission.

    Parameters:

      level – An integer between 0 and 3.

    Level Descriptions

    Level | Name | Description
    --- | --- | ---
    0 | Off | Crowd Control will not action any of the submission’s comments.
    1 | Lenient | Comments from users who have negative karma in the subreddit are automatically collapsed.
    2 | Moderate | Comments from new users and users with negative karma in the subreddit are automatically collapsed.
    3 | Strict | Comments from users who haven’t joined the subreddit, new users, and users with negative karma in the subreddit are automatically collapsed.

    Example usage:

        submission = reddit.submission("745ryj")
        submission.mod.update_crowd_control_level(2)

    See also

    `show()`